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

在做性能测试时,通常都会借助一些压测工具来模拟大量的并发用户。目前业界压测工具种类繁多,比如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测试结果

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客户端

阿里性能专家全方位对比Jmeter和Locust,到底谁更香?的更多相关文章

  1. 黑羽压测 比 jmeter、locust、loadrunner 更简便,性能更强

    视频讲解 点击下方链接,观看 讲解视频 https://www.bilibili.com/video/av60089015/ 动机 目前市场上对API接口做性能测试工具有 Jmeter.LoadRun ...

  2. 【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?

    原文链接:http://www.51testing.com/html/49/n-3721249.html 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?loc ...

  3. 面向阿里云专家的 Azure 云服务介绍

    本文是面向阿里云专家的 Azure 云服务介绍,参考本文可以帮助大家“按图索骥”在 Azure 的平台上找到能满足自己需求的服务. 在公有云计算蓬勃发展的同时,中国也出现了越来越多的本土公有云平台.针 ...

  4. HTTPS, SPDY和 HTTP/2性能的简单对比

    中文原文:HTTPS, SPDY和 HTTP/2性能的简单对比 整理自:A Simple Performance Comparison of HTTPS, SPDY and HTTP/2 请尊重版权, ...

  5. 完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询

    相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能 完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制 自APIJSON发布 ...

  6. 【产品对比】Word开发工具Aspose.Words和Spire.Doc性能和优劣对比一览

    转:evget.com/article/2018/4/3/27885.html 概述:Microsoft Office Word是微软公司的一个文字处理器应用程序,作为办公软件必不可少的神器之一,Wo ...

  7. 阿里淘宝的S1级别bug,到底是谁的锅?

    3月25日,阿里的淘宝APP在IOS系统上出现BUG: 在打开淘宝APP以后,用户就会收到系统弹窗通知:“您使用的程序是测试/内测版本,将于当地时间2020-03-28到期,到期后将无法使用,请尽快下 ...

  8. 性能测试之工具对比-ngrinder jmeter loadunner及ngrinder安装使用方法

    参考:https://blog.csdn.net/bear_w/article/details/78366078

  9. 数据库管理哪家强?Devart VS Navicat 360°全方位对比解析

    今天小编向大家推荐的是两个开发环节的主流数据库管理品牌,那么你知道这两款数据库管理软件品牌与数据库引擎配套的管理软件有什么区别吗?小编这就360°全方位为您解答: ★ 品牌介绍 Devart:拥有超过 ...

随机推荐

  1. 初始CSS01

    CSS基础知识 CSS介绍 CSS全称为层叠样式表,与HTML相辅相成,实现网页的排版布局与样式美化. 使用方式 根据样式表在页面中呈现的方式不同,可以通过以下三种方式在页面中使用格式 内联样式 改样 ...

  2. 80. 删除有序数组中的重复项 II

    题目 给你一个有序数组 nums ,请你原地删除重复出现的元素(不需要考虑数组中超出新长度后面的元素),使每个元素最多出现两次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入 ...

  3. 【二食堂】Beta - Scrum Meeting 8

    Scrum Meeting 8 例会时间:5.22 20:00~20:10 进度情况 组员 当前进度 今日任务 李健 1. UI优化已经完成,顺带修复了一点小bug.issue 1. 文本导入.保存部 ...

  4. OKR与影响地图,别再傻傻分不清

    摘要:OKR和影响地图虽然都是为了一个目标去进行规划的方法,但是两者侧重的内容却不一致. 本文分享自华为云社区<一分钟读懂OKR与影响地图>,作者: 敏捷的小智. 什么是OKR及影响地图 ...

  5. Noip模拟8 2021.6.17

    T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...

  6. 用python检查矩阵的计算

    鉴于最近复习线性代数计算量较大,且1800答案常常忽略一些逆阵.行列式的计算答案,故用Python写出矩阵的简单计算程序,便于检查出错的步骤. 1.行列式 可自行更改阶数 from numpy imp ...

  7. MVC下垃框的使用

    --------------模型-------------------- /// <summary> /// 状态 /// =0 下架 =1 上架 /// </summary> ...

  8. 第一个只出现一次字符的位置 牛客网 剑指Offer

    第一个只出现一次字符的位置  牛客网 剑指Offer 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 ...

  9. 访问单个结点的删除 牛客网 程序员面试金典 C++ Python

    访问单个结点的删除 牛客网 程序员面试金典 C++ Python 题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回f ...

  10. C++常见STL介绍

    栈 :FILO 栈(stack)又名堆栈,它是一种线性表,是一个后进先出的数据结构. 使用时须加上头文件:#include<stack> 允许进行插入和删除操作的一端称为栈顶(top),另 ...