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/ ,其他平台需要审核更新慢一些。

相关文章
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
移动开发 Cloud Native 网络协议
358 0
|
缓存 网络协议 API
HTTP/1.1相较于HTTP/1.0所实现的性能提升点分析。
通过以上的技术改进,HTTP/1.1显著提升了Web的性能和可靠性,同时减少了带宽的使用和服务器的负载。这些特性直到今天仍然是现代Web通信的基础。尽管如今HTTP/2和HTTP/3逐渐取代了旧的协议,以上所述的HTTP/1.1性能提升对所有后续版本仍然有着深远影响。
624 0
|
JSON 运维 网络协议
做短信接口时,http接口和cmpp接口怎么选?
本文介绍了短信接口中HTTP与CMPP协议的区别及适用场景,帮助开发者根据业务需求选择合适的接口类型。
1580 1
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1802 23
|
网络协议 API Python
解析http.client与requests在Python中的性能比较和改进策略。
最后,需要明确的是,这两种库各有其优点和适用场景。`http.client` 更适合于基础且并行的请求,`requests` 则因其易用且强大的功能,更适用于复杂的 HTTP 场景。对于哪种更适合你的应用,可能需要你自己进行实际的测试来确定。
370 10
|
网络协议 API 开发者
分析http.client与requests在Python中的性能差异并优化。
合理地选择 `http.client`和 `requests`库以及在此基础上优化代码,可以帮助你的Python网络编程更加顺利,无论是在性能还是在易用性上。我们通常推荐使用 `requests`库,因为它的易用性。对于需要大量详细控制的任务,或者对性能有严格要求的情况,可以考虑使用 `http.client`库。同时,不断优化并管理员连接、设定合理超时和重试都是提高网络访问效率和稳定性的好方式。
345 19
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
1244 90
|
XML 网络协议 程序员
Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南
Apipost是一款强大的接口调试工具,支持多种主流API协议。它涵盖HTTP/HTTPS、WebSocket、Socket.IO、gRPC、GraphQL、TCP及ISO8583金融报文等冷门协议。通过Body多样化、全局参数配置、性能分析等功能优化HTTP调试;提供WebSocket多消息存档与事件监听;gRPC支持服务反射和流式调试;GraphQL可自动生成Schema;TCP报文模板专业精准;SSE配置简单。此外,Apipost还具备环境变量、脚本加持和文档生成功能,是提升开发效率的全能工具。
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2487 24

热门文章

最新文章