日常执行执行性能测试,测试结果的监控与分析至关重要,Locust 工具在内部采用了一个时间序列数据结构,专门用来记录每个事件的统计信息。这种数据结构允许我们在 Charts 标签页中轻松查看各个时间节点的性能数据。然而生成了报告也是独立一份文件,不易保存也不好分类,特别在系统多次迭代后再执行性能测试,对历史数据进行参照和比对会有一定困难。
为了长期保存这些数据,以供后续深入分析,我们可以考虑将 Locust 的测试数据发送至外部数据存储系统,比如 InfluxDB。同时结合使用 Grafana 等可视化工具,我们可以更直观地展示和分析这些数据。
本文讲解如何使用 Locust 进行负载测试并将测试数据上报至 InfluxDB。此外展示如何利用 Grafana 对测试数据进行可视化展示。
如下整个安装和配置过程在 Centos7 上完成
首先是安装和配置 InfluxDB,安装并配置 InfluxDB 以接收 Locust 发送的测试数据。InfluxDB 是一个时间序列数据库,非常适合存储和查询 Locust 生成的测试数据。
我这里使用的是 docker 安装的方式,附上 docker 的安装过程。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
docker 会用到各种端口,不是生产环境的话, 建议是关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
我看的官网教程,执不执行这个都无所谓,使用 docker -version 一样可以确认安装效果,run hello-world 还要多装一个镜像。但是我都执行了就贴上结果。
sudo docker run hello-world
docker images
vim /etc/docker/daemon.json
{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] }
systemctl restart docker
后边使用的监听脚本只支持 influxdb1 版本,influxdb2 与 1 的使用和配置大有不同。
docker run -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb:1.8
docker exec -it influxdb influx
CREATE DATABASE bucket
至此配置 InfluxDB 以接受 Locust 的连接过程已经完成。按上边的配置,InfluxDB 应该监听 8086 端口。我这 InfluxDB 和 Locust 均在一台主机,如果是环境不在一块,请确保防火墙设置允许 Locust 机器连接到这个端口。
docker pull locustio/locust
pip3 install locust-influxdb-listener
这是 github 上一个既有的项目,主要是通过监听 Locust 的 event 事件,在压测过程中将数据实时录入 influxdb。
项目地址在这:- locust-influxdb-listener
touch locustfile.py
from locust import between, events, tag, task, HttpUser
#导入监听的包
from locust_influxdb_listener import InfluxDBListener, InfluxDBSettings
# 添加监听事件
@user1ener
def on_locust_init(environment, **_kwargs):
# 写上influxDB配置
influxDBSettings = InfluxDBSettings(
host='localhost', # influxDBIP
port='8086', # 对应端口号
user='admin', # influxDBIP账号
pwd='1234123', # 密码
database='bucket',
# 新增tag,便于分类
additional_tags={
'environment': 'test',
'some_other_tag': 'tag_value',
}
)
# 使用配置启用监听
InfluxDBListener(env=environment, influxDbSettings=influxDBSettings)
class TestWebUser(HttpUser):
wait_time = between(1, 5)
@tag('home_page')
@task(1)
def home_page(self):
with self.client.get("/", catch_response=True) as response:
if response.status_code != 200:
response.failure("Got wrong response")
def on_start(self):
print('New user was spawned')
locust
(是的,又是百度)
docker exec -it influxdb influx
> use bucket
> SHOW MEASUREMENTS
按如上脚本会新建两个容器,分别是 locust_events、locust_requests 两个基础的压测信息,详细的表字段如下
到这里基础的 locust 数据入库 influxdb 算是完成了,接下来只要展示对应的报表数据即可,我这使用的是公司的 Granfana,所以跳过了 Granfana 模块,直接进入配置环节。
SELECT mean("response_time") FROM "autogen"."locust_requests" WHERE ("environment"::tag = 'test') AND $timeFilter GROUP BY time($__interval) fill(null)
这个作者的 dashboard 很好看,我附上地址
locust-grafana-dashboard.json
执行到入库环节,大家应该可以看到采用监听方式获取的性能测试数据并不多,基本只有响应时间、用户数,我看了网上很多文章,有的通过分析日志进行数据入库的方式还可以获取到 TPS 和报错明细等数据,再通过 Grafana 的计算和图表配置可以展示非常丰富的测试数据,感兴趣可以自己上手配置和分析。