【转载】 Locust 官方文档

作者:神秘网友 发布时间:2021-02-26 17:50:11

【转载】 Locust 官方文档

链接:https://www.jianshu.com/p/40102e9a24cb

安装

一般直接通过 pip 就可以安装:

$ pip install locust

注意:
Locust 1.x 版本与之前的设计有很大的颠覆,所以你看到的很多代码会与你在网上搜索到的代码不一致。
如果示例代码运行不成功,请升级你的 Locust。

快速开始

在 Locust 中,可以使用 Python 代码定义用户行为。然后,可以使用locust命令及其 Web 界面生成大量虚拟用户并收集虚拟用户的请求统计信息。

一个 locustfile.py

import random
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(5, 9)

    @task
    def index_page(self):
        self.client.get("/hello")  # 这里的地址需要排除 host 部分
        self.client.get("/world")

    @task(3)
    def view_item(self):
        item_id = random.randint(1, 10000)
        self.client.get(f"/itemid={item_id}", name="/item")

    def on_start(self):
        self.client.post("/login", {"username":"foo", "password":"bar"})

对上面的代码进行分解:

import random
from locust import HttpUser, task, between

Locust 文件只是普通的 Python 代码文件,可以手动引入 Locust 相关的库以及你需要用到的其他第三方库。

class QuickstartUser(HttpUser):

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

HttpUser 类是 Locust 1.x 版本中用来代替以前的 HttpLocust 类,用来定义虚拟用户。是 User 类的子类。

wait_time = between(5, 9)    # 思考时间

我们的类定义了一个wait_time函数,它将使模拟用户在每个任务执行后的 5 ~ 9 秒之间等待。等待时间主要为了模拟用户在实际使用过程中存在的思考时间,对实际用户在操作系统过程中来说,他/她不会无时无刻不停的操作系统,而是操作一下暂停思考下一步动作。

有关更多信息,请参见wait_time attribute.

@task
def index_page(self):
    self.client.get("/hello")
    self.client.get("/world")

@task(3)
def view_item(self):
    ...

通过用 @task 装饰了两个方法来声明了两项任务,其中一种具有更高的权重(@task(3))。只有通过 @task 装饰的方法才会在 Locust 虚拟用户运行过程中被调用。

当虚拟用户运行时,会从两个任务中选择一个运行,由于 view_item 的权重为 3,因此在选择任务时会有三倍的机会选择 view_item。虚拟用户会根据权重调用一个方法来运行,运行后会根据wait_time定义的等待时间休眠 5~9 秒。待休眠时间结束后,会重新根据权重调用一个新任务来执行,并循环重复。

在测试过程中,只有被 @task 定义的方法才会被调用。当然被定义为任务的方法可以调用你定义的其他方法。

@task(3)
def view_item(self):
    item_id = random.randint(1, 10000)
    self.client.get(f"/itemid={item_id}", name="/item")

view_item任务中,我们通过使用查询参数动态加载 URL,该查询参数是一个从 1 到 10000 之间随机选择的数字。为了避免在 Locust 的统计信息中获得 10k 个单独的条目(Locust 会根据 URL 分组统计信息),会使用名称参数name parameter将所有这些请求分组到名为/item的条目下。

注意,只有用@task装饰的方法才会被调用,因此可以在 locustfile.py 的测试类中随意定义其他的辅助方法,以提升测试场景的复杂和灵活性。

def on_start(self):

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

有关更多信息,请参见on_starton_stop方法。

on_start() 方法是 hook 函数之一,用来定义在一些特殊事件下触发的逻辑。 on_start() 方法是在虚拟用户启动(启动事件)时会触发的方法。

开始执行 Locust

将以上代码放在当前目录中名为locustfile.py的文件中,然后运行:

$ locust

Locust 会默认查找当前目录下名为locustfile.py,如果该文件不在当前文件夹或者你取了其他的名字,就需要加上下面的 -f 参数了。

如果你的locustfile.py位于其他地方,则可以使用-f参数指定它:

$ locust -f locust_files/my_locust_file.py

注意:要查看所有可用选项,请输入:locust --help或查看Configuration

Locust 的 web 界面

一旦使用上述命令行之一启动 Locust 后,会在本地开启一个服务并占用8089端口,你可以打开浏览器并将其指向http://127.0.0.1:8089。

