Locust默认的HTTP客户端使用python-requests。因为requests是一个维护良好的python程序包,它提供了许多python开发人员都熟悉的优质API。因此,在许多情况下,建议使用使用请求的默认HttpLocust
。
但是,如果计划运行大规模的测试,Locust提供了一个替代的HTTP 客户端 FastHttpLocust
,它使用geventhttpclient而不是requests。
该客户端的速度明显提高,其性能是HTTP-requests的5 ~ 6倍。这并不一定意味着每个CPU内核可以模拟的用户数量将自动增加5 ~ 6倍,因为这还取决于负载测试脚本。
总之,如果你的Locust脚本在执行HTTP-requests时花费了大量的CPU时间,那么你可能会看到显著的性能提升。
如何使用FastHttpLocust
代替HttpLocust的子类是FastHttpLocust:
from locust import TaskSet, task, between
from locust.contrib.fasthttp import FastHttpLocust
class MyTaskSet(TaskSet):
@task
def index(self):
response = self.client.get("/")
class MyLocust(FastHttpLocust):
task_set = MyTaskSet
wait_time = between(1, 60)
注意
与默认python-requests的HttpLocust相比,FastHttpLocust使用一个完全不同的API实现另一个HTTP client 。因此,取决于如何使用HttpClient,FastHttpLocust可能无法替代HttpLocust。
在FastHttpLocust的客户端实现中,SSL域名检查被关闭。因此,它将允许通过无效的SSL证书而不会产生任何问题。
API
FastHttpSession类
classFastHttpSession(base_url, **kwargs)
init(base_url, **kwargs) | x.init(…) 初始化X,详见 help |
get(path, **kwargs) | 发送GET请求 |
head(path, **kwargs) | 发送HEAD请求 |
options(path, **kwargs) | 发送OPTION请求 |
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, **kwargs)
发送HTTP请求并返回
locust.contrib.fasthttp.FastResponse
对象.
Parameters:
- method --创建新Request对象方法。
- path --Path将与已指定的base host URL连接。也可以是完整URL,在这种情况下,将请求完整URL,并且忽略host。
- name --可选,在Locust的统计信息中可以指定一个参数作为标签,而不是URL路径。这可用于将请求的不同URL分组到Locust的统计信息中的单个条目中。
- catch-response --可选,Boolean,如果设置了Boolean参数,可用于使请求返回上下文管理器,以用作with语句的参数。即使响应代码正常(2xx),也可以根据响应的内容将请求标记为失败。
反之亦然,即使没有响应代码(即500或404),也可以使用catch_response来捕获请求,然后将其标记为成功。 - data – 可选,请求体-body, Dict或bytes
- headers – 可选,请求头,Dict
- auth – 可选,验证(用户名,密码)元组,以启用基本HTTP验证。
- stream – 可选,如果设置为true,则不会立即使用响应主体,而是可以通过访问Response对象上的stream属性来使用它。
将流设置为True的另一个作用是:不会将下载响应内容的时间记录到Locust报告中的请求时间。
classFastResponse(ghc_response, request=None, sent_request=None)
content
Unzips, 如有必要,并缓冲接收到的Body. 小心大文件!
headers= None
类似于Dict的对象,包含响应标头
text
以解码字符串的形式返回响应的文本内容(python2上的unicode)