背景:
常用的压测工具有 jmeter,locust,k6,每个工具的架构以及实现的差异导致在使用体验上也存在很多的差异,不同的工具都有着自己独特的特性和优缺点。
作为测试人员,尽管我们更喜欢明确的答案,但是,讨论哪个工具更优并不是一件聪明的事,我们往往要根据业务的需求和团队的配置来选择相性更好的压测工具。
本文旨在对常用的压测工具优缺点以及特性进行尽可能全面地横向对比。
工具选型对比:
jmeter | k6 | locust | ||
---|---|---|---|---|
实现语言 | jave | golang | python | |
外部依赖 | java | - | python | |
脚本编写 | GUI编辑 | js编码 | python编码 | |
并发模型 | 线程:vu=1:1 | goroutine:vu=1:1 | gevent:vu=1:1 | |
资源利用率 | 差 | 好 | 较好 | |
插件支持 | 插件多,很多功能建立在插件之上 | 插件少,原生支持很多插件 | 不支持 | |
分布式能力 | 支持 | 支持 | 支持 | |
社区 | 成熟 | 较成熟 | 无 | |
内置压测报告 | 有 | 有 | 有 | |
原生支持的协议 | HTTP/HTTPS | ✅ | ✅ | ✅ |
SOAP | ✅ | ❌ | ❌ | |
JDBC | ✅ | ❌ | ❌ | |
LDAP | ✅ | ❌ | ❌ | |
TCP | ✅ | ❌ | ❌ | |
Java Objects | ✅ | ❌ | ❌ | |
JMS | ✅ | ❌ | ❌ | |
IMAP | ✅ | ❌ | ❌ | |
gRPC | ✅ | ✅ | ❌ | |
WebSockets | ✅ | ✅ | ❌ | |
Shell | ✅ | ❌ | ❌ | |
FTP | ✅ | ❌ | ❌ | |
二次开发(主观) | 难 | 较简单 | 简单 |
jmeter
工具简介:
是Apache基金会完全基于java开发的开源负载工具,支持多种协议的负载测试,于1998年发布。
工具特点:
由GUI驱动,工具界面就可以编写脚本,拥有着及其丰富的插件库,对于非开发人员来说,摸索学习UI界面以及选择插件的成本是要小于编写代码,对此来说,jemter还是较为用户友好的。
此外,jmeter还支持命令行执行,借助k8s可以较快的实现分布式能力以及压测机器的快速扩缩容,还可以根据项目需要定制适合的压测监控面板,如influxdb grafana等。
工具总结:
这是一款拥有功能完备GUI的压测工具,经历了时间的检验以及不断的迭代,且插件以及社区较为成熟,适用人群为压测经验少以及编码能力较为薄弱的同学,但是不适合私有协议压测以及压测执行机资源少的项目。