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:每秒钟请求的个数。

locust接口压力测试

locust接口压力测试