• 0
  • 0
分享
  • 阿里性能专家全方位对比Jmeter和Locust,到底谁更香?
  • 恬恬圈 2023-06-28 14:54:09 字数 3103 阅读 3848 收藏 0

  近些年,随着互联网行业的不断发展,用户规模也有了爆发性的增长。产品的性能成为影响用户体验的重要因素。因此,性能测试越来越受到大型互联网企业的重视。

  在做性能测试时,通常都会借助一些压测工具来模拟大量的并发用户。 目前业界压测工具种类繁多,比如Loadrunner、Jmeter、Locust、Ngrinder、Apache ab、Wrk、Webbench等。

  面临这么多的压测工具,我们应该如何做出选择呢?你在公司里现在用的是什么工具呢?

  相信很多小伙伴此刻喊出了“Jmeter”的名字,确实是,这几年 Jmeter因其使用简单,学习成本低,跨平台等特性,在行业内应用非常的广泛,拥有非常高的人气。 作为一款网红工具,Jmeter既能做接口性能测试,也可以做自动化测试。深受广大人民群众的喜爱。

  另一方面,Python语言近些年在行业里也非常火,人生苦短、我用Python!使用Python来做自动化和接口测试也是非常的方便。因此, Python届的压测工具Locust也逐步成为越来越多人的选择。

  那么,在实际性能测试过程中,到底选择 Jmeter还是Locust ,除了语言上的差异,它们各自有什么优点和缺点吗?

  今天,我会从不同的维度,对这两款工具来做下对比分析,希望能帮助大家选择适合自己的工具。

  发压能力

  一个压测工具的核心能力就是发压能力,每秒能发出多少请求,决定这个工具能产生多大的压力。我们先从发压能力来对这两款工具做下对比测试。

  测试前的准备

  为了方便测试,我首先 准备了一个测试环境,一台压力机和一台web服务器 ,具体信息如下:


1-1.jpg

  为了更好的测试两个工具的发压能力,必须得找一个性能比较好的项目来做压测。就好比你现在要测试巅峰姚明的篮球技术,你用潘长江来陪练这就不合适了。你得把奥尼尔找来,这样姚明才能发挥出自己的全部能力。我 在服务器上部署了一个性能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测试结果

1-2.png


  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测试结果

1-3.png


  看我结果我惊呆了,相同并发下,Jmeter跑出了3000+TPS,Locust只有1500+?而且还把压力机的CPU消耗到了100%。

  想到了Locust官网曾提到过,默认情况下,Locust使用requests库发送HTTP请求,性能不太好,如果要产生更高的压力,建议使用FastHttpLocust作为HTTP客户端来压测,性能可以提升5-6倍。


1-4.jpg

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


1-5.png

  可以看到,使用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并发,结果如下:


1-6.jpg

  场景总结

  从上面两个工具的高并发测试来看,相同配置的机器上,两个工具都可以跑出1w并发,不过Jmeter使用的内存高于Locust。再高的并发,个人感觉没有必要了,单机1w并发已经满足绝大多数的项目了(在线下测试,大部分项目几十并发就能测出拐点),如果需要更大规模的,还是建议用多台机器分布式发压。

  以上两个测试场景,都是针对压测工具的核心能力:TPS能力和并发能力,接下来再来其他方面的对比。

  测试报告对比

  Jmeter有比较丰富的HTML报表,各个维度都有:

1-7.jpg

1-8.jpg

1-9.jpg


  Locust提供了简单的数据实时报表,不过也够用。

1-10.jpg

  个人感觉在报表方面,两个工具相差不是很大,都基本能满足工作需求。

  学习成本 & 易用性方面

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

1-11.jpg

  Locust 没有GUI界面,完全基于Python代码,所以你想使用什么功能,像参数化、关联、断言等,都得写代码来完成, 相比来说学习成本更高 。

1-12.jpg

  最终总结

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

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

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

  学习成果:Jmeter>Locust

  易用性:Jmeter > Locust

  使用建议

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

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

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

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


作者:程青锋    

来源:http://www.51testing.com/html/14/n-6993414.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • selenium 中隐藏元素如何定位?面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题, 如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方 法就行了但是吧~~~很多面试官自己都搞不清楚啥叫定位,啥叫操作元素(如 click,clear,send_keys)隐藏元素如下图有个输入框和一个登录的按钮,本来是显示的面试 web 自动化必然会问到 selenium,问 selenium 相关的问题定位是最基本的, 也是自动化的根本,所以面试离不开元素定位问题。 之前看到招聘要求里面说“只会复制粘贴 xpath 的就不要投简历了”,说明面试 官对求职者的...
            0 0 1509
            分享
          • 针对http接口进行测试,使用Jmeter工具实现。Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此本次直接使用Jmeter工具来完成对Http接口的测试。一、开发接口测试案例的整体方案:第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点;第三步:和开发一起对接口测试案例进行评审;第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件;第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发...
            13 14 2624
            分享
          •   很多老铁提出辞职后,老板却给加薪了,尴尬吧,那到底走还是不走?  如果是2019年以前,我会毫不犹豫建议你辞职。因为从管理角度来说,这种加薪方式不科学,是典型的“会哭的孩子有糖吃”,会导致很多不良后果。  但是,从2023年整体情况来看,我建议你慎重考虑。  《哈佛商业评论》曾经进行过一项关于辞职的调查,结果显示近40%的HR和管理者认为,离职时接受现任雇主的挽留,会对一个人的职业生涯产生不利影响。也有更多参与调查的HR和管理者认为,老板为留人开出的条件,员工可以考虑接受。  所以,我们需要具体问题具体分析。  离职状态  一般来说,提离职时我们一般会处两种情况:裸辞或者找好下家。不管哪种...
            0 0 1906
            分享
          • 环境准备1.开通腾讯文字识别服务按照官网步骤进行开通:https://cloud.tencent.com/product/generalocr/getting-started开通后可获得两个参数:SecretId、SecretKey腾讯提供的文字识别服务,支持多种图片识别,包括身份证、表格、或者其他通用文字识别等,本文主要使用表格识别服务。接口调用说明:1.打开表格识别V2接口说明文档:https://cloud.tencent.com/document/product/866/49525#1.-.E6.8E.A5.E5.8F.A3.E6.8F.8F.E8.BF.B02.进入接口调试页面&nb...
            0 0 8030
            分享
          • 管理的定义在我理解,管理,是管理者带领一群人一起完成一个共同目标的过程。在这个过程中,如何将团体目标最好的完成,如何将团体与个人的利益进行有效的协调,如何将团体中的每个人的价值最大化,都是作为管理者需要去思考的。管理的内容带领,就是要在团队中发挥带领者的角色。一个好的管理者,会和团队一起冲锋陷阵,在完成目标的路上身先士卒,以身作则,不畏惧不退缩。有困难,他会和团队一起并肩面对;有问题,他会首先反思其中的原因;有疑问,他会和团队分享自己的不解;有想法,他会开诚布公畅所欲言。带领团队的过程中,有被质疑时独当一面,不会将责任甩给团队;和其他团队合作遇到阻碍时,敢于站在团队前面,而不是如缩头乌龟一般让...
            1 2 2358
            分享
      • 51testing软件测试圈微信