zoukankan      html  css  js  c++  java
  • (七)Locust 的类和方法

    转:http://www.testclass.net/locust/dev-script/

    针对你的业务,你如何进行测试测试,需要通过编写性能测试脚本实现。所以,我们要熟悉 Locust 提供了哪些类和方法,它们分别实现什么操作。

    HttpLocust 类


    from locust import HttpLocust, TaskSet, task
    
    class UserTask(TaskSet):
    
        @task
        def tc_index(self):
            self.client.get("/")
    
    class UserOne(HttpLocust):
        task_set = UserTask
        weight = 1
        min_wait = 1000
        max_wait = 3000
        stop_timeout = 5
        host = "https://www.baidu.com"
    
    class UserTwo(HttpLocust):
        weight = 2
        task_set = UserTask
        host = "https://www.baidu.com"
    
    

    每一个模拟的用户可以看做一个 HttpLocust 类的实例,HttpLocust 类有如下属性:

    • task_set

    指向一个 TaskSet 类,TaskSet 类定义了每个用户的行为。

    • min_wait

    用户执行任务之间等待时间的下界,单位:毫秒。如果TaskSet类中有覆盖,以TaskSet 中的定义为准。

    • max_wait

    用户执行任务之间等待时间的上界,单位:毫秒。如果TaskSet类中有覆盖,以TaskSet中的定义为准。

    • host

    如果是 Web 服务的测试,host 相当于是提供 URL 前缀的默认值,但是如果在命令行中指定了 --host 选项,则以命令行中指定的为准。如果不是 Web 服务测试,使用默认的 None 就好。

    • stop_timeout

    设置 Locust 多少秒后超时,如果为 None ,则不会超时。

    • weight

    一个Locust实例被挑选执行的权重,数值越大,执行频率越高。在一个 locustfile.py 文件中可以同时定义多个 HttpLocust 子类,然后分配他们的执行权重,例如:

    然后在终端启动测试:

    > locust -f load_test.py UserOne UserTwo
    
    

    TaskSet 类


    TaskSet类定义了每个用户的任务集合,测试任务开始后,每个 Locust 用户会从 TaskSet 中随机挑选一个任务执行,然后随机等待 HttpLocust 类中定义的 min_wait和 max_wait 之间的一段时间,执行下一个任务。

    from locust import HttpLocust, TaskSet, task
    
    
    class stay(TaskSet):
    
        def on_start(self):
            """ on_start is called when a Locust start before any task is scheduled """
            print("start test")
    
        @task(3)
        def readBook(self):
            print('I am reading a book.')
    
        @task(7)
        def listenMusic(self):
            print('I am listening to music.')
    
        @task(1)
        def logOut(self):
            self.interrupt()
    
    
    class UserTask(TaskSet):
        tasks = {stay:2}
    
        @task(1)
        def leave(self):
            print('I don not like this page.')
    
    
    class User(HttpLocust):
        task_set = UserTask
        host = "https://www.baidu.com"
    
    
    • on_start():

    定义每个 Locust 用户开始做的第一件事。

    • @task

    通过@task()装饰的方法为一个事务。方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。

    • interrupt(reschedule=True)

    顶层的TaskSet(即被绑定到某个Locust类的task_set的第一层TaskSet)不能调用这个方法。reschedule置为True时,从被嵌套任务出来马上选择新任务执行,如果置为False,从被嵌套任务出来后,随机等待min_wait和max_wait之间的一段时间,再选择新任务执行。

    • tasks 属性

    tasks = {stay:2} 表示每个用户执行 stay 的频率是2,也就的 UserTask 的两倍。

    然后在终端启动测试:

    > locust -f tc_load_test2.py --no-web -c 10 -r 10 -t 10s
    
    [2017-10-31 16:41:45,920] DESKTOP-SMGQBBM/INFO/locust.main: Run time limit set to 10 seconds
    [2017-10-31 16:41:45,923] DESKTOP-SMGQBBM/INFO/locust.main: Starting Locust 0.8
    [2017-10-31 16:41:45,923] DESKTOP-SMGQBBM/INFO/locust.runners: Hatching and swarming 10 clients at the rate 10 clients/s...
     Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
     Total                                                              0     0(0.00%)                                       0.00
    
    [2017-10-31 16:41:45,924] DESKTOP-SMGQBBM/INFO/stdout: I don not like this page.
    [2017-10-31 16:41:45,924] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,023] DESKTOP-SMGQBBM/INFO/stdout: start test
    [2017-10-31 16:41:46,023] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,025] DESKTOP-SMGQBBM/INFO/stdout: I am listening to music.
    [2017-10-31 16:41:46,025] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,124] DESKTOP-SMGQBBM/INFO/stdout: start test
    [2017-10-31 16:41:46,125] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,125] DESKTOP-SMGQBBM/INFO/stdout: I am reading a book.
    [2017-10-31 16:41:46,127] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,226] DESKTOP-SMGQBBM/INFO/stdout: start test
    [2017-10-31 16:41:46,229] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,230] DESKTOP-SMGQBBM/INFO/stdout: I am reading a book.
    [2017-10-31 16:41:46,232] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,325] DESKTOP-SMGQBBM/INFO/stdout: I don not like this page.
    [2017-10-31 16:41:46,328] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,424] DESKTOP-SMGQBBM/INFO/stdout: I don not like this page.
    [2017-10-31 16:41:46,424] DESKTOP-SMGQBBM/INFO/stdout:
    [2017-10-31 16:41:46,525] DESKTOP-SMGQBBM/INFO/stdout: I don not like this page.
    
    ...
    
    

    在这个例子中虽然指定的 host ,但我们并没有调用 client() 方法发送http 请求。只是在 TaskSet 类方法中简单做了简单的打印,通过后台的输出,你可以看到每个方法被调用的频率。

  • 相关阅读:
    SOAP webserivce 和 RESTful webservice 对比及区别(转载)
    JavaWeb工程中web.xml基本配置(转载学习)
    iframe 自适应
    SQL分组求每组最大值问题的解决方法收集 (转载)
    关于试用jquery的jsonp实现ajax跨域请求数据的问题
    解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
    Hadoop编译源码(面试重点)
    Hadoop学习(二)自己编译Hadoop安装包
    代理模式实现方式及优缺点对比
    zookeeper
  • 原文地址:https://www.cnblogs.com/shmily2018/p/9862576.html
Copyright © 2011-2022 走看看