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(environment, base_url, user, insecure=True, client_pool=None, **kwargs)
get(path, **kwargs)
发送get请求
head(path, **kwargs)
发送head请求
options(path, **kwargs)
发送options请求
patch(path, data=None, **kwargs)
发送patch请求
post(path, data=None, **kwargs)
发送post请求
put(path, data=None, **kwargs)
发送put请求
request(method, path, name=None, data=None, catch_response=False, stream=False, headers=None, auth=None, json=None, allow_redirects=True, context={}, **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 报告的请求时间。