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

相关推荐
SteveCode.11 小时前
高性能微服务架构:Spring Boot 集成 gRPC 实现用户与订单服务即时交互
spring boot·微服务·架构
m0_7286470812 小时前
Feed流系统重构:架构篇
重构·架构
java_heartLake13 小时前
微服务中间件之Nacos
后端·中间件·nacos·架构
_.Switch13 小时前
构建现代应用的Python Serverless架构详解
运维·开发语言·python·云原生·架构·serverless·restful
爱上语文19 小时前
Springboot三层架构
java·开发语言·spring boot·spring·架构
ღ᭄ꦿ࿐Never say never꧂21 小时前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
CaritoB21 小时前
中台架构下的数据仓库与非结构化数据整合
数据仓库·架构
canonical_entropy1 天前
金蝶云苍穹的Extension与Nop平台的Delta的区别
后端·低代码·架构
沛沛老爹1 天前
服务监控插件全览:提升微服务可观测性的利器
微服务·云原生·架构·datadog·influx·graphite
huaqianzkh1 天前
了解华为云容器引擎(Cloud Container Engine)
云原生·架构·华为云