性能测试Locust--(7)使用更快的HTTP client提高Locust性能

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章