Locust工具学习(四)-Taskset嵌套子类,FastHttpUser介绍,HttpUser介绍

Taskset,SequentialTaskSet嵌套子类

代码示例:

from locust import User, task, between, FastHttpUser, TaskSet, SequentialTaskSet


class TestUser(FastHttpUser):
    
    @task   #task装饰器,标识接下来这个是任务
    def test_01(self):
        print('这是test01')

    @task
    def test_02(self):
        print('这是test_02')

    @task
    class Test03(TaskSet):
        # 继承TaskSet,该类为一个任务集合
        @task
        def test_03_01(self):
            print('这是test_03_01')

        @task
        def test_03_02(self):
            print('这是test_03_02')
            self.interrupt()   # interrupt表示跳出这个任务,没有interrupt时,任务会一直在这个类里面循环


    @task
    class Test04(SequentialTaskSet):
        #继承SequentialTaskSet类,该类的任务按从上往下的顺序执行
        @task
        def test_04_01(self):
            print('这是test_04_01')
            self.interrupt()


        @task
        def test_04_02(self):
            print('这是test_04_02')

Taskset

TaskSet是指动作集合,就是将某个功能整合在一起,能够完成一系列动作

当执行到Class Test03的时候,会进入该类里面,执行里面的任务

当进入该类执行任务的时候,需要使用self.interrupt()来退出这个任务,否则任务将会一直在这类里面执行内部的任务,无法跳出执行其他任务

SequentialTaskSet

SequentialTaskSet同样是指动作集合,比原TaskSet多了个功能,可以让任务,从上往下按顺序执行,同样的,也需要使用self.interrupt()来退出这个任务。

HttpUser,FastHttpUser介绍

from locust import HttpUser, task, between, FastHttpUser

class MyUser(HttpUser):
    # 使用HttpUser发出请求

    
    wait_time = between(5, 15)  # 每个任务间隔5-15s

    @task(4)
    def index(self):
        self.client.get("/")

    @task(1)
    def about(self):
        self.client.get("/about/")


class MyFastUser(FastHttpUser):
    # 使用FastHttpUser发出请求

    @task(4)
    def index(self):
        self.client.get("/")

    @task(1)
    def about(self):
        self.client.get("/about/")

HttpUser介绍

HttpUser是最常用的User。HttpUser是直接继承python-request,它添加了一个client用于发出 HTTP 请求的属性。

client是一个实例的HttpSession属性,主要是将请求结果报告给 Locust(成功/失败、响应时间、响应长度、名称)

当接口出现失败的情况,HttpSession则是捕获requests.RequestException由Session抛出的任何东西。

验证响应

如果HTTP的响应码<400,则请求会被认为是成功的,如果要对响应进行一些额外的校验,则需要自定义响应码对应的事件

这个时候则需要使用上下文管理模式with语句,加上catch_response参数对请求进行标记

catch_response:(可选)布尔参数,如果设置,可用于使请求返回上下文管理器,以作为 with 语句的参数。这将允许根据响应的内容将请求标记为失败,即使响应代码是 ok (2xx)。反之亦然,可以使用 catch_response 捕获请求,然后将其标记为成功,即使响应代码不是(即 500 或 404)。

对response.failure()的调用将请求标记为失败

with self.client.get("/does_not_exist/", catch_response=True) as response:
    if response.status_code == 404:
        response.failuer('请求失败')

对response.sueccess()的调佣将请求标记为成功(注意:即使响应代码错误,您也可以将请求标记为成功

with self.client.get("/does_not_exist/", catch_response=True) as response:
    if response.status_code == 404:
        response.success('请求成功')

FastHttpUser介绍

相对于HttpUser是直接继承python-request,FastHttpUser则是使用更快的geventhttpclient代替,它提供了一个非常相似的 API,并且使用的 CPU 时间显着减少,有时将给定硬件上每秒的最大请求数增加了 5 到 6 倍。

使用场景:官方给出的区别是FastHttpUser的测试将能够在每个核心每秒执行接近 5000 个请求,而HttpUser则是大约 850 个(在 2018 MacBook Pro i7 上测试) 2.6GHz),在负载生成器CPU没有过载的情况下,FastHttpUser和HttpUser基本相同,更推荐使用HttpUser

