码迷,mamicode.com
首页 > 其他好文 > 详细

Locust 快速开始:一个简单的登录、页面浏览脚本【三】

时间:2021-07-02 16:44:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:sele   dom   loading   解析   rom   fun   范围   local   需要   

在这节里面,我们实现的是:

一个用户登录后,随机的访问指定页面的测试脚本。

测试用例

在下面的用例中,表示每个模拟的用户执行任务过程中:

首先:

  • 将以 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或者http://localhost:8089

技术图片

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

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

测试即可成功运行。

技术图片

技术图片

返回目录

 

Locust 快速开始:一个简单的登录、页面浏览脚本【三】

标签:sele   dom   loading   解析   rom   fun   范围   local   需要   

原文地址:https://www.cnblogs.com/East-fence/p/14962981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!