• 1
  • 0
分享

1. 引言

在本章节,你可以学习到:

1、Locust代码实例展示及解读:

    ①官网代码示例

    ②demo模板代码

2、Loucst的高级用法:

    ①关联

    ②参数化

    ③检查点

3、Locust的运行模式:

    ①单进程运行模式

    ②多进程分布式运行

4、Locust界面展示及结果分析

2. Locust实例展示

2.1 官网代码示例

我们来看看官网的第一个例子,

很简单:

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2022-07-23
"""
from locust import HttpUser, between, task
class WebsiteUser(HttpUser):
#设置等待时间间隔
    wait_time = between(5, 15)
    
    def on_start(self):
        self.client.post("/login", {
            "username": "test_user",
            "password": ""
        })
    
    @task
    def index(self):
        self.client.get("/")
        self.client.get("/static/assets.js")
        
    @task
    def about(self):
        self.client.get("/about/")

这里有几点说一下:

    1、between: 设置等待时间, 5s~15s;

    2、client.get/ client.post: 用法跟request是一样的。

其他的就没有什么可以重点强调的!

2.2 Locust 代码模板及执行顺序

这段代码,小鱼展示两点:

1、locust demo模板;

2、locust 代码执行顺序。

代码示例

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2022-07-23
"""
from locust import HttpUser,TaskSet,task
'''
执行顺序:
Locust setup → TaskSet setup → TaskSet on_start → 
TaskSet tasks → TaskSet on_stop → TaskSet teardown → 
Locust teardown
'''
class UserBehavor(TaskSet):
    #启动locust是运行setup方法
    def setup(self):
        print('task setup')
    def teardown(self):
        print('task teardown')
    #虚拟用户启动task时运行
    def on_start(self):
        print('start')
    #虚拟用户结束task时运行
    def on_stop(self):
        print('end')
    @task(2)
    def index(self):
        self.client.get('/')
    @task(1)
    def profile(self):
        self.client.get('/profile')
class WebsitUser(HttpUser):
    def setup(self):
        print('locust setup')
    def teardown(self):
        print('locust teardown')
    host = 'http://xxx.com'
    task_set = task(UserBehavor)
    min_wait = 100
    max_wait = 5000
if __name__ == '__main__':
    pass

虽然小鱼展示了模板,可以直接使用,但是,里面的内容,需要各位大佬自己填充~~

毕竟 业务不同,填充的内容也不一样!!

小屌丝:鱼哥,感觉你在开车,但是没证据!!

小鱼:都快一点了,你还不睡觉,白富美不香吗!!!

小屌丝:…

3. Locust 类代码分析

3.1 实例代码展示

关于locust类的详细讲解,放在了第一章节,因为

小鱼觉得:先了解基础,再去看代码,这样就不至于看代码想看天书,至少遇到一个类,能有一个印象。

这里,为了方便大家,点击下方带颜色的文字即可进入第一章节:

深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust

回归正题,老规矩,先上代码,再逐层分析

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-23
"""
from locust import HttpUser,task,TaskSet
'''
在版本10.1,已经不再使用HttpLocust 和Locust,
取而代之的是HttpUser 和User
'''
# 定义ScriptTasks类,继承TaskSet类
class ScriptTasks(TaskSet):
    #初始化,每个locust用户开始做的第一件事
    def on_start(self):
        #放置 用户名和密码
        self.client.post('/login', {
        "username":"carl_dj",
        "password":'111111'
        })
        
        #@task()装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被虚拟用户执行的概率越高,默认为1
    @task(2)
    #创建index方法,
    def index(self):
        self.client.get('/')

    @task(1)
    def about(self):
        #self.client 属性使用python的request库的方法,调用和使用方法和request一样
        self.client.get('/about')

    @task(2)
    def demo(self):
        payload = {}
        headers = {}
        self.client.post('/demo', data = payload,headers = headers)

#TaskSet类,该类定义用户任务信息(模拟用户信息),
class WebsitUser(HttpUser):
    #指向一个定义的用户行为
    task_set = task(ScriptTasks)
    #被测系统的host,
    host = 'http://www.xxxxxx.com'
    #每个用户执行两个任务间隔时间最小值,单位是(毫秒,默认是1000ms)
    min_wait = 100
    # 每个用户执行两个任务间隔时间最大值,单位是(毫秒)
    max_wait = 5000

这里小鱼在强调一次:

1、关于 HttpUser 和User的使用, 在版本10.1之后,就需要换成HttpUser 和 User,否则报错;

    >>>因为小鱼发现,很多网站的大佬都在使用HttpLocust 和Locust,如果你的Locust 版本是 9.x或者8.x,可以使用,不做强要求。

3.2 classTaskSet 用法及展示

3.2.1 定义

1、TaskSet类实现了虚拟用户所执行任务的调度算法,包括:

    ①规划任务执行顺序:schedule_task;

    ②挑选下一个任务:execute_next_task;

    ③执行任务:execute_task;

    ④休眠等待:wait;

    ⑤中断控制:interrupt;

2、在1的基础上,就可以在TaskSet子类中进行以下操作:

    ①描述虚拟用户的业务测试场景;

    ②对虚拟用户的所有行为进行组织和描述;

    ③对不同任务的权重进行配置;

3、 @task

    ①通过@task()装饰的方法为一个事务。

    >>>参数越大每次被虚拟用户执行的概率越高,默认是1。  

4、TaskSet子类中采用2种方式定义任务信息:

    ① @task

    ② tasks属性

3.2.2 代码展示

1、采用@task装饰器定义任务信息:

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-23
"""
from locust import task,TaskSet
class UserBehav(TaskSet):
    @task(2)
    def test_case1(self):
        self.client.get("/testcase1")
    @task(4)
    def test_case2(self):
        self.client.get("/testcase2")

