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)

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了