如果 http://127.0.0.1:8089 无法找到,你可以尝试一下 http://locust:8089。

然后,你会看到如下界面:

请根据表单内容填写,并尝试一下。

  • Number of total users to simulate - 最大并发用户数
  • Hatch rate - 孵化率(每秒生成的虚拟用户数)
  • Host - 被测系统的 Host(如果你在 User类 中定义了host 属性,会自动带出来,如果没有就需要输入)

孵化率 Hatch rate,在 Locust 中把生成虚拟用户这个过程称之为“孵化”。

更多选项

要运行分布在多个 Python 进程或计算机上的 Locust,可以使用--master命令行参数启动单个 Locust 主进程,然后在--worker命令行参数中使用任意数量的 Locust worker 进程。

更多关于分布式运行的信息,请参阅Locust 分布式运行

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

也可以通过环境变量设置参数
Parameters can also be set through [environment variables],或写入配置文件config file。




【转载】 Locust 官方文档 相关文章

  1. php抽象类和接口的区别

    抽象类 官方描述请查看文档,下面是官方描述的梳理版本: 定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。 (抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方

  2. dremio 配置文件

    因为官方文档对于配置文件的介绍太简单了,比如默认zk 注册的时候会有主机名称的问题,不然我们就需要自己配置 hosts,以下是来自官方代码仓库的一个参考配置,方便使用(注意此配置主要是核心组件的,还有其他组件自己的配置) 配置文件 文件位置 源码的common

  3. JavaScript ,竟然还不知道这些技巧

    转载写了这么多年 JavaScript ,竟然还不知道这些技巧 不少人有五年的 JavaScript 经验,但实际上可能只是一年的经验重复用了五次而已。完成同样的逻辑和功能,有人可以写出意大利面条一样的代码,也有人两三行简洁清晰的代码就搞定了。简洁的代码不但方便阅

  4. (转载)Bigdecimal加减乘除运算保留小数点及比大小

    加减乘除转载至https://my.oschina.net/u/3771868/blog/1813954 加减乘除运算 BigDecimalbignum1=newBigDecimal("10"); BigDecimalbignum2=newBigDecimal("5"); BigDecimalbignum3=null; //加法 bignum3=bignum1.add(bignum2); System.out.println("和是:"+

  5. (操作转载)docker安装fastdfs+nginx及碰到的一些问题

    安装是转载的想看原文请飞https://www.it610.com/article/1291662666259046400.htm 1.查看fastdfs的镜像 docker search fastdfs 2.拉取镜像 docker pull delron/fastdfs 这个版本的镜像是比较全的,含有fastdfs以及nginx以及其相关的配置。 3.启动tracker服

  6. JS的防抖和截流

    转载 防抖 让某个函数在一定 事件间隔条件(去抖debounce) 或 时间间隔条件(节流throttle) 下才会去执行,避免快速多次执行函数(操作DOM,加载资源等等)给内存带来大量的消耗从而一定程度上降低性能问题。 debounce: 当调用动作n毫秒后,才会执行该动作

  7. 转载-K8S动态更新pod镜像

    转载:https://www.jianshu.com/p/8c2eafc46104 kubernetes集群中镜像有三种更新方式,无论哪一种都属于滚动式更新,在更新过程中服务不会中断 编辑已存在的yaml文件,使用apply命令更新 以nginx镜像为例,查看现有nginx版本 [root@k8s-node2 .ssh]# curl -I

  8. 如何生成干净可阅读的汇编代码

    转载:如何生成干净可阅读的汇编代码 - 泰晓科技 (tinylab.org) 新版 gcc 默认开启了几个选项,导致学习汇编语言,尤其是入门的同学,很难。 以如下代码为例: $ cat demo.c #include stdio.h int main(void) { int i; char buffer[64]; i = 1; buffer[0] =

  9. IO多路复用之select总结(转载)

    1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种

  10. JavaScript中this的指向

    转载地址: https://note.youdao.com/ynoteshare1/index.htmlid=b2fab3b044aa90033395df0c8c9ca3a4type=note 引子 在JavaScript中 this 的指向总是让人很困惑,它到底指的啥为了彻底弄清它,我们就来探讨一下吧。 this 在不同的执行环境,不同的用法下会有所

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词