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

相关推荐
言之。1 小时前
【面试题】构建高并发、高可用服务架构:技术选型与设计
架构
小马爱打代码5 小时前
Tomcat整体架构分析
java·架构·tomcat
time_silence6 小时前
微服务——不熟与运维
运维·微服务·架构
-指短琴长-6 小时前
Docker之技术架构【八大架构演进之路】
docker·容器·架构
武子康6 小时前
大数据-259 离线数仓 - Griffin架构 修改配置 pom.xml sparkProperties 编译启动
xml·java·大数据·hive·hadoop·架构
2401_857617627 小时前
“无缝购物体验”:跨平台网上购物商城的设计与实现
java·开发语言·前端·安全·架构·php
思忖小下7 小时前
梳理你的思路(从OOP到架构设计)_介绍GoF设计模式
设计模式·架构·eit
秀儿y8 小时前
单机服务和微服务
java·开发语言·微服务·云原生·架构
向上的车轮12 小时前
云边端架构的优势是什么?面临哪些挑战?
架构·云边端