安利一款使用 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 小时前
MySQL 高可用方案:主从 + MHA + ProxySQL + PXC 的实战应用与架构思考
数据库·mysql·架构
Alex艾力的IT数字空间3 小时前
设计既保持高性能又兼顾可移植性的跨平台数据结构
数据结构·分布式·算法·微服务·中间件·架构·动态规划
液态不合群4 小时前
DDD驱动低代码开发:从业务流程到领域模型的全链路设计
前端·低代码·架构·ddd
失散134 小时前
架构师级别的电商项目——2 电商项目核心需求分析
java·分布式·微服务·架构·需求分析
nnn__nnn5 小时前
卷积神经网络经典架构全景解析:从 ILSVRC 竞赛到视觉技术的生态级演进
计算机视觉·架构·cnn
菜鸡儿齐5 小时前
本地事务实效-分布式架构
分布式·架构
打码人的日常分享6 小时前
基于信创体系政务服务信息化建设方案(PPT)
大数据·服务器·人工智能·信息可视化·架构·政务
小坏讲微服务6 小时前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
周杰伦_Jay8 小时前
【基于 Spring Cloud Alibaba 的微服务电商项目】完整实现思路
微服务·云原生·架构
7***53348 小时前
微服务分布式事务解决方案
分布式·微服务·架构