Locust 用 FastHttpLocust 提高HTTP请求性能
通过 FastHttpLocust 提高Locust的HTTP请求性能
Locust 的默认 HTTP客户端 是使用 python-requests
来实现的,它提供了许多python开发人员都熟悉的API。
因此,在通常情况下,我们建议您使用这个作为 HttpLocust 的默认。
但是,如果你打算真实的跑一个大规模测试,Locust有一个备用的HTTP客户端 FastHttpLocust
,它使用 geventhttpclient
代替 requests
。
这个http客户端的速度提高非常明显,经过测试发现HTTP请求的性能提高了5到6倍(还是非常给力的)。
但是这并不意味每个CPU内核可以模拟的用户数量会增加5到6倍,因为这还取决于负载测试脚本的多方面因素。
但是,如果你的 locust
脚本在执行HTTP请求时花费了大量的CPU时间,切换到 FastHttpLocust
会让你看到明显的性能提升。
注意:这是属于提高你的HTTP请求的性能,只做这一件事,和其它流程中的性能是没关系的;
如何使用FastHttpLocust
First, you need to install the geventhttplocust python package:
首先,您需要安装 geventhttplocust
的python包:
pip install geventhttpclient
然后,您只将FastHttpLocust而不是HttpLocust子类化:
from locust import TaskSet, task
from locust.contrib.fasthttp import FastHttpLocust
class MyTaskSet(TaskSet):
@task
def index(self):
response = self.client.get("/")
class MyLocust(FastHttpLocust):
task_set = MyTaskSet
min_wait = 1000
max_wait = 60000
注意:与使用python-requests的默认HttpLocust相比,FastHttpLocust
的实现API会不同。这取决于如何使用HttpClient,FastHttpLocust可能无法完全替代HttpLocust。
API
类 FastHttpSession(base_url
, **kwargs
)
-
__init__(base_url, **kwargs)
- x.__init__(…) 初始化x; 参见help(type(x))进行签名
-
get(path, **kwargs)
- 发送一个GET请求
-
head(path, **kwargs)
- 发送HEAD请求
-
options(path, **kwargs)
- 发送一个OPTIONS请求
-
patch(path, data=None, **kwargs)
- 发送POST请求
-
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, **kwargs)
发送和HTTP请求返回
locust.contrib.fasthttp.FastResponse
对象。
参数 | is_necessary | 说明 |
---|---|---|
method | 必须 | 新Request对象的方法。 |
path | 必须 | 将与指定的基本主机URL并置的路径。也可以是完整URL,在这种情况下,将请求完整URL,并且忽略基本主机。 |
name | 可选 | 一个参数,可以指定为在Locust的统计信息中用作标签,而不是URL路径。这可用于在Locust的统计信息中将请求的不同URL分组为单个条目。 |
catch_response | 可选 | 布尔型参数,如果已设置,则可用于发出请求,以返回上下文管理器以用作with语句的参数。即使响应代码正常(2xx),也可以根据响应的内容将请求标记为失败。相反的方法也可行,即使没有响应代码(即500或404),也可以使用catch_response来捕获请求,然后将其标记为成功。 |
数据 | 可选 | 在请求正文中发送的字典或字节。 |
标头 | 可选 | 与请求一起发送的HTTP 标头字典。 |
auth | 可选 | 身份验证(用户名,密码)元组,以启用基本HTTP身份验证。 |
stream | 可选 | 如果设置为true,则不会立即使用响应主体,而是可以通过访问Response对象上的stream属性来使用它。将流设置为True的另一个副作用是,在Locust报告的请求时间中不会考虑下载响应内容的时间。 |
类 FastResponse(ghc_response
, request=None
, sent_request=None
)
content
- 必要时解压缩并缓冲接收到的正文。小心大文件!
headers
= None- 包含响应头的类对象字典
text
- 以解码字符串的形式返回响应的文本内容(python2上的unicode)