Apache JMeter 和 Locust 是常见的两款性能测试工具。现在我们做个JMeter和Locust的比较。希望能帮助您确定哪种工具更适合您。
1.简介
JMeter 第一个版本大约在20年前发布。它是用纯Java语言编写的。最初,JMeter主要用于执行Web和FTP应用程序的负载测试。但是,现在它允许测试几乎所有应用程序和协议,使用户能够使用与任何OS平台兼容的桌面应用程序来创建测试。
而Locust是一个用Python编写的相对新颖的性能框架。它要求用户使用纯Python编写性能脚本。除了“作为代码测试”功能外,Locust还具有高度可扩展性。有编码能力的程序员通常更喜欢Locust超过JMeter。
2.开源许可证
JMeter是由Apache开发的,它基于Apache License 2.0。
而Locust是由一个由社区驱动的开发人员组成的小团队开发的,并且基于MIT许可证。
两个工具都是开源的,允许您自由使用它们,而不受任何使用限制。
3.负载测试创建和维护
性能测试工作流程有三个主要步骤:创建规则(或者脚本),运行和分析。
通常第一步是最耗时的。
编写JMeter性能测试的最常用方法是使用其GUI模式。JMeter GUI模式提供了一个桌面客户端,允许您轻松创建测试,而无需编写代码(除非您需要创建复杂的测试)。所以最简单的场景可能如下所示:
JMeter非常简单,通常,即使是没有经验的工程师也可以使用。
如果需要,您也可以使用Java在GUI和非GUI开发测试脚本。
但是,由于脚本实现的复杂性(因为JMeter旨在与GUI模式一起使用)以及缺乏好的文档,因此这种方式在JMeter社区中并不流行。
而Locust就是编码。您需要至少具有一些基本的Python编码能力。
下面是一段使用Locust库的性能测试代码,完成和上图jemeter一样的测试:
from locust import HttpLocust, TaskSet, task
class FlightSearchTest(TaskSet):
@task
def get_something(self):
self.client.post("/sreserve.php", {
'fromPort': 'Paris', 'toPort': 'Buenos+Aires'
})
class BlazeDemoSiteTests(HttpLocust):
task_set = FlightSearchTest
用Locust编写的脚本通常还是比较容易理解的。
用代码进行性能测试是一个优势, 您可以方便地修复测试逻辑,不需要打开UI去找一个个的文本框去改。
4.支持的协议
使用JMeter,您可以使用内置函数和第三方插件。您无需编码即可测试不同的协议甚至数据库。这些包括JDBC,FTP,LDAP,SMTP等等。
而Locust主要用于基于HTTP Web的测试。但是,您也可以自己编码自定义Python函数进行其他协议的性能测试。
5.并发用户数
这一部分比较是最重要的部分,因为性能工具应该允许您运行尽可能多的模拟用户来实现您的测试目标。
在某些测试中,需要模拟 数百万用户。
性能测试工具可以运行的并发用户数主要基于在负载测试中运行每个用户所需的资源。JMeter和Locust有完全不同的方式来处理机器资源。
JMeter 是基于线程的模型,它为每个用户分配一个单独的线程。每个步骤的线程分配和基准测试需要大量资源,这就是为什么JMeter在一台机器上模拟的用户数量非常有限的原因。
相反,Locust有一个完全不同的用户模拟模型,它基于事件和异步方法实现。这种实现可以让Locust框架在一台机器上轻松模拟数千个并发用户。
下面两张图展示了一个对比,我们使用这两个工具框架为50个用户运行相同的测试,查看在这两种情况下占用了多少资源:
您可以看到,在GUI模式下针对同一场景运行的JMeter所占用的内存几乎比Locust脚本多30倍。使用非GUI模式运行Jemeter可以节省资源,但在提供的示例中,我无法运行分配少于420MB的脚本以在JMeter中执行测试,这仍然是locust的14倍。
6.灵活性
测试工具的灵活性非常重要。
例如,在负载测试期间,您可能希望创建一个尖峰负载,用来验证系统如何处理意外尖峰会不会有问题。
在JMeter中,您可以在指定字段的“线程组”控制器中配置负载:
但是JMeter还有其他插件,可以让您配置非常灵活的负载。最好的方法之一是使用Ultimate Thread Group,它允许用户制作非常特殊的负载模式:
JMeter在这方面有具有巨大的优势。
Locust定制负载使用了不同的方法。
当您运行性能脚本时,Locust会自动在http://localhost:8089上启动一个带有Web界面的服务器,您只能指定设定线性的负载。灵活性不如jmeter
7.脚本录制
这是JMeter具有强大优势的地方,因为它具有脚本录制的内置功能,而Locust根本没有此功能。除此之外,还有许多第三方插件可以为JMeter制作脚本录制。
8.加载测试监控
JMeter和Locust都提供了监控性能脚本he 分析您的结果的功能。
JMeter提供了各种监听器。每个监听器都提供特定类型的监视:
但是要注意,JMeter监听器还会消耗大量资源。这就是为什么通常,JMeter是以非GUI模式执行的。
而Locust只是运行一个简单的Web服务器,如下:
Locust监控占用很少的机器资源,即使模拟很多用户。这方面比Jmeter强。
总结
如果您熟悉Python,并且喜欢编写代码进行性能测试,那么您应该使用Locust。否则,JMeter可能是更好的选择。
如果您没有性能测试经验,最好从JMeter开始,因为JMeter UI界面会让你上手更容易。只需通过菜单进行简单的导航,您就可以了解可以使用哪些采样器来创建负载,可以使用哪些超时来进行脚本暂停等等。
Locust只为您提供文档和一些代码示例,您需要根据自己的Python专业知识来了解是否能够实现所需的加载脚本。
另外,如果您需要执行包含不同协议的复杂负载,如果您不能使用Python编写自己的采样器,如果您需要脚本记录功能,如果您需要使用某些自定义斜坡模拟特定负载,如果您喜欢UI桌面应用程序来创建脚本,如果您不太熟悉Python,那么JMeter是更好的选择。
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!
这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享