locust接口压力测试
今天临时接了一个http协议的接口压测任务,就一个接口,天天用jmeter烦了,想着也能学习下locust就用locust进行了压测,操作步骤和命令如下:
1,监听端口命令
ps -ef |grep viewers.py
2,然后杀掉之前执行的占用(这是进行中,一开始不需要)
kill -f 28420
3,执行命令跑脚本
locust -f /home/guozhen.deng/locustfile/viewers.py --host=http://192.168.16.11:8484
4,脚本实现
# -*- coding: utf-8 -*-
# @File : viewers.py
# @API_name:
# @Time : 2019/4/10 17:07
# @Author : guozhen.deng
from locust import HttpLocust, TaskSet, task
import random
# 定义用户行为,继承TaskSet类,用于描述用户行为
# (这个类下面放各种请求,请求是基于requests的)
# client.get=requests.get
# client.post=requests.post
class test_viewers(TaskSet):
# task装饰该方法为一个事务方法的参数用于指定该行为的执行权重。参数越大,每次被虚拟用户执行概率越高,不设置默认是1
@task()
def test_viewersuv(self):
#用法和requests相同
header = {}
params = {"aid": random.randint(1, 1000)}
r = self.client.get("http://192.168.16.11:8484/vod/viewers/uv", headers=header, params=params)
# 使用assert断言请求是否正确
# assert r.status_code == 200
# 这个类类似设置性能测试,继承HttpLocust
class websitUser(HttpLocust):
# 指向一个上面定义的用户行为类
task_set = test_viewers
# 执行事物之间用户等待时间的下界,单位毫秒,相当于lr中的think time
min_wait = 3000
max_wait = 6000
测试方案一:
启动接口压力测试:
locust -f locustfile.py --host=【域名】
浏览器打开:
http://lockhost:8089/
根据场景进行压力测试:
场景1:运行5分钟,用户数1000,每秒启动100,记录测试结果数据,服务器性能指标;
场景2:运行5分钟,用户数1000,每秒启动200,记录测试结果数据,服务器性能指标;
场景3:运行5分钟,用户数1000,每秒启动500,记录测试结果数据,服务器性能指标;
服务器指标:CPU、内存等
性能测试分析:
。。。。。。
测试方案二:
使用另外一种测试方式,--no-web、-c、-r、-n:
命令行中执行测试:每种场景记录测试结果数据,服务器性能指标;
场景一:locust -f locustfile.py --host=【域名】 --no-web -c 1000 -r 100 -n 30000
场景二:locust -f locustfile.py --host=【域名】--no-web -c 1000 -r 500 -n 30000
场景三:locust -f locustfile.py --host=【域名】 --no-web -c 1000 -r 1000 -n 30000
参考结果
1.Type:请求类型;
2.Name:请求路径;
3.requests:当前请求的数量;
4.fails:当前请求失败的数量;
5.Median:中间值,单位毫秒,一般服务器响应时间低于该值,而另一半高于该值;
6.Average:所有请求的平均响应时间,毫秒;
7.Min:请求的最小的服务器响应时间,毫秒;
8.Max:请求的最大服务器响应时间,毫秒;
9.Content Size:单个请求的大小,单位字节;
10.reqs/sec:每秒钟请求的个数。