互联网行业的不断发展,用户规模也有了爆发性的增长。产品的性能成为影响用户体验的重要因素。因此,
性能测试越来越受到大型互联网企业的重视。 在做性能测试时,通常都会借助一些压测工具来模拟大量的并发用户。 目前业界压测工具种类繁多,比如Loadrunner、
Jmeter、
Locust、Ngrinder、Apache ab、Wrk、Webbench等。 面临这么多的压测工具,我们应该如何做出选择呢?你在公司里现在用的是什么工具呢? 相信很多小伙伴此刻喊出了“Jmeter”的名字,确实是,这几年 Jmeter因其使用简单,学习成本低,跨平台等特性,在行业内应用非常的广泛,拥有非常高的人气。 作为一款网红工具,Jmeter既能做接口性能测试,也可以做
自动化测试。深受广大人民群众的喜爱。 另一方面,
Python语言近些年在行业里也非常火,人生苦短、我用Python!使用Python来做自动化和
接口测试也是非常的方便。因此, Python届的压测工具Locust也逐步成为越来越多人的选择。 那么,在实际性能测试过程中,到底选择 Jmeter还是Locust ,除了语言上的差异,它们各自有什么优点和缺点吗? 今天,我会从不同的维度,对这两款工具来做下对比分析,希望能帮助大家选择适合自己的工具。 发压能力 一个压测工具的核心能力就是发压能力,每秒能发出多少请求,决定这个工具能产生多大的压力。我们先从发压能力来对这两款工具做下对比测试。
测试前的准备 为了方便测试,我首先 准备了一个测试环境,一台压力机和一台
web服务器 ,具体信息如下:

技术,你用潘长江来陪练这就不合适了。你得把奥尼尔找来,这样姚明才能发挥出自己的全部能力。我 在服务器上部署了一个性能VIP课上的接口项目,单接口能支持TPS 1w+。 压力机上分别安装了Jmeter5.1和Locust 0.13。 提前写好了Jmeter脚本和Locust脚本,两个脚本里均只保留了http请求和断言,为了测试最大压力,没有做任何参数化,也没有使用其他影响性能的组件和代码。 同时,为了避免链接数受限,已经优化了两台机器的文件句柄数和TCP参数。 好了,一切准备就绪,battle开始,Let’s go !
测试场景一:相同并发下,对商品信息接口压测,测试工具的最高TPS
Jmeter测试 前置条件:为了提升性能,采用了no-gui模式压测,Jvm堆内存配置为2G。从10并发开始,压测运行2分钟。
Jmeter测试结果

Locust测试 前置条件: 1、考虑到Locust是单进程的,不能充分利用多核CPU,于是在压力机上开启一个master进程,2个slave进程,组成一个单机分布式系统。 2、将脚本中的wait_time设置为0,即多次循环之间不等待。 3、使用no-web模式进行压测。(实际对比测试,web模式和no-web模式性能没明显差别)
Locust测试结果



场景总结 1、 在相同硬件配置,测试相同接口,使用相同的并发情况下,Locust产生的压力确实高于Jmeter,这个也是由于他们的底层实现机制不同,Jmeter基于多线程,Locust基于协程。 2、 无论采用哪个工具,单机能产生的TPS大体差不多,相比来说,Locust用更少的并发就能达到相同的TPS。不过Locust对压力机的CPU消耗也更高。 3、 Locust默认的HttpSession客户端确实挺垃圾的,做压测还是建议使用FastHttpLocust客户端,但是Locust官网也提到了,FastHttpLocust并不能完全替代HttpSession,这个还得取决于测试场景,所以这点也是使用中的一个风险。
测试场景二:相同配置下,测试工具能支持多少并发 前置条件: 在上一个测试场景中,无论Jmeter还是Locust,在20并发时,压力机CPU会接近100%了,所以为了测试更高的并发,就得需要换一个性能差一些的接口。大家记住一点,性能差的接口比性能好的接口支持更高的并发,还是先测试Jmeter,从1000并发开始测,逐步增加到10000并发,结果如下:

场景总结 从上面两个工具的高并发测试来看,相同配置的机器上,两个工具都可以跑出1w并发,不过Jmeter使用的内存高于Locust。再高的并发,个人感觉没有必要了,单机1w并发已经满足绝大多数的项目了(在线下测试,大部分项目几十并发就能测出拐点),如果需要更大规模的,还是建议用多台机器分布式发压。 以上两个测试场景,都是针对压测工具的核心能力:TPS能力和并发能力,接下来再来其他方面的对比。
测试报告对比 Jmeter有比较丰富的HTML报表,各个维度都有:




学习成本 & 易用性方面 Jmeter 有单独的GUI界面,有丰富的内置函数,在脚本编写方面确实比较简单, 基本上不需要写任何代码就能完成比较复杂的场景 。


最终总结 发压能力:相同并发下,Locust(使用FastHttpLocust)> Jmeter 并发能力:Locust和Jmeter旗鼓相当,都能满足工作需求,Jmeter消耗的内存更高 结果报表:Jmeter好于Locust,但是基本都满足工作需求 学习成果:Jmeter>Locust 易用性:Jmeter > Locust
使用建议 如果只是做简单的接口测试、
压力测试,没有需要写代码来扩展的特殊需求,首选Jmeter; 如果某些测试场景需要写代码来扩展,你会
Java的话,可以选择Jmeter; 如果某些测试场景需要写代码来扩展,你会Python的话,可以选择Locust; 如果想在单台机器发起更大的压力的话,并且Python代码能力不错的话,可以选择Locust,记得一定要使用FastHttpLocust客户端。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
21天更文挑战,赢取价值500元大礼,还有机会成为签约作者!