目 录CONTENT

文章目录

locust结合Prometheus和grafana

懿曲折扇情
2022-05-19 / 4 评论 / 13 点赞 / 650 阅读 / 1,863 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

一、Locust介绍

一个开源性能测试工具,使用 Python 代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统,方便、高效、可分布式等

二、工具安装

环境python3
pip install locust
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn locust

三、locust类库介绍

Locust官方文档

Httpuser类:就是用户行为的操作
Client方法:发送请求
Task类:任务控制的类,权重,跳过等
Taskset类:测试集类
On_start方法:类似于自动化中的setup,每个虚拟用户执行前都会执行这个方法
On_stop方法:类似于自动化中的teardown,每个虚拟用户执行结束后执行这个方法
@task装饰器,如果task后面带有数字,则代表的是测试集中的权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1
Between方法中的是休眠时间:会取between数值中间的随机数


Locust中还有其他很多类,我暂时没用到,有兴趣可以下去了解下,非常不错的一款性能工具

四、locust使用

Windows

我这里使用的是云服务器2c4g, 带宽:8Mbps

代码:以登录vsite网站来压吧 100并发

# coding=utf-8
"""
    @Project :pachong-master 
    @File    :test001.py
    @Author  :gaojs
    @Date    :2022/5/19 21:47
    @Blogs   : https://www.gaojs.com.cn
"""
from locust import HttpUser, between, task, TaskSet, tag
import os
# 强制去掉控制台InsecureRequestWarning
import urllib3
# 随机产生UA类库
from faker import Factory
urllib3.disable_warnings()


class TaskTest(TaskSet):

    def on_start(self):
        """
        description:每个用户执行压测之前都会获取随机数和数字签名
        :return:
        """
        # 每个用户执行压测之前都会获取随机数和数字签名
        # print('====================清理log结束,压测开始, 获取随机数和数字签名!!!========================')
        pass

    # 压测任务,也可以是@task(10)啥的,这个数字是代表权重,数值越大,执行的频率就越高
    @task
    def stress_get(self):
        """
        登录虚拟站点
        :return:
        """
        url = '/prx/000/http/localh/login'
        data = {
            "Content-Type": "application/x-www-form-urlencoded, charset=UTF-8",
            'Connection': 'close',
            "method": "method1",
            "uname": "t",
            "pwd1": None,
            "pwd2": None,
            "pwd": "t",
            "submitbutton": "Sign In"
        }
        randon_ua = Factory.create()
        ua = randon_ua.user_agent()
        headers = {
            'User-Agent': ua
        }
        rsp = self.client.post(url=url, headers=headers, data=data, verify=False, allow_redirects=False, name='loginVsite压测')
        # print(rsp.status_code)
        print(rsp.text)
        assert rsp.status_code == 302

    # 执行并发测试后执行的动作,比如保存log等操作,查看报告http://localhost:8089/
    def on_stop(self):
        pass


class UserBehavior(HttpUser):
    host = '192.168.120.209'
    # 每次请求停顿时间
    wait_time = between(3, 10)
    tasks = [TaskTest]


if __name__ == "__main__":
    os.system("locust -f test004.py --host=https://192.168.120.209 --web-host=127.0.0.1")

执行

十秒起100个虚拟用户

image-1652968149669

报告

image-1652968192885

charts

image-1652968215586

image-1652968224457

RPS

image-1652968244325

分析结果:

平均相应时间:
吞吐量:1000以内
最小相应时间:
最大响应时间:
网络是否有波动:
带宽是否影响:

Linux版本

代码locust_test.py

image-1652968326638

执行命令

./locust -f locust_test.py -u 3000 -r 60 --headless -t 10m --print-stats

报告:动态刷新

image-1652968359221

可视化监控

Prometheus(普罗米修斯) + grafana

压测前的指标:10000并发

image-1652968389055

压测后的指标:

image-1652968412614

image-1652968421096

image-1652968429709

压测结束后:

image-1652968464786

locust执行结果

image-1652968570749

压测:500并发

image-1652968484377

Grafana监控:

image-1652968501903

五、locust参数介绍

image-1652968593177

参数名称	参数值	参数说明
-h, --help	不带参数	查看帮助信息
-H HOST, –host=HOST	HOST	指定被测试的主机,采用以格式:http://10.21.32.33
–web-host=WEB_HOST	WEB_HOST	指定运行 Locust Web 页面的主机,默认为空 “。
-P PORT, –port=PORT, –web-port=PORT	PORT	指定 –web-host 的端口,默认是8089
-f LOCUSTFILE, –locustfile=LOCUSTFILE	LOCUSTFILE	指定运行 Locust 性能测试文件,默认为: locustfile.py
–csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE	CSVFILEBASE	以CSV格式存储当前请求测试数据。
–master	不带参数	Locust 分布式模式使用,当前节点为 master 节点。
–slave	不带参数	Locust 分布式模式使用,当前节点为 slave 节点。
–master-host=MASTER_HOST	MASTER_HOST	分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 –slave 节点一起运行时使用,默认为:127.0.0.1.
–master-port=MASTER_PORT	MASTER_PORT	分布式模式运行, 设置 master 节点的端口号,只在与 –slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
–master-bind-host=MASTER_BIND_HOST	MASTER_BIND_HOST	做分布式压测时,指定分机IP。只用于master。如果没有指定,默认是所有可用的IP(即所有标记主机IP的slave)
–master-bind-port=MASTER_BIND_PORT	MASTER_BIND_PORT	做分布式压测时,指定分机port。默认是5557与5558。
–no-web no-web	-c 和 -r 配合	模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, –clients=NUM_CLIENTS	NUM_CLIENTS	指定并发用户数,作用于 –no-web 模式。
-r HATCH_RATE, –hatch-rate=HATCH_RATE	HATCH_RATE	指定每秒启动的用户数,作用于 –no-web 模式。
-t RUN_TIME, –run-time=RUN_TIME	RUN_TIME	设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。
-L LOGLEVEL, –loglevel=LOGLEVEL	LOGLEVEL	选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
–logfile=LOGFILE	LOGFILE	日志文件路径。如果没有设置,日志将去 stdout/stderr
–print-stats	不带参数	在控制台中打印数据
–only-summary	不带参数	只打印摘要统计
–no-reset-stats	不带参数	Do not reset statistics once hatching has been completed。
-l, –list	不带参数	显示测试类, 配置 -f 参数使用
–show-task-ratio	不带参数	打印 locust 测试类的任务执行比例,配合 -f 参数使用.
–show-task-ratio-json	不带参数	以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.
-V, –version	不带参数	查看当前 Locust 工具的版本.

六、测试报告参数介绍

报告数据:

image-1652968713997

type:请求方式
name:请求路径的api
requests:请求数
fails:请求失败数
Median:中位数,响应时间,单位毫秒
Average:平均数,响应时间,单位毫秒
Min:最小响应时间,单位毫秒
Max:最大响应时间,单位毫秒
Content Size:单个请求大小,单位为字节
reqs/sec:每秒请求数,相当于jmeter的tps
charts:
实时统计的rps
实时统计平均响应时间
实时统计虚拟用户数

七、linux服务器部署可视化监控

Docker部署
Prometheus(普罗米修斯) + grafana
非常炫酷的可视化监控以及丰富的监控插件,以及监控的对象,根据不通的监控需求,选择不同的模板ID,监控的内容非常详细

具体部署步骤:https://blog.csdn.net/qq_41870111/article/details/120953313

13

评论区