首页 > 其他分享 >对比Jmeter和Locust,阿里性能专家全方位分析

对比Jmeter和Locust,阿里性能专家全方位分析

时间:2022-11-22 13:56:50浏览次数:38  
标签:压测 Locust 全方位 并发 TPS 测试 Jmeter

在实际性能测试过程中,到底选择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测试结果

 

 


Jmeter结果分析:可以看到在20并发时,压力机的CPU已经达到了90%,接近极限,TPS为3979,web服务器CPU在80%以内,还有一些剩余空间,证明还是没压到极限。

Locust测试

前置条件:

1、考虑到Locust是单进程的,不能充分利用多核CPU,于是在压力机上开启一个master进程,2个slave进程,组成一个单机分布式系统。

2、将脚本中的wait_time设置为0,即多次循环之间不等待。

3、使用no-web模式进行压测(实际对比测试,web模式和no-web模式性能没明显差别)


Locust测试结果

 

 

看我结果我惊呆了,相同并发下,Jmeter跑出了3000+TPS,Locust只有1500+?而且还把压力机的CPU消耗到了100%
想到了Locust官网曾提到过,默认情况下,Locust使用requests库发送HTTP请求,性能不太好,如果要产生更高的压力,建议使用FastHttpLocust作为HTTP客户端来压测,性能可以提升5-6倍

赶紧改了下Locust脚本,使用了FastHttpLocust客户端,再次进行压测,结果如下

可以看到,使用FastHttpLocust客户端后,Locust性能大幅提升,在10并发时,TPS就达到了4014,因为压力机CPU已经100%了,所以20并发下,TPS并没有什么明显增长。


场景总结

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报表,各个维度都有

Locust提供了简单的数据实时报表,不过也够用
个人感觉在报表方面,两个工具相差不是很大,都基本能满足工作需求

学习成本 & 易用性方面

Jmeter有单独的GUI界面,有丰富的内置函数,在脚本编写方面确实比较简单,基本上不需要写任何代码就能完成比较复杂的场景
Locust没有GUI界面,完全基于Python代码,所以你想使用什么功能,像参数化、关联、断言等,都得写代码来完成,相比来说学习成本更高

最终总结


发压能力:相同并发下,Locust(使用FastHttpLocust)> Jmeter

并发能力:Locust和Jmeter旗鼓相当,都能满足工作需求,Jmeter消耗的内存更高

结果报表:Jmeter好于Locust,但是基本都满足工作需求

学习成果:Jmeter>Locust

易用性:Jmeter > Locust

使用建议

如果只是做简单的接口测试、压力测试,没有需要写代码来扩展的特殊需求,首选Jmeter;

如果某些测试场景需要写代码来扩展,你会Java的话,可以选择Jmeter;

如果某些测试场景需要写代码来扩展,你会Python的话,可以选择Locust;

如果想在单台机器发起更大的压力的话,并且Python代码能力不错的话,可以选择Locust,记得一定要使用FastHttpLocust客户端

标签:压测,Locust,全方位,并发,TPS,测试,Jmeter
From: https://www.cnblogs.com/alamZ/p/16914886.html

相关文章

  • JMeter怎么用
    JMeter是一款测试工具,可以对网站虚拟出上前的并发访问量,也可以对数据库模拟用户测试。一.安装和使用1.安装包在​​Jmeter包​​2.解压以后打开/bin/jmeter.bat,出现命......
  • jmeter的两种脚本录制方法
    一、通过badboy录制(这种方法更方便)  二、通过jmeter代理来录制   再配置ie的代理,跟jmeter一样,这样录制的脚本有很多js脚本,录制脚本不够完美,不建议使用。......
  • jmeter,uuid去掉"-"
    jmeter调试过程,发现消费方流水号启用强校验是32位字符串,有点类似uuid但少了"-"第1想法是BeanShellPreProcessor把uuid去掉-,代码如下:importjava.util.UUID;UUIDuuid1......
  • JMETER,时间戳踩坑记录
    前段时间用jmeter5.2版本,压测前调试是16位长度流水号,但并发加上之后少一位流水(周期性)。今天用5.5版本尝试又没发现该问题。总之补位时最好不选用2个SS;选用3个大S16:${__......
  • 【Jmeter】21天打卡 08之取样器之http请求方法get/delete/put之间的请求
    1.新建测试计划-线程组-取样器(http请求三个,分别为get请求,put请求,delete请求)-添加监听器(查看结果树)2.在get请求中输入www.httpbin.org,接口为get,请求方法为:get请求内容:ge......
  • 【Jmeter】21天打卡 07之练习项目:httpbin.org
    1.新建测试计划-线程组-取样器(http请求)-添加监听器(查看结果树)2.在http请求中输入www.httpbin.org,接口为get,请求方法为:get请求内容:name=IDO,如图13.查看结果树,如图2 ......
  • 【Jmeter】21天打卡 05之配置元件之http信息头+Cookie管理器
    新建测试计划-线程组-取样器(http请求)-添加监听器(查看结果数)在http请求中输入www.baidu.com,查看结果树请求中的requestheaders头部字段包括如图1   Connectionk......
  • 一个基于jmeter的kafka的压测工具
    背景:由于工作中经常需要对微服务的性能进行测试,项目中的业务场景也多是对数据的处理,因此就有对消息中间件进行高性能生产消息的诉求,当前数据来源多是通过kafka,因此想研究......
  • 【操作系统】Linux下安装mysql、jmeter
    mysql安装安装调试启动官网:https://dev.mysql.com/downloads/repo/yum/下载好需要的rpm源,使用Xftp将rpm传入虚拟机的/root目录下Xshell操作linux,或者直接虚拟机终端......
  • 【Jmeter】21天打卡 05之使用Jmeter完成对www.baidu.com的两条接口测试
    具体要求:使用Jmeter完成对www.baidu.com两条接口测试实现步骤:1.新建测试计划--添加线程(线程组)-添加取样器(http请求1/http请求2)-添加断言(响应断言)-添加监听器(查看结果树)2......