我一直在寻找可以帮助我进行负载测试和基准测试的工具。我发现了几个,例如:
我想知道是否有人有使用这些工具的经验,并对这些工具的优缺点有任何反馈意见。我的压力测试将包括使用DELETE、PUT、GET、POST等头部信息的不同测试案例。
我一直在寻找可以帮助我进行负载测试和基准测试的工具。我发现了几个,例如:
我想知道是否有人有使用这些工具的经验,并对这些工具的优缺点有任何反馈意见。我的压力测试将包括使用DELETE、PUT、GET、POST等头部信息的不同测试案例。
负载测试和基准测试工具
按字母顺序列出。
ab: 缓慢且单线程,用C语言编写
apib: 具有大多数ApacheBench(ab)的功能,同时也是一个更现代的替代品,用C语言编写
baloo: 表达式端到端HTTP API测试变得简单易行,用Go (golang)编写
baton: HTTP负载测试,用Go (golang)编写
bombardier: 快速跨平台HTTP基准测试工具,用Go (golang)编写
curl-loader: 各种应用程序服务性能加载和流量生成,用C语言编写
drill: 受Ansible语法启发的HTTP负载测试应用程序,用Rust编写
fasthttploader: 基于fasthttp库的基准测试(有点像ab),具有自动调整和图表功能,用Go (golang)编写
fortio: 负载测试库和命令行工具和Web UI。允许指定一组每秒查询负载并记录延迟直方图和其他有用的统计信息,用Go (golang)编写
gatling: 基于Scala、Akka和Netty的高性能负载测试框架,用Scala语言编写
go-wrk:基于优秀的wrk工具(wg/wrk)的HTTP基准测试工具,用Go(golang)编写
goad:由AWS Lambda驱动的高度分布式负载测试工具,用Go(golang)编写
gobench:HTTP/HTTPS负载测试和基准测试工具,用Go(golang)编写
gohttpbench:在多核CPU上运行的类似ab的基准测试工具,用Go(golang)编写
hey:HTTP(S)负载生成器,替代ApacheBench(ab),以前称为rakyll/boom,用Go(golang)编写
htstress:多线程高负荷基准测试服务(>5K rps),用C/Linux编写
httperf:难以配置、速度慢且单线程,用C编写
inundator:简单高吞吐量的HTTP洪水程序,用C/Linux编写
jmeter:纯应用程序,旨在对静态和动态资源进行负载测试,用Java编写
k6:现代化的负载测试工具,支持ES6 JS脚本,支持HTTP/1.1、HTTP/2.0和WebSocket,用Go(golang)编写
Locust:易于使用、具有实时 Web UI、分布式负载测试工具。模拟并发用户群,它们的行为由您的 Python 代码定义。用 Python 编写。
mgun:现代化的负载测试 HTTP 服务器工具,用 Go(golang)编写。
Pounce:事件驱动、结果波动较大,有时比 htstress 更快的负载测试工具,用 C 编写。
Siege:慢且单线程的负载测试工具,用 C 编写。
Slapper:简单的负载测试工具,实时更新请求时间直方图,用 Go(golang)编写。
Slow cooker:专注于生命周期问题和长期运行测试的负载测试器,服务于一个可预测的长时间运行的负载和并发水平,用 Go(golang)编写。
Sniper:功能强大、高性能的 HTTP 负载测试工具,用 Go(golang)编写。
Tsung:模拟压力用户以测试基于 IP 的客户端/服务器应用的可扩展性和性能,支持 HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP 服务器,用 Erlang 编写。
Vegeta:HTTP 负载测试工具和库,用 Go(golang)编写。
weighttp:用C语言编写的多线程工具,但是没有keepalive时比htstress慢。
wrk:用C/Lua语言编写的多线程工具。
wrk2:是wrk的改进版,可以保持恒定的吞吐量和正确的延迟记录,用C/Lua语言编写。
yandex-tank:一款性能测试和负载测试工具,用Python/C|C++|Asm (phantom)语言编写。
以上说明来自这里。
我使用过wrk和siege,siege是一个非常易于使用的工具,但我不确定它是否可以用于测试DELETE或PUT。
Wrk可以使用提供的lua脚本生成请求,因此删除和更新PUT将不成问题。而且wrk是一种可以超越NGINX静态文件服务器的工具,因此我认为它足够快以用于一般性能负载测试。
我从未使用过@Direvius建议的boom或Yandex.tank,基本上是因为wrk已经足够简单并符合我们的需求。但对我来说,JMeter太过复杂。