Locust最新版是一款非常专业且优秀的开源负载测试工具,可以帮助用户快速对网站或其它系统进行负载测试,从而能够快速了解一个系统能够并发处理的用户数,该软件易于使用,可使用该软件编写脚本且拥有可扩展性,Locust完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent,在Locust中可采取不同的方法代替配置格式或UI,从而获得一个Python框架,欢迎有需要的用户下载体验
Locust软件功能
1、使用纯 Python 代码编写用户测试场景;不需要 UIs 或者 XML
2、分布式&可伸缩 - 支持成千上万的用户
3、基于 Web 的 UI
4、可以测试任意系统;虽然 Locust 是面向 Web 的,但是也可以测试其他任意的系统
Locust软件特色
用普通的Python编写用户测试方案
如果希望用户循环,执行某些条件行为或进行某些计算,则只需使用Python分享的常规编程结构即可。Locust在其自己的greenlet(轻量级进程/协程)中运行每个用户。这使您能够像普通(阻塞)Python代码一样编写测试,而不必使用回调或其他某种机制。因为您的场景是“仅是python”,所以您可以使用常规的IDE,并以常规代码的形式对测试进行控制(与其他一些使用XML或二进制格式的工具相对)
分布式和可扩展-支持数十万用户
Locust使运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gevent),这使得单个进程可以处理成千上万的并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。
基于Web的UI
Locust具有用户友好的Web界面,可实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有UI的情况下运行,从而使其易于用于CI / CD测试。
可以测试任何系统
即使Locust主要与网站/服务一起使用,它也可以用于测试几乎所有系统或协议。只需 为您要测试的内容编写一个客户端,或者浏览社区创建的一些客户端。
Locust官方教程
快速开始在Locust中,您可以使用Python代码定义用户行为。然后,您可以使用该locust命令和(可选)其Web界面在收集请求统计信息时生成并模拟大量这些用户。
locustfile.py示例
让知识兔分解一下
蝗虫文件只是普通的Python模块,它可以从其他文件或包中导入代码。
在这里,知识兔为将要模拟的用户定义一个类。它继承自 HttpUser该client属性,从而为每个用户分享一个属性,该属性是的一个实例HttpSession,可用于向要加载测试的目标系统发出HTTP请求。当测试开始时,蝗虫将为它模拟的每个用户创建一个此类的实例,并且这些用户中的每个将开始在自己的绿色gevent线程中运行。
知识兔的类定义了一个wait_time,它将使模拟用户在执行每个任务(请参阅下文)之后等待1到2.5秒。有关更多信息,请参见wait_time属性。
装饰有方法的方法@task是蝗虫文件的核心。对于每个正在运行的用户,Locust都会创建一个greenlet(微线程),它将调用这些方法。
知识兔通过用修饰两个方法来声明了两个任务@task,其中一个具有较高的权重(3)。当知识兔QuickstartUser运行它会挑的申报任务之一-在这种情况下,无论是hello_world或 view_items-并执行它。任务是随机选择的,但是您可以赋予它们不同的权重。上面的配置将使蝗虫的采摘可能性view_items比蝗虫高3倍hello_world。任务完成执行后,用户将在其等待时间(在这种情况下为1到2.5秒)内进入睡眠状态。等待时间过后,它将选择一个新任务并继续重复执行。
请注意,只会选择用修饰符修饰的方法@task,因此您可以根据自己的喜好定义自己的内部帮助器方法。
该self.client属性使得可以进行将由Locust记录的HTTP调用。有关如何发出其他类型的请求,验证响应等信息,请参阅《 使用HTTP客户端》。
在此view_items任务中,知识兔使用变量查询参数加载10个不同的URL。为了使Locust的统计信息中没有10个单独的条目(由于统计信息是按URL分组的),知识兔使用name参数将所有这些请求分组到一个名为的条目下"/item"。
此外,知识兔还声明了一个on_start方法。每个模拟用户在启动时都会调用具有该名称的方法。有关更多信息,请参见on_start和on_stop方法。
蝗虫开始将以上代码放在当前目录中名为locustfile.py的文件中,然后运行:
如果您的蝗虫文件位于其他位置,则可以使用进行指定 -f
蝗虫的网络界面使用上述命令行之一启动Locust后,应该打开浏览器并将其指向http://127.0.0.1:8089。然后,您应该会收到类似以下内容的问候:
填写表格并尝试!(但请注意,如果您不更改蝗虫文件以匹配实际的目标系统,则大多数情况下会收到错误响应)
更多选择要运行分布在多个Python进程或计算机上的Locust,可以使用--master命令行参数启动单个Locust主进程,然后使用--worker 命令行参数启动任意数量的Locust worker进程。有关更多信息,请参见运行蝗虫。
要直接开始测试而不使用Web界面,请使用--headless。
也可以通过环境变量或在 配置文件中设置参数。
要在无头运行期间添加/删除用户,请按w或W(1,10)生成用户,按s或S停止(1,10)。
编写蝗虫文件locustfile是普通的python文件。唯一的要求是,它声明至少一个从该类继承的类User。
用户类别一个用户类别代表一个用户(如果愿意,则代表一群蝗虫)。蝗虫将为每个正在模拟的用户生成User类的一个实例。User类可以定义一些公共属性。
wait_time属性用户wait_time方法是一个可选属性,用于确定模拟用户在执行任务之间应等待多长时间。如果未wait_time 指定,则一项新任务将立即执行。
内置了三个等待时间功能:
constant 在固定的时间内
between 在最大值和最小值之间的随机时间
constant_pacing 自适应时间,以确保任务每X秒(最多)运行一次
例如,使每个用户在每次任务执行之间等待0.5到10秒:
也可以在类上直接声明自己的wait_time方法。例如,下面的User类将休眠一秒钟,然后休眠两个,然后休眠三个,依此类推。
体重属性如果文件中存在多个用户类,并且在命令行上未指定任何用户类,则Locust将产生相等数量的每个用户类。您还可以通过将它们作为命令行参数传递,来指定要从同一locustfile中使用哪些用户类:
如果您希望模拟更多特定类型的用户,则可以在这些类上设置一个weight属性。举例来说,网络用户的可能性是移动用户的三倍:
主机属性host属性是要加载的主机的URL前缀(即“ http://google.com ”)。通常,这是在蝗虫--host启动时在Locust的Web UI或命令行中使用该 选项指定的。
如果在用户类中声明了主机属性,则--host 在命令行或Web请求中未指定任何主机属性的情况下将使用该属性。
任务属性User类可以使用@task装饰器在其下声明为方法的任务,但是也可以使用task属性指定任务,这将在下面更详细地描述。
环境属性environment对用户正在其中运行的引用。使用它与环境或runner其所包含的环境进行交互。例如,从任务方法停止跑步者:
如果在独立蝗虫实例上运行,则将停止整个运行。如果在工作程序节点上运行,它将停止该特定节点。
Locust更新日志
1、优化了用户使用界面
2、修复了某些已知bug
下载仅供下载体验和测试学习,不得商用和正当使用。
下载体验