介绍
本次介绍的主角就是Artillery,它Artillery 是一个现代、强大、易于使用的负载测试和功能测试框架。它可以帮助你测试和监控你的应用程序,确保它们能够在高负载下正常工作。
背景
软件开发测试阶段,需要针对接口进行压测,1s60次请求的情况下,通过率达99%即可通过测试
特点
-
易于使用:Artillery 的测试脚本是用 YAML 或 JSON 编写的,非常易于理解和编写。你可以在几分钟内创建一个强大的负载测试。
-
支持多种协议:Artillery 支持 HTTP、WebSocket、Socket.io 和 HLS(HTTP Live Streaming)等多种协议,可以满足大多数应用的测试需求。
-
支持自定义逻辑:你可以使用 JavaScript 来编写自定义的测试逻辑,例如生成动态的请求参数、处理复杂的响应等。
-
强大的报告功能:Artillery 可以生成详细的测试报告,包括每个请求的响应时间、错误率等信息。你还可以将测试结果发送到 InfluxDB、Datadog、StatsD 等监控系统。
安装
js
npm install -g artillery
注意:artillery的安装对node的版本有限制,请确保本地的node版本在V18.16.1以上
步骤
- 编写测试脚本,保存为yml文件,代码示例:
js
config:
target: 'http://127.0.0.1:8080' //IP地址和端口号
processor: './pressure-test.js' //自定义压测参数方法
phases:
- duration: 1 //持续时间,单位:s
arrivalRate: 60 // 虚拟用户数,即代表接口请求次数
scenarios:
- flow:
- function: 'generateIncrementalParam' //pressure-test.js文件中的方法,用于自定义参数变量
- post:
url: '/test-pressure/page'
json:
page: 1
size: 10
condition: { name: '{{param}}' }
headers:
Authorization: 'Bearer your token' //token,用于请求鉴权,没有token限制可不填
- 运行脚本,生成测试结果
通过测试结果,可以查看接口请求情况,如上图,http.codes.200的接口数量为60,100%通过率。往下看会发现 All VUs finished. Total time:4 seconds,也就是说 所有的虚拟用户已经完成了任务,总时长是4s。
疑问: 脚本设置1s执行60次,为什么总用时为4s?
首先解释一下,4s是执行脚本的总运行时间,并非就是请求接口的响应时间,通过打开日志,实时监测后会发现,接口请求和响应在1s内全部完成,此致观察脚本并未执行完,因为其中还包含了测试脚本中指定的任何额外的设置或清理时间。 3. 生成测试报告 ① 可以使用 --output 参数将测试结果保存为一个 JSON 文件,然后使用其他工具(例如 artillery report 命令或你自己的脚本)来处理和显示这个文件的内容
js
npx artillery run --output report.json pressure-test.yml
② 使用 artillery report 命令来生成一个 HTML 报告
js
npx artillery report report.json
总结
使用artillery进行压测对于前端开发者来说,更易使用,在压测时可以使用javascript进行自定义逻辑的编写,比如动态请求参数、处理复杂的响应等;
artillery可以定义不同的负载模型,如逐渐增加负载、保持稳定负载、随机负载等,以模拟真实的使用情况。 可以帮助你评估应用程序的性能和可靠性,并发现潜在的性能问题。它提供了丰富的功能和灵活的配置选项,适用于各种应用程序和测试需求。
欢迎同学们批评指正!