安利一款使用 JavaScript 和 Node.js 编写的HTTP 负载测试工具--Artillery,真香啊

介绍

本次介绍的主角就是Artillery,它Artillery 是一个现代、强大、易于使用的负载测试和功能测试框架。它可以帮助你测试和监控你的应用程序,确保它们能够在高负载下正常工作。

背景

软件开发测试阶段,需要针对接口进行压测,1s60次请求的情况下,通过率达99%即可通过测试

特点

  1. 易于使用:Artillery 的测试脚本是用 YAML 或 JSON 编写的,非常易于理解和编写。你可以在几分钟内创建一个强大的负载测试。

  2. 支持多种协议:Artillery 支持 HTTP、WebSocket、Socket.io 和 HLS(HTTP Live Streaming)等多种协议,可以满足大多数应用的测试需求。

  3. 支持自定义逻辑:你可以使用 JavaScript 来编写自定义的测试逻辑,例如生成动态的请求参数、处理复杂的响应等。

  4. 强大的报告功能:Artillery 可以生成详细的测试报告,包括每个请求的响应时间、错误率等信息。你还可以将测试结果发送到 InfluxDB、Datadog、StatsD 等监控系统。

安装

js 复制代码
npm install -g artillery

注意:artillery的安装对node的版本有限制,请确保本地的node版本在V18.16.1以上

步骤

  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限制可不填
  1. 运行脚本,生成测试结果

通过测试结果,可以查看接口请求情况,如上图,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可以定义不同的负载模型,如逐渐增加负载、保持稳定负载、随机负载等,以模拟真实的使用情况。 可以帮助你评估应用程序的性能和可靠性,并发现潜在的性能问题。它提供了丰富的功能和灵活的配置选项,适用于各种应用程序和测试需求。

欢迎同学们批评指正!

往期精彩

# webpack5-构建速度提升篇

# 操刀Proxy & Reflect 实现一个简单的数据双向绑定,理解vue3的双向绑定原理

# vue项目使用webpack进行打包优化

# 不分框架的前端视频组件封装

# 前端打包发布一条龙--SCP2

# 使用speechSynthesis实现文字转语音功能

相关推荐
稻草人22224 小时前
java Excel 导出 ,如何实现八倍效率优化,以及代码分层,方法封装
后端·架构
数据智能老司机5 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
光殿6 小时前
性能测试
测试
数据智能老司机6 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
bobz9659 小时前
k8s svc 实现的技术演化:iptables --> ipvs --> cilium
架构
云舟吖10 小时前
基于 electron-vite 实现一个 RPA 网页自动化工具
前端·架构
brzhang11 小时前
当AI接管80%的执行,你“不可替代”的价值,藏在这20%里
前端·后端·架构
Lei活在当下1 天前
【业务场景架构实战】4. 支付状态分层流转的设计和实现
架构·android jetpack·响应式设计
架构师沉默1 天前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
kfyty7251 天前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构