项目需要做一些并发的测试,选用了locust,实际使用起来确实很方便。各种性能指标也很明确,唯一的遗憾就是网上现有的blog都太旧了,看了好几篇,实际运行都会报方法已经弃用。所以写下这篇,基于locust 1.0.3版本的简单使用记录。
官网使用文档:
https://docs.locust.io/en/stable/quickstart.html
代码
class BestTestIndexUser(HttpUser):
wait_time = between(1, 2) # 必填项,每个并发用户在访问前随机1-2s等待
@task #表明这是一个需要执行的任务
def index(self): # 这个函数里面定义的是咱们要具体做的操作
req = self.client.post('/verify-idcard/ocr/v1/idcard',
data={'image': self.data, 'id_card_side': 'front'}) # 请求这个url里面的哪个路径,如果是接口的话,就是哪个接口,使用起来和request的基本一致
if req.status_code == 200:#内部还可以有更加仔细的处理请求req的部分,不过因为我是单纯测试并发性能,所以简单返回即可
print("success")
else:
print("fails")
一开始部署是在本地机器上进行的,但是实际测试发现这样测出来的性能受到本地的网络时延影响非常大,不能真实测出部署环境上的服务的实际性能(毕竟我也是刚刚接触这种性能测试),应该要部署在实际的生产环境中(其实应该有测试环境,然而GPU资源有限),此时因为网络之间的带宽很大,网络延时不会成为瓶颈,可以比较好的测试GPU和CPU的性能指标。
使用docker容器形式部署测试代码
部署指令:
1. 生成测试环境的docker镜像文件
1.1 requirements文件
aiohttp==3.5.4
astor==0.8.0
async-timeout==3.0.1
more-itertools==7.1.0
multidict==4.5.2
pip==19.1.1
python-dotenv==0.10.3
requests==2.22.0
locust
1.2 生成docker镜像文件
FROM ubuntu:18.04
LABEL version="1.0"
WORKDIR /idcardlocust
ADD . /idcardlocust
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y language-pack-zh-hans
RUN apt-get install -y python3-pip
RUN apt-get install -y vim
RUN pip3 install -i http://pypi.douban.com/simple -r /idcardlocust/requirements --trusted-host pypi.douban.com
ENV LANG C.UTF-8
1.3 生成镜像
docker build -t idcardlocust .
1.4 容器开启
docker run -it --name idcardlocust_wt -p 80:8089 -v /home/aipaas/ocr/idcardlocust:/mount_idcardlocust idcardlocust /bin/bash
1.5 进入容器执行指定
这里有两种执行方式
1. 如果机器有端口可以暴露出来,那么可以采用网页端的形式进行并发量设置、性能指标查看以及图标形式查看,那就很美妙了。采用locust --help可以查看所有参数的含义。
locust -f locustfile.py --host=http://172.17.0.1:3500
-f
表示 编写的测试文件,不写则默认寻找当前文件夹下的locustfile.py文件
--host
需要访问的ip地址或者网址以及端口号
接着可以在浏览器端,输入测试IP:8089开启并发测试然后观察并发测试的结果。
2.png
如果说无法暴露接口,那么可以通过headless的方式,也就是纯命令行进行测试和查看测试结果。
locust -f locustfile.py --host=http://172.17.0.1:3500 --headless -u 10 -r 5 -t 20s --csv 10_5 --loglevel ERROR
--headless
不使用网页版的形式进行监控,必须有-u , -t这些参数
-u 并发用户数量
-t 测试时间
,可以是300s,20m, 3h, 1h30m这样的表示方式
-r 每秒启动的用户数量
--csv csv_prefix
将请求状态以csv的格式进行保存,会保存[CSV_PREFIX]_stats.csv, [CSV_PREFIX]_stats_history.csv和 [CSV_PREFIX]_failures.csv这三个文件
--loglevel [DEBUG/INFO/WARNING/ERROR/CRITICAL]
默认情况下,会把log直接在标准输入输出上打印出来,默认打印info级别的log信息,设置了loglevel之后就只会汇报改级别以上的信息了。使得终端信息更加干净。
网友评论