2、采用tasks属性定义任务信息:

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-23
"""
from locust import TaskSet
def test_case1(self):
    self.client.get("/testcase1")
def test_case2(self):
    self.client.get("/testcase2")
class UserBehav(TaskSet):
    tasks = {test_case1:2,test_case2:4}
    #另一种写法
    # tasks = [(test_job1,1), (test_job1,3)]

上面的代码,没有什么难度,这里就不做解释。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   先上我的结论:  只会简单的测试,没前途。  会中级的测试技能,短期内不愁,但长期不好说。  掌握开发技能,将会提升你在行业中的竞争力。  ★为什么测试也要懂开发?  一、懂开发,增强职场的抗风险能力。  臻叔希望大家明白一个道理:不懂开发的测试可替代性强,甚至开发都可以在一定程度上做简单的测试。  举个例子:  百词斩app,考过英语四六级的应该都知道,也算是小而美的一家有知名度的企业。但这种量级的公司,居然没有测试,基本上都靠开发自测bug。  大公司RD(开发)和QA(测试)的人员比大概是3:1,也就是3个开发(2个前端、1个后端)配1个测试。但我估计非一线城市+小公司的前提下,这个...
            0 0 1052
            分享
          • 数据库事务事务是什么是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。事务的四大特性原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性:一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就是永久性的。接下来的其它操作或故障不应该对其执行结果有任...
            12 12 1743
            分享
          • 每个开发都不想写文档。当你不想写接口文档时,可以通过安装插件在 IDEA 里实现自动同步,一边写代码一边同步接口文档给你的前端、测试同学。以下内容手把手教你怎么操作(这里仅面向使用 IDEA 编辑器、遵循 Java Spring 框架注释规范的同学):首先,你需要安装一个插件IDEA 插件市场里搜索 「Apifox Helper」,这是国内一个做 API 协作管理平台的厂商(Apifox)做的插件,可以非常方便自动生成接口文档并且同步到你的项目中。这个插件可以实现代码零入侵自动生产接口文档。IDEA 安装插件:打开 IDEA > Preferences(Settings) > Pl...
            0 0 2057
            分享
          • Locust 是一个轻量级的性能测试工具,和大名鼎鼎的 JMeter 相比,没有那么大而全的功能,但针对一些简单的压测场景,Locust 无疑是个好选择。本文并非深入教学帖,所以下面只通过一个最简单的场景为例,来大致介绍一下它。1 使用说明假设咱现在要测试一个站点 http://test.valval.cool,测试目标为其中两个接口的性能,分别为 GET /api1 和 POST /api2。首先安装$ pip install locust接着编写 python 脚本如下,可以命名为 locustfile.py:from locust imp...
            11 11 2944
            分享
          •   如果您正在寻找一款基于 PCIe 4.0 的 NVMe 固态硬盘,它不仅速度快,而且可靠性高,那么三星 990 PRO 可能是您的首选。这款硬盘被认为是容量为 1TB 或 2TB 的最佳旗舰固态硬盘之一。不过,这种情况又很快就会改变,因为该公司公布了其发布 4TB 配置的计划,将其当前旗舰产品的容量扩大了一倍。  三星尚未透露即将推出的升级版的全部细节。配备 2TB 的三星 990 PRO 读取和写入速度分别高达 7450MB/s 和 6900MB/s,令人印象深刻。目前的 2TB 版本售价为 219.99 美元(目前在 samsung.com 上的售价为 169.99 美元),而 4TB...
            0 0 750
            分享
      • 51testing软件测试圈微信