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

你就可以如界面所显示的,填入

  • 需要创建的并发数
  • 并发的初始化效率
  • 主机地址

测试即可成功运行。

返回:教程目录

posted @ 2020-07-02 10:06  huanghaopeng  阅读(1202)  评论(0编辑  收藏  举报