Open Source Load Testing Tool Review 2020
Ragnar Lönn, 04 MARCH 2020
原文地址:https://k6.io/blog/comparing-best-open-source-load-testing-tools
摘要
今年想在 DevOps 平台上集成一些性能测试的工具,方便开发团队自助进行性能测试,调研了一些工具,分享其中一篇文章。
这篇文章的作者分别在 17 年和 20 年对市面上的性能测试工具进行了详细的比较和评测,内容非常翔实,他自己也是其中 k6 工具的作者。
文中参与评测的 12 款工具的清单如下:
文章主要关注众多测试工具的两方面内容:一是性能表现如何,二是易用性如何。
主要内容
介绍了各个工具的基本信息,包括 License、实现的语言、脚本化/多线程/分布式支持等,今年 Drill 作为唯一的 Rust 实现的工具被加入比较,简单数了一下其他语言实现的数量:C 语言 3,NodeJS 1, Scala 1,Go 3,Java 1,Python 1,Erlang 1。
比较各个工具的开发活跃度,Jmeter、k6、Gatling、Locust 最活跃,wrk 改动较少,Apachebench 没怎么维护了
介绍各个工具的历史和背景,Wrk 看起来非常稳定和性能强大,缺点就是不支持 HTTP/2 和一些新功能,Hey 的输出很简洁清晰,在支持脚本化的工具中 Locust 被认为很棒,当然从作者的角度 k6 是最好的。
介绍了性能测试的一些观察指标,例如 CPU 负载、内存消耗、网络延迟、网络带宽,以及这些指标对理论性能的约束。
文章测试了工具的最大流量生成能力、每个虚拟用户(VU)的平均内存消耗、每笔请求的平均内存消耗、响应时间的测量精准度。
最大流量生成能力,Wrk 独树一帜(5w RPS),Hey 紧随其后(1.8w RPS),k6 1.1w,Jmeter 7000,Locust 2900, Drill 拉胯。
内存占用方面,Java 和 Python 的工具内存消耗最大,C 和 Go 编写的表现更好。通过观察每个虚拟用户的平均内存消耗和每笔请求的平均内存消耗,作者发现除了 Jmeter,大部分工具的内存占用并不会随着 VU 的增长而增长。
在响应时间的测量精准度方面,Wrk 产生了 4.5w RPS,但是响应时间中位数为 1.79ms(Amazing),而 Artillery 只有 266 RPS,响应时间中位数高达 158ms。
测试总结,Gatling 更像现代版的 Jmeter,Hey 很适合简单的命令行测试,Vegeta 适合更复杂一些的命令行测试场景,Jmeter 太笨重也许适合非开发者用户,作者推荐在面向开发者的自动化测试场景使用 k6,推荐喜欢用 Python 写测试脚本的用户使用 Locust,推荐在希望产生海量请求的场景使用 Wrk。
最后,文章的评论中有人提到了一些不错的工具,例如 Grinder(Java)、Yandex Tank(Python),也有人提到 Gatling 的测试成绩有偏差,作者重新经过 warm up 之后测试能达到 4000 RPS,比 Jmeter 要快
后记
这些工具里面之前用得多的就是 Jmeter,看完文章后去了解了下 Gatling,可惜只有企业版有很完善的可视化报告界面,相比之下 k6 的做法更好,没有配套的界面,但是度量数据可以输出到 Kafka、InfluxDB + Grafana 等工具中,方便与企业已有的可视化工具集成,k6 的文档也很规范完善,本身是完全开源的,适合与 DevOps 工具集成。
版权声明: 本文为 InfoQ 作者【OutOfMemory1024】的原创文章。
原文链接:【http://xie.infoq.cn/article/c65220fa660cc311f2fe287e2】。文章转载请联系作者。
评论