Python Locust模块

Python Locust模块

Python Locust: 与JMeter和Tsung不同,是一种用于负载测试服务器的基于Python的选项。

厌倦了目前用于基准测试和负载测试的设备,最近我发现了一个名为Locust的开源工具,可以在我的一个项目中使用。

通过阅读本教程,您将能够使用此负载测试工具。这将给您一个大概的想法,您的服务器支持每秒请求(RPS)有多少。

Locust是一种简单易用的分布式客户端负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统能够处理多少个并发用户。

为什么将此模块命名为Locust

这个想法是在测试中,许多蝗虫(蚂蚱)将对您的网站(或网页)产生竞争。每个Locust的行为方式(也许是蚂蚱或测试客户端)由您定义,并且聚集系统会在Web界面中不断监测。这将帮助您测试并在真正的用户访问之前识别代码中的瓶颈。

Locust是完全基于事件的,因此在单台机器上支持数以万计的并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调函数。

它使用轻量级进程来实现事件。每个负载测试您网站的Locust都在其自己的进程内运行(或者准确来说是greenlet)。这样可以让您在Python中编写非常表达性的场景,而不会将您的代码与回调函数弄混。

亮点或特点

1. 使用常规Python编写客户端测试场景

如果您认为您的客户端应该循环执行、执行一些条件行为或进行一些计算,您可以使用Python提供的常规编程结构。Locust使每个客户端在其绿色线程(轻量级进程/协程)内运行。这使您可以像编写正常(阻塞)的Python代码一样编写测试,而不是使用回调函数或其他机制。由于您的场景是“纯python”,因此您可以使用常规的IDE和将您的测试作为普通代码进行版本控制(而不是使用某些使用XML或二进制格式的其他工具)。

2. 分布式和可扩展 – 支持数以万计的用户

Locust可以方便地在多台机器上运行分布式负载测试。它是基于事件的(使用gevent),这使得单个进程能够处理数以万计的并发用户。虽然可能有其他工具在给定硬件上可以处理更多请求数,但每个Locust客户端的低开销使其非常适用于测试高并发任务。

3. 在线UI(Web用户界面)

Locust具有易于使用的Web界面,实时显示您的测试进展。您可以在测试运行时更改负载。它还可以在没有UI的情况下运行,使得CI/CD测试变得简单。

4. 可以测试任何系统

尽管Locust适用于网站/服务,但也可以用于测试几乎任何系统或协议。您可以为您要测试的内容编写一个客户端,或者研究由社区创建的一些客户端。

5. 可编程

Locust的代码库被故意保持简小,不处理所有的问题。一切都考虑到了,我们试图使其易于适应您可能遇到的任何情况,使用常规的Python代码。要向您喜欢的数据库和图表系统发送报告数据,可以通过包装对REST API的调用来处理您的系统的细节,或者运行自定义负载模式;没有任何阻碍!

命令行界面

该模块为我们提供了通过命令行界面运行负载测试的方法。这使得我们可以轻松地执行自动化的负载测试流程。在运行Locust时添加no-web参数。您必须包括主机、用户数量和负载速率。

Locust -f locustfile.py –no-web –host example.com -c 1000 -r 100

  1. c – 用户数量
  2. f – 文件路径
  3. no-web – 在没有Web界面的情况下运行仿真
  4. r – 负载速率

Python Locust模块安装过程

使用pip命令安装Locust。

命令:

pip install Locust

当Locust成功安装后,你的shell中应该可以访问到Locust的命令。

要查看更多可用选项:

命令:

locust --help

使用LOCUST模块进行负载测试

LOCUST是一个开源的负载测试工具。负载测试是针对系统在特定预期负载下的弹性/行为进行的软件测试。 grasshopper的目标是对网站进行负载测试,并检查系统可以处理的并发用户数。

在locust测试期间,会有大量的错误发生,目标即网站。每个Locust的行为方式是可配置的,并且聚合系统会实时从Web UI进行监控。

源代码:

from locust import HttpLocust, TaskSet, task
from locust import ResponseError
import json
class UserBehaviors(TaskSets):
    def __init__(s, parents):
        super(UserBehaviors, s).__init__(parents)
        s.token = ""
        s.headers = {}
    def on_start(s):
        # The on_start method is called
        # when a simulated user starts executing that TaskSet class
        s.token = s.login()
        s.headers = {'Authorization': 'Bearer {}'.format(s.token)}
        s.login()
    def login(s):
        # admin login and retrieving its access token
        response = s.client.post("/login/",
        data = {'username': 'admin',                                'password': 'ZYT5nsg3565!'})
        return json.loads(response._content)['access']
class WebsiteUser(HttpLocust):
    # The task_sets attribute should point
    # to a class TaskSet which tells the status of the customer
    task_sets = UserBehaviors
    min_waits = 500
    max_waits = 900

上面代码的解释:

首先导入所有必需的模块。然后定义函数和类。

当模拟用户开始执行TaskSet类时,会调用on_start方法。管理员登录并检索其访问令牌。task_sets属性应指向一个告诉客户状态的TaskSet类。

开始运行Locust:

要运行上述代码,请创建一个名为locustfiles.py的Python文件,并在上述创建的文档的注册中打开终端。然后在终端中输入以下命令。

注意: 默认情况下,Locust会查找locustfiles.py文件。

在成功执行以上命令之后,您应该打开一个浏览器并访问http://127.0.0.1:8089

Locust界面如下所示:

输出:

Python Locust模块

概述

Locust是一个非常方便的Python堆栈测试工具。测试REST API非常简单。然而,测试非RESTful API可能会稍微复杂一些。我们已经向您展示了一种测试非RESTful API的方法。还有其他工具,例如JMeter用于负载测试。JMeter具有较高的学习曲线,每次测试比“Hello World”应用程序更复杂时都会面临挑战。因此,您应该根据自己的需求选择适合您的工具。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程