Locust 快速开始:一个简单的登录、页面浏览脚本
在这节里面,我们实现的是:
一个用户登录后,随机的访问指定页面的测试脚本。
测试用例
在下面的用例中,表示每个模拟的用户执行任务过程中:
首先:
- 将以 100% 的概率通过login接口执行登录操作;
然后:
- 有25%的概率按照顺序访问/hello页面和/world页面
- 有75%的概率访问/item页面(这里会传一个动态id)
任务 | 目标 | 操作 | 参数 | 条件 |
---|---|---|---|---|
100% | 接口:login | 发送登录请求 | username,password | |
25% - step 1 | 页面:/hello | 浏览 hello 页面 | / | |
25% - step 2 | 页面:/world | 浏览 world 页面 | / | |
75% | 页面:/item | 浏览指定项目id的页面 | id | 随机浏览id值范围为1~10000的项目 |
脚本实现
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")
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
导入 random 用于后续随机数生成使用
从 locust 导入 HttpUser 用于提供http操作的方法
从 locust 导入 task 用于任务的规划设定
从 locust 导入 between 用于控制任务之间的延迟停顿
class QuickstartUser(HttpUser):
定义一个所需模拟的用户类(在这里,我们需要模拟的是HTTP用户)所以,继承了 HttpUser。
HttpUser 为我们所需模拟的用户类了 HTTP 客户端属性,该属性是 HttpSession 的实例,可以用于向被测试系统发出 HTTP 请求。
wait_time = between(5, 9)
定义了一个等待时间的函数,可以使用户执行每个任务以后,随机的等待了5~9秒。
在本节案例脚本里面,分别有:index_page 和 view_item 两个任务。
@task
def index_page(self):
self.client.get("/hello")
self.client.get("/world")
@task(3)
def view_item(self):
...
在定义的两个任务 index_page 和 view_item 通过装饰器控制了他们执行的权重为 1:3。
你可以理解为在每轮迭代的循环中:index_page 将有25%的概率被执行,而 view_item 将有 75% 的概率被执行。
而执行 index_page 时,将有两个页面访问请求,分别是 /hello 和 /world
@task(3)
def view_item(self):
item_id = random.randint(1, 10000)
self.client.get(f"/item?id={item_id}", name="/item")
在 view_item 任务中,通过使用1~10000的随机查询参数加载动态URL。为了不在 Locust 的统计信息中获得 10000 个单独的条目。
为了把这个动态 URL 的所有响应样本作为一个整体进行统计,使用 name 参数将所有这些请求分组到名为“ / item”的条目下。
只有定义了 @task 的任务才会被执行。
def on_start(self):
self.client.post("/login", {"username":"foo", "password":"bar"})
在这里,我们声明了一个 on_start,用于模拟用户启动的时候,每个用户必须执行的初始化操作,在此,它是一个 login 接口请求。
场景执行
把上面的代码放在 my_locust_file.py 中,然后执行命令
locust -f my_locust_file.py
这时候访问,http://127.0.0.1:8089
你就可以如界面所显示的,填入
- 需要创建的并发数
- 并发的初始化效率
- 主机地址
测试即可成功运行。