Locust

Locust提供能测试功能,可以通过这款软件帮助用户测试web程序能,测试网站能,支持通过HTTP请求测试,可以基于响应的系统进行负载测试,也可以将软件扩展到其他系统进行测试,测试的数据可以通过图表显示,方便测试人员查看可视化的负载测试结果,测试过程会显示志内容,方便后期查看志了解工作流程,这款软件功能还是很丰富的,支持使用 Docker运行Locust,支持在没有WebU的情况下运行Locust,支持通过更快的HTTP客户端提高Locust的能,新版修复了Web UI中图表工具提示的错误,提供图表的多项改进,包括工具提示等,添加了–html选项以保存HTML报告!

Locust软件功能

Locust是易于使用,可编写脚本且可扩展的能测试工具。您可以使用常规Python代码定义用户的行为,而不是使用笨拙的UI或特定于域的语言。这使Locust可以无限扩展,并且对开发人员非常友好。

分布式和可扩展-支持数十万用户

Locust使运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gnt),这使得单个进程可以处理成千上万的并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。

基于Web的UI

Locust具有用户友好的Web界面,可实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有UI的情况下运行,从而易于进行CI / CD测试。

可以测试任何系统

即使Locust主要与网站/服务一起使用,它也可以用于测试几乎任何系统或协议。只需为您要测试的内容编写一个客户端,或者浏览社区创建的内容。

Locust软件特色

用普通的Python编写用户测试方案

如果要让用户循环,执行某些条件行为或进行一些计算,则只需使用Python提供的常规编程结构即可。Locust在每个用户内部运行自己的greenlet(轻量级进程/协程)。这使您可以像编写普通(阻塞)Python代码一样编写测试,而不必使用回调或其他某种机制。因为您的场景是“仅是python”,所以您可以使用常规的IDE,并以常规代码的形式控制测试(与其他一些使用XML或二进制格式的工具相对)

名称和背景

Locust出于对现有解决方案的不满而诞生。没有一个现有的负载测试工具能够很好地针对动态网站生成实际负载,在动态网站上,大多数页面针对不同用户具有不同的内容。现有工具使用笨拙的界面或冗长的配置文件来声明测试。在Locust中,我们采取了不同的方法。代替配置格式或UI,您将获得一个python框架,该框架可让您使用Python代码定义用户的行为。

蝗虫的名字来源于蝗虫种类,它们以蜂拥而至。

以前的Locust版本使用了从自然界借来的术语(群发,孵化,攻击等),但是现在采用了更多的行业标准命名。

Locust教程

安装安装Python 3.6或更高版本。

使用pip安装Locust。

$ pip3 install locust

验证安装并显示Locust版本号:

$ locust -V

如果一切正常,请继续快速入门。如果没有,请查看Wiki以获取一些解决方案。

出血边缘版本如果您需要某些功能或尚未发布的修补程序,请执行以:

$ pip3 install -e git://github.com/locustio/locust.git@master#egg=locust

快速开始在Locust中,您可以使用Python代码定义用户行为。,您可以使用该locust命令和(可选)其Web界面在收集请求统计时生成并模拟大量用户。

locustfile.py示例

让我们分解一下

import time

fm locust import HttpUser, task, between

蝗虫文件只是普通的Python模块,它可以从其他文件或包中导入代码。

class QuickstartUser(HttpUser):

在这里,我们为要模拟的用户定义一个类。它继承自 HttpUser该client属,从而为每个用户提供一个属,该属是的一个实例HttpSession,可用于向要加载测试的目标系统发出HTTP请求。当测试开始时,蝗虫将为它模拟的每个用户创建一个此类的实例,并且这些用户中的每个将开始在自己的绿色gnt线程中运行。

wait_time = between(1, 2.5)

我们的类定义了一个wait_time,它将使模拟用户在执行每个任务(请参阅下文)之后等待1到2.5秒

装饰有方法的方法@task是Locust文件的核心。Locust为每个正在运行的用户创建一个greenlet(微线程),该greenlet将调用这些方法。

我们通过用修饰两个方法来声明了两个任务@task,其中一个具有较高的权重(3)。当我们QuickstartUser运行它会挑的申报任务之一-在这种情况下,无论是hello_world或 view_s-并执行它。任务是随机选择的,但是您可以赋予它们不同的权重。以上配置将使Locust三倍更容易挑view_s比hello_world。当任务完成执行后,用户将在其等待时间(在这种情况下为1到2.5秒)内进入睡眠状态。等待时间过后,它将选择一个新任务并继续重复执行。

请注意,只会@task选择带有修饰符的方法,因此您可以根据自己的喜好定义自己的内部帮助器方法。

self.client.get(“/hello”)

该self.client属使得可以进行将由Locust记录的HTTP调用

在此view_s任务中,我们使用变量查询参数加载10个不同的L。为了不在Locust的统计中获得10个单独的条目(由于统计是按L分组的),我们使用name参数将所有这些请求分组在一个名为的条目下”/”。

