Open Source Load Testing Tool Review 2020

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款工具的清单如下:

1
2
3
4
5
6
7
8
9
10
11
12
Apachebench 2.3
Artillery 1.6.0
Drill 0.5.0 (new)
Gatling 3.3.1
Hey 0.1.2
Jmeter 5.2.1
k6 0.26.0
Locust 0.13.5
Siege 4.0.4
Tsung 1.7.0
Vegeta 12.7.0
Wrk 4.1.0

文章主要关注众多测试工具的两方面内容:一是性能表现如何,二是易用性如何。

主要内容

  • 介绍了各个工具的基本信息,包括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工具集成。

微信扫一扫关注公众号

作者

Casey Wang

发布于

2021-01-22

更新于

2021-04-22

许可协议

评论