locust安装
通过pip 安装locust
pip install locustio
需要预先安装python3和pip,这次在安装环境时遇到一些坑,环境中原本使用的python2.6,需要重新安装python3环境,这时候可以安装一个虚拟环境
注:支持的python版本:2.7、3.4、3.5、3.6及以上
虚拟环境安装
- 命令安装了python的虚拟环境
pip3 install virtualenv
- 创建虚拟机环境
virtualenv /venv
- 激活虚拟环境
source /venv/bin/activate
进入了一个全新的python3的环境,你可以安装独立的python依赖了,安装完成之后可以启动程序运行
- 退出虚拟环境
deactivate
脚本示例
locust的脚本里,模拟负载的请求和python的requests库使用方法基本一样,示例如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: lluozh
# @Date : 2020/4/16
# @Desc :
from locust import HttpLocust,TaskSet,task,between
class MyBlogs(TaskSet):
@task(1)
def get_blog(self):
header = {
}
body = {
"roomId": "158589982254376"
}
req = self.client.get("/api/v1/model", headers=header, params=body, verify=False)
# print(req.text)
# if req.status_code == 200:
# print("success")
# else:
# print("fails")
class websitUser(HttpLocust):
task_set = MyBlogs
# 设置用户执行任务之间等待的上下限,单位秒
wait_time = between(3, 6)
# # 等同于上面wait_time,单位毫秒
# min_wait = 3000
# max_wait = 6000
host = "http://benchmark-server.lluozh.com"
if __name__ == "__main__":
import os
# os.system("locust -f locusttest.py --master")
os.system("locust -f locusttest.py --slave --master-host=10.200.0.219")
脚本说明:
- 新建一个类MyBlogs(TaskSet),继承TaskSet,该类下面写需要请求的接口以及相关信息
- self.client调用get和post方法,和requests一样
- @task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1
WebsiteUser()类用于设置生成负载的基本属性:
- task_set:指向一个TaskSet类,TaskSet类定义了用户的任务信息,该属性为必填
- min_wait:模拟负载的任务之间执行时的最小等待时间,单位为毫秒
- max_wait:模拟负载的任务之间执行时的最大等待时间,单位为毫秒
- host:被测系统的host,当在终端中启动locust时没有指定–host参数时才会用到
- weight:同时运行多个Locust类时会用到,用于控制不同类型任务的执行权重。、
默认情况下,时间是在min_wait和max_wait之间随机选择,但是可以通过将wait_function设置为任意函数来使用任何用户定义的时间分布
启动Locust
1. 单机启动
locust -f testscript/locusttest.py --host=http://benchmark-server.lluozh.com
2. 分布式启动
master:
locust -f testscript/locusttest.py --master --host=http://benchmark-server.lluozh.com
slave:
locust -f testscript/locusttest.py --slave --master-host=10.200.0.2190 --host=http://benchmark-server.lluozh.com
注:若在阿里云环境时,需要使用内部ip
成功启动提示
[2020-04-18 20:01:22,727] IMYalost/INFO/locust.main: Starting web monitor at *:8089
[2020-04-18 20:01:22,729] IMYalost/INFO/locust.main: Starting Locust 0.8
8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可
运行逻辑
测试开始后,每个虚拟用户(Locust实例)的运行逻辑都会遵循如下规律:
- 先执行WebsiteTasks中的on_start(只执行一次),作为初始化
- 从WebsiteTasks中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行
- 根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待
重复2~3步骤,直至测试任务终止。