HTTP接口性能压力测试

简介: 开发接口以后,对性能有要求的 接口,需要做 性能压力测试。常见免费的如:经典的 ab,性能不太好的 jmeter、siege(有时候都怀疑程序性能不行了),另介绍 hey、k6、vegeta、wrk

一、前言

  • 开发接口以后,对性能有要求的 接口,需要做 性能压力测试
  • 常见免费的如:经典的 ab,性能不太好的 jmeter、siege(有时候都怀疑程序性能不行了),另介绍 hey、k6、vegeta、wrk

二、方案

1. ab - Apache HTTP server benchmarking tool

  • C语言开发,适用于 Linux 平台
  • 优劣:可能因为在 WSL里面运行,性能表现不太好,容易报错,apr_pollset_poll: The timeout specified has expired (70007)
  • 参数:c 并发数、n 总请求数、k 表示 开启 Keep Alive 特性、r 表示 忽略 socket receive errors
  • ab -c 100 -k -r -n 10000 http://www.a.com/a
    http-bench-ab.png

2. hey: HTTP load generator, ab replacement

  • GO语言开发,适用于 Linux、Mac、Windows 平台
  • 性能高,跨平台,报表显示慢请求原因,最近发版是 2020年
  • 参数:c 并发数、z 测试时长
  • hey -c 50 -z 5s http://www.a.com/a
    http-bench-hey.png

3. jmeter

  • Java语言开发,适用于 多 平台
  • 优劣:性能较差,跨平台

4. k6:load testing tool, using Go and JS

  • GO语言开发,适用于 Linux、Mac、Windows 平台
  • 优劣:性能较高,跨平台,支持 请求统计结果 校验,非常适合开发人员(复制略作调整即可)做接口自动化测试
  • 参数:u 并发数、d 测试时长
  • 需用 JavaScript 脚本 定义测试内容(如保存为 k6.js),k6 run -u 200 -d 10s k6.js
    ```javascript
    import http from "k6/http";
    import { check, sleep } from "k6";
    // Test configuration
    export const options = {
    };

export default function () {
let res = http.get("url");
// check(res, { "status was 200": (r) => r.status == 200 });
}
```

http-bench-k6.png

5. siege

  • C语言开发,适用于 Linux 平台
  • 优劣:性能较低,不跨平台,报表没有显示慢请求原因
  • 参数:c 并发数、t 测试时长(末尾单位必须大写)、b 表示 压测模式,请求不延迟(BENCHMARK: no delays between requests.)
  • siege -c 200 -t 10S -b http://www.a.com/a
    http-bench-siege.png

6. vegeta

  • GO语言开发,适用于 Linux、Mac、Windows 等5平台
  • 优劣:性能高,跨平台,报表没有显示慢请求原因
  • 参数:rate 指定并发,默认每秒 50个请求,0 表示不限制(用于测试接口极限性能,需和 max-workers 参数一起使用)
  • 另 workers 参数 指定 初始 workers 数量,默认为 10,设置和 max-workers 相等可避免测试过程中创建连接耗时
  • echo "GET http://www.a.com/a" | vegeta attack -rate 0 -workers 200 -max-workers 200 -duration 10s | vegeta report
    http-bench-vegeta.png

7. wrk

  • C语言开发,适用于 Linux 平台
  • 优劣:性能超高,不跨平台,最近发版是 2021年2月,另WSL里面运行卡住停不下来
  • t 线程数(不宜过大,避免太多上下文切换,CPU核心数 1到3倍左右),c 连接数,d 测试时长(末尾 s 表示秒),latency 输出延迟统计
  • wrk -t12 -c100 -d10s --latency http://www.a.com/a

三、总结

Open source load testing tool review 2020 (k6.io)
| 工具 | RPS | 开发语言 | 支持平台 | 备注 |
|:------------------------------------------- |:----- | --- |:-------- |:--------------------------------------------------------------- |
| ab | 1929 | C | Linux | 可能因为在 WSL里面运行,性能不太好,容易报错 |
| hey | 12000 | GO | 3平台 | 性能高,跨平台,报表显示慢请求原因,最近发版是2020年 |
| jmeter | - | Java | 多平台 | 性能低,跨平台 |
| k6 | 10000 | GO | 3平台 | 性能较高,跨平台,支持 请求、统计结果 校验,更适合自动化测试 |
| siege | 2253 | C | Linux | 性能低,不跨平台,报表没有显示慢请求原因 |
| vegeta | 10400 | GO | 5平台 | 性能高,跨平台,报表没有显示慢请求原因 |
| wrk | - | C | Linux | 性能超高,不跨平台,最近发版是 2021年2月,另WSL里面运行没有效果 |

本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明,否则将追究法律责任。
本文首先发布于 https://www.890808.xyz/ ,其他平台需要审核更新慢一些。

相关文章
|
7天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
1月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
111 60
|
7天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
37 3
|
20天前
|
算法 网络安全 数据安全/隐私保护
HTTPS的性能
【10月更文挑战第23天】HTTPS的性能
36 5
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
1月前
|
JSON Java fastjson
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
UniHttp 是一个声明式的 HTTP 接口对接框架,旨在简化第三方 HTTP 接口的调用过程。通过注解配置,开发者可以像调用本地方法一样发起 HTTP 请求,无需关注请求的构建和响应处理细节。框架支持多种请求方式和参数类型,提供灵活的生命周期钩子以满足复杂的对接需求,适用于企业级项目的快速开发和维护。GitHub 地址:[UniAPI](https://github.com/burukeYou/UniAPI)。
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
239 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
247 3
快速上手|HTTP 接口功能自动化测试