此外,我们还声明了一个on_start方法。每个模拟用户在启动时都会调用具有该名称的方法

开始将以上代码放在当前目录中名为locustfile.py的文件中并运行:

$ locust

如果您的蝗虫文件位于其他位置,则可以使用 -f

$ locust -f locust_files/my_locust_file.py

笔记

要查看所有可用选项,请输入:或配置locust —

Locust的网络界面使用上述命令行之一启动Locust后,应该打开浏览器并将其指向http://127.0.0.1:8089。,您应该会收到类似以下内容的问候:

填写表格并尝试!(但是请注意,如果您不更改蝗虫文件以匹配实际的目标系统,则大多数情况下会收到错误响应)

更多的选择要运行分布在多个Python进程或计算机上的Locust,可以使用–master命令行参数启动一个Locust主进程,使用–worker 命令行参数启动任意数量的Locust worker进程

要直接开始测试而不使用Web界面,请使用–headless。

也可以通过环境变量或在 配置文件中设置参数。

要在无头运行期间添加/删除用户,请按w或W(1,10)生成用户,按s或S停止(1,10)。

使用自定义客户端测试其他系统Locust以HTTP为主要目标而构建。但是,通过编写触发request_success和 request_failure事件的自定义客户端,可以轻松扩展它以对任何基于请求/响应的系统进行负载测试 。

笔记

您使用的任何协议库都必须是gnt友好的(使用Pythonsocket模块或其他类似的标准库函数subpcess),否则您的调用将阻塞整个Locust进程。

某些C库无法通过gnt进行猴子修补,但允许其他解决方法。例如,如果要使用psycopg2对PostgreSQL进行能测试,可以使用psycogreen。

示例XML-RPC用户客户端这是一个User类XmlRpcUser的示例,该类提供了XML-RPC客户端 XmlRpcUser并跟踪所有发出的请求:

如果您之前编写过Locust测试,您将认识到称为的类ApiUser,它是一个普通的User类,它声明了几个任务。但是,您可以ApiUser从XmlRpcUser上面看到的继承 ApiUser。使用XmlRpcUser标记为象,这意味着Locust不会尝试从该类(仅扩展该类的类)创建模拟用户。在属下提供XmlRpcClient的实例 。abstract = TrueXmlRpcUserclient

该XmlRpcClient是各地的标准库的一个包装xmlrpc.client.ServerPxy。它基本上只是代理函数调用,但是重要的是增加了触发locust.nt.Events.request_success和locust.nt.Events.request_failure 事件,它将在Locust的统计中记录所有调用。

这是XML-RPC的实现,该可用作上述代码的:

使用事件钩扩展locust

locust带有许多事件钩,可用于以不同方式扩展locust。

事件钩位于该nts 属下的Envinment实例上。但是,由于在导入蝗虫文件时尚未创建Envinment实例,因此也可以通过locust.nts变量在locust文件的模块级别访问nt对象 。

这是有关如何设置事件的示例:

笔记

强烈建议您在侦听器中添加通配符关键字参数(上面代码中的** kw),以防止在以后的版本中添加新参数时代码损坏。

添加网络路由Locust使用Flask来提供Web UI,因此很容易将Web端点添加到Web UI。通过监听init事件,我们可以检索对Flask应用实例的引用,并使用该引用来设置新的路由:

您现在应该可以开始蝗虫并浏览到http://127.0.0.1:8089/added_page

扩展Web UI除了添加简单的Web路由之外,您还可以使用Flask蓝图和模板来添加路由,还可以扩展Web UI以允许您在内置Locust统计旁边显示自定义数据。这是更高级的方法,因为它还涉及编写和包括要由路由提供服务的HTML和Javascpt文件,但可以大大增强Web UI的实用和可定制。

可以在Locust源代码的examples目录中找到扩展Web UI的有效示例,其中包含HTML和Javascpt示例文件。

运行背景绿色因为Locust文件是“公正的代码”,所以没有什么可以阻止您生成自己的greenlet来与实际负载/用户并行运行。

例如,您可以监视测试的失败率,并在测试超过某个阈值时停止运行:

上一篇 2022-11-28

相关推荐

  • Locust

    Locust是一个开源的负载测试工具,用Python代码定义用户行为,让数百万用户同时在你的系统中蜂拥而至,主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少...
    2023-01-10
  • Locust

    Locust提供能测试功能,可以通过这款软件帮助用户测试web程序能,测试网站能,支持通过HTTP请求测试,可以基于响应的系统进行负载测试,也可以将软件扩展到其他系统进行测试,...
  • Locust

    Locust是一个开源的负载测试工具,用Python代码定义用户行为,让数百万用户同时在你的系统中蜂拥而至,主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少...
    2022-11-15
正在提交中,请稍等片刻...

发表回复

请登录后评论...
登录后才能评论

评论列表 (0条)