⑴Locust是一款非常专业且优秀的开源负载测试工具,通过这款软件可帮助用户快速对网站或其它系统进行负载测试,从而能够快速了解一个系统能够并发处理的用户数,该软件易于使用,可使用该软件编写脚本且拥有可扩展性,因为您可以使用常规的Python代码定义用户的行为,相对于一些比较笨拙的UI或特定于域的语言,这使得Locust可以无限扩展,并且对于开发人员来说也非常友好,在Locust中可采取不同的方法代替配置格式或UI,从而获得一个Python框架,欢迎有需要的用户下载体验
⑵在代码中定义用户行为
⑶不需要笨拙的UI或庞大的XML。只是普通的代码。
⑷Locust支持分布在多台计算机上的运行负载测试,因此可用于模拟数百万个同时用户
⑸经过验证和战斗力测试
⑹蝗虫已被用来模拟数百万个并发用户。Battlelog是《战地风云》游戏的网络应用程序,已使用Locust进行了负载测试,因此可以说Locust经过了Battletested;。
⑺Locust的基本功能是用Python代码描述所有测试。不需要笨拙的UI或庞大的XML,只需简单的代码即可。
⑻用普通的Python编写用户测试方案
⑼如果希望用户循环,执行某些条件行为或进行某些计算,则只需使用Python提供的常规编程结构即可。Locust在其自己的greenlet(轻量级进程/协程中运行每个用户。这使您能够像普通(阻塞Python代码一样编写测试,而不必使用回调或其他某种机制。因为您的场景是“仅是python”,所以您可以使用常规的IDE,并以常规代码的形式对测试进行控制(与其他一些使用XML或二进制格式的工具相对
⑽分布式和可扩展-支持数十万用户
⑾Locust使运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gevent,这使得单个进程可以处理成千上万的并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。
⑿基于Web的UI
⒀Locust具有用户友好的Web界面,可实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有UI的情况下运行,从而使其易于用于CI /
⒁可以测试任何系统
⒂即使Locust主要与网站/服务一起使用,它也可以用于测试几乎所有系统或协议。只需
⒃为您要测试的内容编写一个客户端,或者浏览社区创建的一些客户端。
⒄快速开始在Locust中,您可以使用Python代码定义用户行为。然后,您可以使用该locust命令和(可选其Web界面在收集请求统计信息时生成并模拟大量这些用户。
⒅locustfile.py示例
⒆蝗虫文件只是普通的Python模块,它可以从其他文件或包中导入代码。
⒇在这里,我们为将要模拟的用户定义一个类。它继承自
⒈HttpUser该client属性,从而为每个用户提供一个属性,该属性是的一个实例HttpSession,可用于向要加载测试的目标系统发出HTTP请求。当测试开始时,蝗虫将为它模拟的每个用户创建一个此类的实例,并且这些用户中的每个将开始在自己的绿色gevent线程中运行。
⒉我们的类定义了一个wait_time,它将使模拟用户在执行每个任务(请参阅下文之后等待到.秒。有关更多信息,请参见wait_time属性。
⒊装饰有方法的方法task是蝗虫文件的核心。对于每个正在运行的用户,Locust都会创建一个greenlet(微线程,它将调用这些方法。
⒋我们通过用修饰两个方法来声明了两个任务task,其中一个具有较高的权重(。当我们QuickstartUser运行它会挑的申报任务之一-在这种情况下,无论是hello_world或
⒌view_items-并执行它。任务是随机选择的,但是您可以赋予它们不同的权重。上面的配置将使蝗虫的采摘可能性view_items比蝗虫高倍hello_world。任务完成执行后,用户将在其等待时间(在这种情况下为到.秒内进入睡眠状态。等待时间过后,它将选择一个新任务并继续重复执行。
⒍请注意,只会选择用修饰符修饰的方法task,因此您可以根据自己的喜好定义自己的内部帮助器方法。
⒎该self.client属性使得可以进行将由Locust记录的HTTP调用。有关如何发出其他类型的请求,验证响应等信息,请参阅《
⒏使用HTTP客户端》。
⒐在此view_items任务中,我们使用变量查询参数加载个不同的URL。为了使Locust的统计信息中没有个单独的条目(由于统计信息是按URL分组的,我们使用name参数将所有这些请求分组到一个名为的条目下"/item"。
⒑此外,我们还声明了一个on_start方法。每个模拟用户在启动时都会调用具有该名称的方法。有关更多信息,请参见on_start和on_stop方法。
⒒蝗虫开始将以上代码放在当前目录中名为locustfile.py的文件中,然后运行:
⒓如果您的蝗虫文件位于其他位置,则可以使用进行指定 -f
⒔蝗虫的网络界面使用上述命令行之一启动Locust后,应该打开浏览器并将其指向然后,您应该会收到类似以下内容的问候:
⒕填写表格并尝试!(但请注意,如果您不更改蝗虫文件以匹配实际的目标系统,则大多数情况下会收到错误响应
⒖更多选择要运行分布在多个Python进程或计算机上的Locust,可以使用--master命令行参数启动单个Locust主进程,然后使用--worker
⒗命令行参数启动任意数量的Locust worker进程。有关更多信息,请参见运行蝗虫。
⒘要直接开始测试而不使用Web界面,请使用--headless。
⒙也可以通过环境变量或在 配置文件中设置参数。
⒚要在无头运行期间添加/删除用户,请按w或W(,生成用户,按s或S停止(,。
⒛编写蝗虫文件locustfile是普通的python文件。唯一的要求是,它声明至少一个从该类继承的类User。
①用户类别一个用户类别代表一个用户(如果愿意,则代表一群蝗虫。蝗虫将为每个正在模拟的用户生成User类的一个实例。User类可以定义一些公共属性。
②wait_time属性用户wait_time方法是一个可选属性,用于确定模拟用户在执行任务之间应等待多长时间。如果未wait_time
③指定,则一项新任务将立即执行。
④内置了三个等待时间功能:
⑤constant 在固定的时间内
⑥between 在最大值和最小值之间的随机时间
⑦constant_pacing 自适应时间,以确保任务每X秒(最多运行一次
⑧例如,使每个用户在每次任务执行之间等待.到秒:
⑨也可以在类上直接声明自己的wait_time方法。例如,下面的User类将休眠一秒钟,然后休眠两个,然后休眠三个,依此类推。
⑩体重属性如果文件中存在多个用户类,并且在命令行上未指定任何用户类,则Locust将产生相等数量的每个用户类。您还可以通过将它们作为命令行参数传递,来指定要从同一locustfile中使用哪些用户类:
Ⅰ如果您希望模拟更多特定类型的用户,则可以在这些类上设置一个weight属性。举例来说,网络用户的可能性是移动用户的三倍:
Ⅱ主机属性host属性是要加载的主机的URL前缀(即“
Ⅲ”。通常,这是在蝗虫--host启动时在Locust的Web UI或命令行中使用该 选项指定的。
Ⅳ如果在用户类中声明了主机属性,则--host 在命令行或Web请求中未指定任何主机属性的情况下将使用该属性。
Ⅴ任务属性User类可以使用task装饰器在其下声明为方法的任务,但是也可以使用task属性指定任务,这将在下面更详细地描述。
Ⅵ环境属性environment对用户正在其中运行的引用。使用它与环境或runner其所包含的环境进行交互。例如,从任务方法停止跑步者:
Ⅶ如果在独立蝗虫实例上运行,则将停止整个运行。如果在工作程序节点上运行,它将停止该特定节点。