zoukankan      html  css  js  c++  java
  • Locust :一个简单的登录、页面浏览脚本

    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

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

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

    测试即可成功运行。

     

  • 相关阅读:
    codeforce 1B
    codeforce A. Accounting
    20145208 《Java程序设计》第9周学习总结
    20145208 实验三 Java面向对象程序设计
    20145208 《Java程序设计》第8周学习总结
    20145208 《Java程序设计》第7周学习总结
    20145208 实验二 Java面向对象程序设计
    20145208实验一 Java开发环境的熟悉
    20145208 《Java程序设计》第6周学习总结
    20145208 《Java程序设计》第5周学习总结
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/14859011.html
Copyright © 2011-2022 走看看