jquery 网站后台模板,网站分享链接怎么做的,网站开发搜索功能,建行网站会员是什么文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行#xff08;GUI模式#xff09;2、通过命令行执行#xff08;非GUI模式#xff09; 小知识#xff1a;… 文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行GUI模式2、通过命令行执行非GUI模式 小知识工具对比 连续文章教学链接如下
【Python】Python之locust压测教程从0到1demo基础轻量级压测实战1
【Python】Python之locust压测教程从0到1demo高阶轻量级压测实战常用参数详解2
一、什么是Locust
Locust 是一个开源的、基于 Python 的分布式负载测试工具用于测试网站、Web 应用程序和API的性能和可扩展性。它通过模拟大量并发用户访问目标系统帮助开发者和测试人员识别系统在高负载下的表现和潜在瓶颈。
Python之locust官方文档https://docs.locust.io/
二、Locust 架构组成
纯 Python 编写Locust 使用 Python 编写测试用例灵活且易于维护。HTTP 请求它是基于 requests 库发送 HTTP 请求。协程运行locust是使用协成运行的用更低的成本实现更多的并发。并且是基于gevent实现的。分布式支持支持分布式支持更多的压力测试Web UI内置了 Web UI可通过浏览器进行控制和监控。插件扩展我们可以用第三方的插件进行扩展。
结论如果你使用 Python 进行接口测试尤其是使用 requests 进行接口测试的那么就优先考虑使用 Locust 进行接口性能测试因为更方便。
三、实战 Demo
我实现的demo是从0到1的。所以是从接口测试用例转变成性能测试用例的一个过程。请注意看下面的内容。
准备一个可调用的接口
如果有可调用的接口那么可以忽略这一步。 安装 Flask pip install flask编写并运行以下代码创建一个简单的登录接口 from flask import Flask, make_responseapp Flask(__name__)app.route(/, methods[GET, POST])
def run():res {code: 0,msg: OK,data: {test: 测试页面}}return make_response(res)if __name__ __main__:app.run(host0.0.0.0, port8080, debugFalse, threadedTrue)运行后将生成一个可访问的接口。下面我们将会用这个接口去进行接口性能测试。 编写一个接口测试用例
使用 requests 调用刚才创建的接口并编写一个简单的测试用例
import requestsdef test_request():resp requests.get(urlhttp://127.0.0.1:8080/)print(resp.json())assert resp.status_code 200if __name__ __main__:test_request()运行测试用例如果没有报错说明接口正常。 编写一个性能测试用例
为了更好的演示和理解所以我们准备将上面的接口测试用例转换成locust的性能测试用例如下
首先通过 pip 安装 Locust
pip install locust将上述测试用例转换为 Locust 的性能测试用例如下
import locustclass MyUser(locust.HttpUser): # 1、在类中继承locust.HttpUser的子类也就是创建这个子类# 4、添加locust给我们提供的函数between里面1和2的值代表着每个task间隔1到2秒wait_time locust.between(1, 2)locust.task # 2、添加一个装饰器表明这是性能测试用例def test_request(self):resp self.client.get(urlhttp://127.0.0.1:8080/) # 3、使用self.client去发送请求print(resp.json())assert resp.status_code 200
转变步骤说明
创建一个类继承 locust.HttpUser。使用 locust.task 装饰器标识性能测试用例。使用 self.client.get或者post 发送请求。设置 wait_time locust.between(1, 2) 添加locust给我们提供的函数between里面1和2的值代表着每个task间隔1到2秒相当于每个测试用例的间隔
执行性能测试用例代码
执行性能测试用例有两种执行方式
1、通过 Web UI 执行GUI模式
通过webUI来执行主要就是简洁方便可以出具绘制图表来展示。但webUI也有一个小弊端那就是制作的图表会浪费一些性能因为制作图表的时候会实时获取数据这也是浪费性能的原因。 在终端运行 Locust 命令 locust -f 用例名称.py打开浏览器访问 Web UI通常为 http://0.0.0.0:8089。 配置测试参数 Number of users (peak concurrency)模拟的并发用户数例如 1000。Ramp up (users spawned/second)用户启动速率。比如我们选择了1000个用户如果我们这里填写10也就代表着每秒有10个用户在调用 。Host做过接口测试的同学都知道就是填写接口的url。但是我们在性能测试用例中已经写了URL那么这个就无所谓了。写不写都可以所以我们就随便写个1写1的原因是因为这个为空的话会报错也算是一个bugRun time测试运行时间例如 120s 表示运行2分钟。如果要一直运行那就不写。 我们可以在 STATISTICS里面看到测试结果。
性能测试结果分析 1请求总数与失败数 总请求数为 29293失败请求数为 18071失败率较高为62%。这表明接口在高负载下的稳定性较差需要开发去调查失败的原因。 2响应时间 中位数响应时间为 70 ms平均响应时间为 802.74 ms。中位数响应时间相对较低说明大部分请求的响应时间较快但平均响应时间较高可能是因为有少数请求的响应时间过长导致的。 95% 和 99% 的响应时间分别为 6300 ms 和 8900 ms表明有 5% 和 1% 的请求响应时间超过了这些阈值可能影响用户体验。 3最小值与最大值 最小响应时间为 2 ms最大响应时间为 10134 ms最大响应时间的差异较大说明在某些情况下接口的响应时间会非常慢。 4数据大小与吞吐量 平均数据大小为 24.9 字节当前每秒请求数 (RPS) 为 300.1当前故障数为 300.1。吞吐量表现良好但由于高失败率实际可用的吞吐量是受到影响的。
性能参数描述Type请求类型如Get/PostName请求路径Requests当前请求数量Failes请求失败数量Median中间值毫秒一半的服务器响应低于该值还有一半高于该值95%95%的请求响应时间Average平均值单位毫秒所有请求平均响应时间Min请求的服务器最小响应时间Max请求的服务器最大响应时间Average size单个请求大小字节RPS每秒能处理的请求数目 运行测试后可以在 CHARTS 页面查看实时数据。 RPS吞吐量349.7 最大用户数600 结论通过这个数据我们可以看到如果每秒有600用户去访问我们的接口。那么我们的服务器是承载不了的也就是说我们可以让600人同时在线。但是我们无法让349.7个用户不能在同一时间都得到结果。 异常信息测试接口拒绝连接表明服务器崩溃。 代码异常这代表接口用例执行失败抛出的异常。我们可以在后台看到也可以在webUI内看到。
2、通过命令行执行非GUI模式
使用命令行来执行就不会有页面和图表出现。所以会充分利用性能来进行测试接口。
常用的启动命令参数
locust -f 性能接口测试用例.py --headless -u 1000 -r 10 --host1 --run-time 120slocust -f 性能接口测试用例.py启动命令 --headless无头参数非GUI模式 -u 1000代表1000个用户 -r 10代表每秒10个用户递增 --host1就是填写的url因为我们代码内置了所以就随便写个1为什么写1是因为不写会报错 -t或者--run-time 120s就是运行的时长运行120秒
启动之后的结果如下我改成了5秒直接看结果
小知识工具对比
工具区别JMeter需要在 UI 界面上通过选择组件来“编写”脚本模拟的负载是线程绑定的意味着每个用户需要一个单独的线程。单台负载机可模拟的负载数有限。Locust通过编写简单易读的代码完成测试脚本基于事件驱动同样配置下单台负载机可模拟的负载数远超 JMeter。
如果您觉得本文对您有帮助欢迎点赞、收藏和分享有任何疑问或建议欢迎在评论区留言讨论。