locust入门2

1513 篇文章 70 订阅
1438 篇文章 114 订阅

先说明一下执行的方法

  1. 每次写完代码都要在Pycharm的Terminal/终端中执行命令:locust -f 文件名.py --host=https://api.weixin.qq.com 如果你有测试地址,可以换成你的地址,现在只是演示用法,所以写了地址也没有做请求。

  2. 终端执行以后

点击上面链接或刷新网站这个地址页面都可以

然后点击Start swarming,我们这里了解代码写法,所以用户数和每秒增加用户数都不用管。

如果要中断执行,可以在终端中通过Control+c中断,也可以再页面点击Stop停止

前后置

有时候我们做压测前需要先登录,然后才能执行测试

locust提供了on_starton_stop方法,类似selenium中的setUpClasstearDownClass,这两个方法只有在测试开始和测试结束/中断时执行一次。

from locust import HttpUser, task, between, events


class QuickstartUser(HttpUser):
  
    wait_time = between(1, 2)

    def on_start(self):
        print("每个用例前执行一次")

    @task
    def get_access_token(self):
        print("标记为task(3)的用例")

    def on_stop(self):
        print("停止测试时执行")

在终端执行命令locust -f testindex.py --host=https://api.weixin.qq.com

执行结果:

wait_time:设定每个任务执行中间的间隔时间,between(min, max)表示在最小值和最大值中间随机取;constant表示间隔固定时间。

@task任务装饰器

@task装饰器:定义任务的方式。比如on_starton_stop我们只是做一些前后操作准备,而通过@task装饰的方法才是我们真正要执行的测试用例。@task可以通过数字标记权重,比如

from locust import HttpUser, task, constant


class QuickstartUser(HttpUser):

    wait_time = constant(1)

    @task(2)
    def create_tags(self):
        print('标记为task(2)的用例')

    @task(1)
    def get_access_token(self):
        print("标记为task(1)的用例")

    @task(3)
    def my_test(self):
        print("标记为task(3)的用例")

在终端执行命令:locust -f createFlag.py --host=https://api.weixin.qq.com

注意:任务权重,代表任务执行的概率,数字越大,被执行到的可能性就越大,可以看到,因为task(3)方法权重最高,所以他被执行到的次数最多,我执行了5秒,得到的输出除了个别task(2),都是task(3),而task(1)根本没有被执行到,这与用例执行间隔时长无关。也就是说你不能利用权重来给用例排执行的顺序,因为权重高的可能执行了100次,而权重低的一次都没有执行。执行的顺序目前来看只能你通过代码执行顺序进行定义。

也可以通过列表或者字典来标记task,例如:

from locust import constant, User


def create_tags(self):
    print('标记为task(2)的用例')


def get_access_token(self):
    print("标记为task(1)的用例")


def my_test(self):
    print("标记为task(3)的用例")


class MyUser(User):
    tasks = [create_tags, get_access_token, my_test]
    wait_time = constant(1)

这里没有加权重,执行结果就是随机的

如果需要权重信息,可以利用字典:

from locust import constant, User


def create_tags(self):
    print('标记为task(2)的用例')


def get_access_token(self):
    print("标记为task(1)的用例")


def my_test(self):
    print("标记为task(3)的用例")


class MyUser(User):
    tasks = tasks = {create_tags: 1, get_access_token: 4, my_test: 3}
    wait_time = constant(1)

@tag标签装饰器

可以利用@tag(tag_name)给用例打标签,方便执行的时候只执行标签用例,或者排除某些用例

# coding: utf-8

from locust import constant, User, tag

@tag(3)
def create_tags(self):
    print('标记为task(2)的用例')


@tag('tag1')
def get_access_token(self):
    print("标记为task(1)的用例")


@tag('tag1', 'tag2')
def my_test(self):
    print("标记为task(3)的用例")


class MyUser(User):
    tasks = {create_tags: 1, get_access_token: 4, my_test: 3}
    wait_time = constant(1)

如果只想执行tag2、tag3标签用例,则:

locust -f createFlag.py --tags tag2 tag3 --host=https://api.weixin.qq.com

注意,执行多个标签用例时,执行哪个、分别执行多少次,都是随机的。即使是我们刚才说的权重,也只能说权重高的比权重低的被执行的概率高。

如果只是不执行tag2标签用例,则:

locust -f createFlag.py --exclude-tags tag2 --host=https://api.weixin.qq.com

Events

  • test_start和test_stop

当定义了类时,通过on_starton_stop可以实现对任务开始和结束操作的定义。但是如果没有定义类,这两个方法就不起作用了,这时候就可以通过事件test_starttest_stop进行监听

# coding: utf-8

from locust import constant, User, tag, events


@events.test_start.add_listener
def on_test_start(environment, **kwargs):
    print("A new test is starting")


@events.test_stop.add_listener
def on_test_stop(environment, **kwargs):
    print("A new test is ending")


@tag('tag3')
def create_tags(self):
    print('标记为task(2)的用例')


@tag('tag1')
def get_access_token(self):
    print("标记为task(1)的用例")


@tag('tag1', 'tag2')
def my_test(self):
    print("标记为task(3)的用例")


class MyUser(User):
    tasks = [create_tags, get_access_token, my_test]
    wait_time = constant(1)

执行locust -f createFlag.py --host=https://api.weixin.qq.com

  • init

初始化监听,一般用于多并发模式。类似Jmeter多并发,除了Master主机还有很多Slave从机,当你需要声明一个全局变量时,就可以利用init事件监听

from locust import events
from locust.runners import MasterRunner

@events.init.add_listener
def on_locust_init(environment, **kwargs):
    if isinstance(environment.runner, MasterRunner):
        print("I'm on master node")
    else:
        print("I'm on a worker or standalone node")

这个代码是官网给的案例,我们还没有到多并发那一步,暂时不做分析。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走


在此特意为大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面,涵盖功能测试、Python编程语言,接口测试、UI自动化测试、性能测试......包括软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2022软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..关注下方公众号免费获取~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值