阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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)
      目录
      目录