安利一款使用 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实现文字转语音功能

相关推荐
sweet丶几秒前
CocoaPods Podfile优化设置手册-持续更新
ios·架构
前端不太难8 小时前
从 Navigation State 反推架构腐化
前端·架构·react
码农很忙9 小时前
HSAP一体化混合搜索与分析架构全解:重塑数据价值的新范式
架构
子春一210 小时前
Flutter 2025 架构演进工程体系:从单体到模块化,构建可扩展、可协作、可持续的大型应用
flutter·架构
小股虫12 小时前
Tair数据类型完全解读:架构思维与场景化实战
架构
踏浪无痕12 小时前
从 Guava ListenableFuture 学习生产级并发调用实践
后端·面试·架构
Boilermaker199212 小时前
[MySQL] 服务器架构
数据库·mysql·架构
最贪吃的虎14 小时前
消息队列从入门到起飞(一):初识消息队列——发展史、选型指南与架构差异剖析
架构
程序员小胖胖14 小时前
每天一道面试题之架构篇|动态功能开关(Feature Flag)系统架构设计
架构·系统架构
renke336416 小时前
Flutter 2025 模块化与微前端工程体系:从单体到可插拔架构,实现高效协作、独立交付与动态加载的下一代应用结构
前端·flutter·架构