• 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)]

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •       最近因工作需要,开发了一个回归测试的小工具。可以根据配置读取不同交易报文并进行变量替换,然后自动发起交易并检查结果。自我感觉挺好用的,与大家分享一下设计思路。(代码要保密,就不上传了。有需要可以根据设计思路自己开发。      设计背景:      目前系统交易越来越多,需求改动也比较频繁。为防止代码改动影响旧需求,每次修改代码后都需要把相关交易回归测试一次。      目前此项回归测试工作主要靠程序员手工完成,存在以下问题:回归测试...
            0 0 2691
            分享
          •   混沌工程的概念由Netflix最先提出,指“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心”。随着分布式系统的建设,单体应用迁移到分布式架构中,对系统的可靠性和容错性提出了更高的要求。为防止服务因为微小故障而产生雪崩效应,引发系统大面积崩溃,通过在分布式系统上进行受控实验,观察系统行为并及时发现问题,提升系统健壮程度。  Chaosblade是由阿里巴巴研发的开源混沌工程工具,用于模拟常见的故障场景。本文使用Ubuntu虚拟机和docker探索该工具的准备过程及部分常见故障的使用方法。  一、工具获取  Chaosblade工具有两种获取方法,可以从Gith...
            12 12 2012
            分享
          • 1、MySQL基础1.1 MySQL的基本知识按照惯例,先介绍一下 MySQL基本知识:MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 的 SQL “结构化查询语言”,是用于访问数据库的最常用标准化语言。MySQL 软件采用了 GPL(GNU 通用公共许可证),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本,而选择 MySQL 作为其网站数据库。1.2 MySQL的优势MySQL的优势有哪些,我们来瞧瞧。・MySQL开源的,无需支付额外费用...
            1 0 4449
            分享
          •   1. 测试想法生成器  可以使用ChatGPT技术,帮助我们扩展或优化测试思路、测试场景、测试数据等;  比如针对SCRM/CDP/MA等,可以根据GPT给出的初始想法来检查我们的测试思路,来提高测试覆盖程度,减少项目缺陷。  2.优化测试流程  通过向ChatGPT输出,可以得到如何优化目前的测试流程,来提高效率以及质量。  3.分析需求的关键语句  当我们拿到需求文档之后,如果文档中的话术存在二义性,我们可以尝试使用ChatGPT进行分析该话术在特定的场景下的多种解释。  4.快速融入项目  在进入一个不熟悉的业务线系统中,可以通过向ChatGPT请教一些基本的测试方法,来达...
            0 0 808
            分享
          •        今天来介绍一款工具Squaretest,它是一款自动生成单元测试的插件,为什么会用到它也是因为最近公司上了代码质量管控的指标,会考评各个项目的单元测试覆盖率,以及sonar扫描出来的各种问题,很多老项目老代码,或者着急交付的项目,单元测试严重缺失,覆盖率只有5%不到,所以几个小伙伴这几天就在疯狂的堆单元测试,3个人堆了2天才堆到30%,于是我也来上手帮忙写了两个,写到第二个的时候就发现,这个活不应该是人干的,要去看原来的代码,然后根据逻辑写各种Mock,感觉是有迹可循的东西,所以就查了下,发现果然有插件帮我们来干这个事情,那么解下来就来看看...
            15 14 6098
            分享
      • 51testing软件测试圈微信