压测工具 Locust

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。压测工具 Locust,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、认识Locust

定义

Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。

特点

①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;

安装

pip install locust

Locust有六个依赖的python模块,一并安装好。

  1. gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;
  2. flask:Python的一个web开发框架,和django相当;
  3. requests:支持http/https访问的库;
  4. msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
  5. six:提供了一些简单的工具封装Python2和Python3 之间的差异;
  6. pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)
    检测安装是否成功
(demo) root@ubuntu1804:/opt/other# locust --version
locust 2.5.0

二、使用

简单使用

编写测试脚本 locust_test.py

from locust import HttpUser, TaskSet, task

class UserBehavior(HttpUser):
    @task(1)
    def baidu_index(self):
        self.client.get("/")

UserBehavior()类用户设置测试具体方法:
UserBehavior继承HttpUser,拥有request等方法。
@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
baidu_index 是具体的测试方法,可以设置GET、POST请求,可以设置请求携带信息,可以设置请求的结果处理。

(demo) root@ubuntu1804:/opt/other# locust -f locust_test.py
/root/.virtualenvs/demo/lib/python3.8/site-packages/locust/util/deprecation.py:14: DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [UserBehavior])
  warnings.warn(
[2021-11-29 11:36:29,324] ubuntu1804/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
[2021-11-29 11:36:29,356] ubuntu1804/INFO/locust.main: Starting Locust 2.5.0

UI界面

打开网页:http://localhost:8089,进入UI界面。
压测工具 Locust

UI界面的菜单
● Statistics:类似于jmeter中Listen的聚合报告;
● Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
● Failures:失败请求的展示界面;
● Exceptions:异常请求的展示界面;
● Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;

统计信息:
压测工具 Locust

Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;

QPS图信息
压测工具 Locust

官方文档:
https://docs.locust.io/en/stable/what-is-locust.html

三、进阶使用

控制RPS
wait_time 是请求的间隔时间
用户数 是开启的协程数
RPS = 间隔 x 用户数,要求的RPS可以根据这个公式调整。

class UserBehavior(HttpUser):
    wait_time = constant_throughput(0.5)

    @task(1)
    def get_ticket_user(self):
        url = "https://apiv3.shanbay.com/tickethub/ticket/user?code=2021-06-cet"
        cookies = {"auth_token": random.choice(token_list)}
        self.client.get(url, cookies=cookies)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/196529.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!