链接: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"/item?id={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"/item?id={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. 转载-lvs官方文档-LVS集群中的IP负载均衡技术

    章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...

  2. 转载-lvs官方文档-Linux服务器集群系统(二)

    Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...

  3. 转载-lvs官方文档04-LVS集群的负载调度

    LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法.针对请求的服务时间变 ...

  4. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

  5. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  6. java中的方法引用(method reference)官方文档总结

    2017/7/5 转载写明出处:http://www.cnblogs.com/daren-lin/p/java-method-reference.html 今天要说的是java中的一项新特性,方法引用 ...

  7. Spring Cloud官方文档中文版-服务发现:Eureka服务端

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR3/#spring-cloud-eureka-server 文中例子我做了一些 ...

  8. Spring Cloud官方文档中文版-客户端负载均衡:Ribbon

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_netflix 文中例子我做了一些测试在:h ...

  9. Spring Cloud官方文档中文版-Spring Cloud Config(上)

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...

  10. Spring Cloud官方文档中文版-Spring Cloud Config(下)-客户端等

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_serving_alternative_formats 文中例子我做了 ...

随机推荐

  1. “技术沙龙”来袭,邀您一同探讨 Serverless 数据库技术最佳实践

    如今,随着数据库的上云趋势,企业用户对业务连续性的要求越来越高,基于Serverless架构下的数据库也应运而生. Serverless数据库技术可以满足客户在公有云计算环境下根据业务发展弹性扩展集群 ...

  2. 配置linux的远程登录操控 ssh 配置密钥

    1. 安装ssh服务 yum install openssh-server 启动服务 service ssh start ssh 的配置文件位置 ect/ssh/sshd_config 001. 把P ...

  3. 71.登录失效,token过期怎么处理

    1. 清除用户数据,直接跳转登录页重新登录 : 2. 短token 过期,使用 长 token 重新获取短 token ,然后重新请求 : 如果长 token 也过期了,就去重新登录获取 token ...

  4. 从2s优化到0.1s,我用了这5步

    前言 分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中. 但就是这样一个简单的分类树查询功能,我们却优化了5次. 到底是怎么回事呢? 背景 我们的网站使用了SpringBoot推荐的 ...

  5. 9.24 csp(没学会的网络流)

    T1.商品 因为边界 l , r 是线性移动的,所以答案可以线性改变,直接用set维护连续段(小于l的和大于r的)的个数,并维护ans即可. 因为set的一个小错误调了两个小时,代码打成了一坨,结果最 ...

  6. KubeSphere 在互联网电商行业的应用实践

    来自社区用户(SRE运维手记)投稿 背景 在云原生的时代背景下,Kubernetes 已经成为了主流选择.然而,Kubernetes 的原生操作复杂性和学习曲线较高,往往让很多团队在使用和管理上遇到挑 ...

  7. 基于 KubeSphere 的运管系统落地实践

    作者:任建伟,某知名互联网公司云原生工程师,容器技术信徒,云原生领域的实践者. 背景介绍 在接触容器化之前,我们团队内部的应用一直都是基于虚拟机运管,由开发人员自行维护. 由于面向多开发部门服务,而开 ...

  8. IPV6改造 华为云如此简单

    现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...

  9. 常见Linux查看文件、文本命令

    查看文件 find命令 按文件名 find 路径 -nmae "文件名" 按文件类型 find 路径 -type 类型 类型:普通文件 f 目录d 符号链接l 块设备文件b ​ 字 ...

  10. SSIS以yyyyMMdd的形式获取当前系统时间

    公式: (DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT(" ...