FastHttpUser/geventhttpclient 与 HttpUser/python-requests 非常相似,但有时存在细微差别。如果您使用客户端库的内部结构,例如手动管理 cookie,则尤其如此。

FastHttpUser  API

与 HttpUser (python-requests) 相比,FastHttpUser 使用不同的 HTTP 客户端 (geventhttpclient)。它明显更快,但没有那么强大。

该用户的行为由其任务定义。任务可以通过使用 on 方法直接在类上声明,也可以通过设置.@task decoratortasks attribute

此类在实例化时创建一个客户端属性,该属性是一个支持在请求之间保持用户会话的 HTTP 客户端。

FastHttpUser类

client_pool= None

要使用的 HTTP 客户端池。如果未给出,则为每个用户创建一个新池。

concurrency= 1

传递给 FastHttpSession 的参数。描述 FastHttpSession 允许的并发请求数。默认值 1。请注意,在给出自定义 client_pool 时设置此值无效。 

connection_timeout= 60.0

 传递给 FastHttpSession 的参数,链接超时时间

insecure= True

 传递给 FastHttpSession 的参数。默认 True,表示不进行 SSL 验证。

max_redirects= 5

 传递给 FastHttpSession 的参数。默认 5,表示 4 个重定向。

max_retries= 1

 传递给 FastHttpSession 的参数。默认 1,表示零重试。

network_timeout= 60.0

 传递给 FastHttpSession 的参数,标识网络超时时间

FastHttpSession 类

classFastHttpSession(environmentbase_urluserinsecure=Trueclient_pool=None**kwargs)

get(path**kwargs)

 发送get请求

head(path**kwargs)

 发送head请求

options(path**kwargs)

 发送options请求

patch(pathdata=None**kwargs)

 发送patch请求

post(pathdata=None**kwargs)

 发送post请求

put(pathdata=None**kwargs)

 发送put请求

request(methodpathname=Nonedata=Nonecatch_response=Falsestream=Falseheaders=Noneauth=Nonejson=Noneallow_redirects=Truecontext={}**kwargs)

 发送和 HTTP 请求返回locust.contrib.fasthttp.FastResponse对象。

参数

  • method——新Request对象的方法。

  • path – 将与已指定的基本主机 URL 连接的路径。也可以是完整的 URL,在这种情况下,将请求完整的 URL,并忽略基本主机。

  • name –(可选)可以指定用作 Locust 统计信息中的标签而不是 URL 路径的参数。这可用于将请求的不同 URL 分组到 Locust 统计信息中的单个条目中。

  • catch_response –(可选)布尔参数,如果设置,可用于使请求返回上下文管理器,以作为 with 语句的参数。这将允许根据响应的内容将请求标记为失败,即使响应代码是 ok (2xx)。反之亦然,可以使用 catch_response 捕获请求,然后将其标记为成功,即使响应代码不是(即 500 或 404)。

  • data -(可选)要在请求正文中发送的字符串/字节。

  • json -(可选)要在请求正文中发送的字典。自动将 Content-Type 和 Accept 标头设置为“application/json”。仅在未设置数据时使用。

  • headers –(可选)与请求一起发送的 HTTP 标头字典。

  • auth –(可选)Auth(用户名,密码)元组以启用基本 HTTP 身份验证。

  • stream –(可选)如果设置为 true,则不会立即使用响应正文,而是可以通过访问 Response 对象上的流属性来使用。将 stream 设置为 True 的另一个副作用是下载响应内容的时间不会计入 Locust 报告的请求时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值