zoukankan      html  css  js  c++  java
  • Locust 脚本开发入门(1)

    Locust 脚本开发入门(1)

     

    脚本基本构成

    一个 Locust 测试脚本就是一个普通的 python 文件,它的基本组成十分简单:

    • 定义用户的类型
      所有用户的属性都需要继承自 User Class,我们最常用的 HttpUser 也是如此,你也可以定义一个如 TcpUser,或者 WebSocketUser,甚至基于你测试的业务系统来做一个,例如 QQUser,但是最终都必须继承至 User Class,类似于过去 LoadRunner、Jmeter 的选择应用的通讯协议或选择请求插件

    • 等待时间的方法
      声明一个等待时间的方法,用于确定模拟用户在任务之间执行的等待停留时间。Locust 附带了一些内置函数用于返回等待时间的方法,包括:1、between:在指定范围内的随机;2、constant:基于响应到下一次请求之间的固定的等待时间;3、constant_pacing:基于请求到下一次请求的固定间隔时间

    • 主机属性
      用于定义测试的主机信息,比如 http://www.cnblogs.com,如果在脚本中没有定义,那在命令行启动测试或 WebUI 中将作出定义

    • 任务属性
      用于定义任务的执行逻辑,你可以定义多个任务,让模拟的用户按照不同任务的权重配置随机执行,也可以让任务按照你的编排顺序执行

    脚本开发入门

    我们采用循序渐进的方式来,你不需要特别关注下面的每个范例所具备的实际意义,只需要关心脚本的结构

    1、先按照最基本的脚本结构写一个范例

    from locust import user, task, between
    
    class MyUser(User):
        @task
        def my_task(self):
            print("executing my_task")
    
        wait_time = between(5, 15)
    

    脚本实现:

    • 定义一个 class,命名为 MyUser,继承自 user
    • 定义了一个 my_task 函数,任务就是 print 一句话
    • 通过 @task,定义了 my_task 这个函数将被执行
    • 定义了每次任务结束以后,随机等待时间的间隔区间为5~15秒,再执行下一次任务迭代

    把它保存为 locustfile.py,然后执行

    locust -f locustfile.py
    

    然后在本地浏览器访问 http://localhost:8089/,在“Start new Locust run”页面

    • Number of total users to simulate 中输入你需要模拟的用户总数
    • Hatch rate (users spawned/second) 中输入每秒创建的用户数
    • Host (e.g. http://www.example.com) 中输入Host站点信息(在本节范例里面随意输入即可,如:http://127.0.0.1

    点击“Start swarming”,可以命令行中看到返回:

    PS E:study.locust> locust -f .locustfile.py
    [2020-07-06 09:14:01,726] DESKTOP-FOCB2DV/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info.
    [2020-07-06 09:14:01,726] DESKTOP-FOCB2DV/INFO/locust.main: Starting web interface at http://:8089
    [2020-07-06 09:14:01,734] DESKTOP-FOCB2DV/INFO/locust.main: Starting Locust 1.1
    [2020-07-06 09:14:11,992] DESKTOP-FOCB2DV/INFO/locust.runners: Hatching and swarming 10 users at the rate 10 users/s (0 users already running)...
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    executing my_task
    

    功能实现:

    • 一个 print 语句本地跑着玩

    2、把这个脚本修改为访问我的博客:)

    import random
    from locust import HttpUser, task, between
    
    class cnblogUser(HttpUser):
    
        wait_time = between(5, 10)
    
        @task(2)
        def open_blog(self):
            self.client.get("/huanghaopeng/")
    
        @task(1)
        def open_links(self):
            self.client.get("/huanghaopeng/p/13100305.html")
            self.client.get("/huanghaopeng/p/13220749.html")
            self.client.get("/huanghaopeng/p/13187807.html")
    
        def on_start(self):
            self.client.get("/")
    
    

    脚本实现:

    • 把 User 替换为 HttpUser
    • 通过 @task,配置了两个函数的执行权重分别为 2:1
    • 在 open_blog 函数内,任务是模拟用户打开我的博客首页路径(Host + "/huanghaopeng/",即:
      https://www.cnblogs.com/huanghaopeng/)
    • 在 open_links 函数内,任务是模拟用户依次浏览 3 篇博客,注意,在这3篇博客的浏览过程中,是没有时间间隔的
    • 定义了每次任务结束以后,随机等待时间的间隔区间仍然为 5~15 秒

    把它保存为 locust_cnblogs.py,然后执行

    locust -f locust_cnblogs.py
    

    在 Web UI 中填入模拟用户数、加载速率、以及博客园的 Host 信息 https://www.cnblogs.com/huanghaopeng/

    点击“Start swarming”,可见:

    从上面的运行情况可以发现

    • 标注1:作为 on_start 任务的内容,请求主机根目录只执行了 1 次(# Requests)
    • 标注2:open_links 任务内依次访问 3 篇博文的执行顺序是可控的,并且同在一个任务内,次数也是一致
    • 权重控制 2:1,实际的执行比例约为 40%:10%,但是随着场景执行时间越来越长,会越来越趋近于 66.6%:33.3%

    现在我们对这个脚本进行一些修改,让它更像一个真实的用户访问行为:

    • 任务等待时间:任务之间按照特定的等待时间进行间隔
    • 步骤等待时间:在任务内加入步骤之间的时间间隔
    • 参数化:文章页面参数
    • 任务:按照顺序的方式执行
    • 自定义 Locust 发出的 HTTP 请求头
  • 相关阅读:
    学习之路五:再议自定义时钟类(跨线程间的访问操作) → 异步操作
    学习之路七:一步一步学习ASP.NET数据绑定
    走进单元测试五:单元测试文章系列目录
    迷茫后的感悟
    学习之路八:解决不能调试服务端代码的问题
    asp.net not found
    java内部类
    DEBUG&TRACE
    Lambda表达式
    基于事件的异步模式
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/14859063.html
Copyright © 2011-2022 走看看