Locust性能测试框架--学习--入门必备!!!!!!

Locust框架
主要思想:模拟一群用户访问系统
安装:pip install locustio==0.11.0 -i Simple Index    (这个命令可以解决版本过高、安装失败的问题)
验证:pip show locustio
实现步骤:
  1. 定义任务(接口请求-测试用例)     在框架中定义方法        注:普通函数,必须要有一个形参
  2. 定义任务集 (用户行为)   在框架中定义测试套件
  3. 定义Locust类(用户)   运行测试套件
创建一个文件夹Locust_study  文件夹下创建locustfile.py
locustfile.py内容如下
from locust import TaskSet
from locust import HttpLocust
【1.定义任务】
任务1  说话   
def say(params):       # params是形参    是RunUsers实例
print("我在说话啊!")   
 任务2  唱歌
def song(params):     # params是形参
print("我在唱歌啊~")
【2.定义任务集】   #它是一个类,T askSet,复写tasks (tasks的格式为列表或者字典,值为任务函数名)        【测试套件】
class TaskTest(TaskSet):    #这时候需要导TaskSet包   
# 复写tasks
tasks = [say, song]
【2.定义用户类】   #必须集成HttpLocust,复写 task_set参数,值为任务集类名称
class RunUser(HttpLocust):    #这时候需要导HttpLocust包
# 复写task_set
task_set = TaskTest
说明:
  1. 任务:python中可执行函数必须有一个形参占位(执行时,用户类指向具体任务时会传入一个用户对象,此处必须有参数接收用户类传入的对象)
  2. 任务集:①继承TaskSet类②重写父类参数taskset值为列表或字典,类型为任务函数名
  3. 用户类:①继承HttpLocust②重写父类参数task_set值为任务集类名③重写父类参数host的值为:请求链接时,服务器公共域名地址
启动Locust服务
【方法一】进入locustfile.py所在的文件夹下
   cd Locust_study
   locust --host= http://localhost
                         
输入地址后可以正常访问
运行
【方法二】locust -f Locust_study/locustfile.py --host=http://localhost
扩展:如果不想每次输入--host= http://localhost,需要在用户类里面,添加指定域名
​
class RunUser(HttpLocust):
# 复写task_set
task_set = TaskTest
# 指定域名
host = 'http://localhost'
​
执行:locust -f Locust_study/locustfile.py 
小知识:pycharm中  表示父类的意思
Ctrl+B  快速进入一个参数/类/函数的定义
host参数的作用
Crtl+B进入HttpLocust中
  1. 调用requests.Session对象请求方法时的base_url
  2. 任务函数的形参params为HeepLocust实例对象(self.client)
  3. HttpLocust为request.session对象,可以调用get\post\put\delete...方法
Locust实现基本的http请求
例:
登录接口:
Url->http://182.92.81.159:1880/bms/login
请求方式:POST
请求参数:{"username":"admin", "password":"123456"})
查看信息接口:
Url->http://182.92.81.159:1880/bms/session
请求方式:GET
退出登录接口:
Url->http://182.92.81.159:1880/bms/logout
请求方式:POST
​
from locust import TaskSet
from locust import HttpLocust
# 1.定义任务
# ①登录
def login(params):
# 调用post方法
r = params.client.post(url="/bms/login", data={"username": "admin", "password": "123456"})
# 查看登陆结果
print(r.json())
# ②查看信息
def session(params):
# 调用get方法
r = params.client.get(url="/bms/session")
print(r.text)
# ③退出登录
def logout(params):
r = params.client.post(url="/bms/logout")
print(r.json())
# 2.定义任务集
class TaskTest(TaskSet):
# 复写tasks属性
tasks = [login, session, logout]
# 定义用户类
class UserRun(HttpLocust):
# 复写task_set
task_set = TaskTest
# 定义Host
host = "http://182.92.81.159:1880"
​
形参.client=requests.Session对象
host的值一般为测试服务器域名,或公共部分
Locust常用方法
一个用户行为类,要继承TaskSet类,表示一个 任务集)
  • on_start:前置方法(前置任务),在所有任务之前调用         
  • on_stop:后置方法(后置任务),当任务集停止时调用
  • task:用来添加任务,它是一个dict类型,key表示任务的方法名,value表示挑选执行的权重,数值越大执行频率越高
注:每个用户只会执行一次on_start 和 on_stop
自定义的Locust类继承了HTTP Locust类,这个类代表用户,生成一个实例,模拟用户发送http请求  (用户类)
  • task_set:该属性指向TaskSet类,定义用户的行为
  • min_wait:用户执行任务之间等待时间的下界,单位:毫秒,默认值:1000
  • max_wait:用户执行任务之间等待时间的上界,单位:毫秒,默认值:1000
  • host:被测应用的网址
  • weight:用户被选中给概率,权重越大,被选中的的机会越大,默认值:10
​

from locust import TaskSet
from locust import HttpLocust
# 1.定义任务
# ①登录
def login(params):
# 调用post方法
r = params.client.post(url="/bms/login", data={"username": "admin", "password": "123456"})
# 查看登陆结果
print(r.json())
print("正在调用登录接口")
# ②查看信息
def session(params):
# 调用get方法
r = params.client.get(url="/bms/session")
print(r.text)
print("正在调用查看信息接口")
# ③退出登录
def logout(params):
r = params.client.post(url="/bms/logout")
print(r.json())
print("正在调用退出登录接口")
# 2.定义任务集
class TaskTest(TaskSet):
# 复写tasks属性
tasks = [session]       
# 初始化执行方法 #因为下面调用了开始和结束方法,所以 tasks = [login, session, logout]变为 tasks = [session]
def on_start(self):
login(self)
# 结束执行方法
def on_stop(self):
logout(self)
# 定义用户类
class UserRun(HttpLocust):
# 复写task_set
task_set = TaskTest
# 定义Host
host = "http://182.92.81.159:1880"
# 最小延迟时间 毫秒 默认1000
min_wait = 1000
# 最大延迟时间 毫秒 默认1000
max_wait = 3000
# 权重 默认为10
weight = 10
​
  • task={任务函数:比重,任务函数:比重}
    • 例:{index:3,user:1}    # 大约运行index函数3次,user函数1次
查询信息10次
class TaskTest(TaskSet):
# 复写tasks属性
tasks = {session: 10} # 查看信息10次
# 初始化执行方法 #因为下面调用了开始和结束方法,所以 tasks = [login, session, logout]变为 tasks = [session]
def on_start(self):
login(self)
# 结束执行方法
def on_stop(self):
logout(self)
Web图表介绍
  • statistics(统计)报告
    • Requests:当前请求的数量
    • Fails:当前请求失败的数量
    • Median(ms):中间值,单位毫秒,一半服务器响应时间低于该值,而另一半高于该值
    • Average(ms):所有请求的平均响应时间,毫秒
    • Current RPS:当前每秒请求数
  • Total Requests per Second:每秒发送请求数
  • Response Times(ms):平均响应时间
  • Number of Users:虚拟用户数
@Task装饰使用
目标:将任务直接定义在任务集中   (3个步骤-->2个步骤)      
核心:@Task
​
from locust import TaskSet
from locust import HttpLocust
from locust import task
# 1.定义任务集
class TaskTest(TaskSet):
# ①登录
def login(self):
# 调用post方法
r = self.client.post(url="/bms/login", data={"username": "admin", "password": "123456"})
# 查看登陆结果
print(r.json())
print("正在调用登录接口")
# ②查看信息
@task(10) # 10是比重 #查询信息10次
def session(self):
# 调用get方法
r = self.client.get(url="/bms/session")
print(r.text)
print("正在调用查看信息接口")
# ③退出登录
def logout(self):
r = self.client.post(url="/bms/logout")
print(r.json())
print("正在调用退出登录接口")
# 初始化执行方法 #因为下面调用了开始和结束方法,所以 tasks = [login, session, logout]变为 tasks = [session]
def on_start(self):
self.login()
# 结束执行方法
def on_stop(self):
self.login()
# 定义用户类
class UserRun(HttpLocust):
# 复写task_set
task_set = TaskTest
# 定义Host
host = "http://182.92.81.159:1880"
# 最小延迟时间 毫秒 默认1000
min_wait = 1000
# 最大延迟时间 毫秒 默认1000
max_wait = 1000
# 权重 默认为10
weight = 10
​
@task 修饰任务
@task(比重)修饰任务比重
Locust分布式应用
目标:Locust分布式    (把脚本发送到从属主机)  (web界面实现)
角色:
  1. 主机 (控制器)master
  2. 从属主机(执行机) --slave   --master-host=主机ip地址
从属主机必须依赖重点:
  1. 必须有python以及locust环境
  2. 必须有主机脚本的副本        
运行:
  • 主机:locust -f 目录\模块.py --master
  • 从属主机:locust -f 目录\模块.py --slave --master-host=主机ip地址
注:--master主机(控制机);--salve从属主机(执行机)
命令行实现分布式效果
参数:
--no-web:不使用web界面
-c:虚拟用户数
-r:每秒孵化率
--expect-slaves:指定执行机数量(从属主机数)
--run-time:指定运行时间(h:小时;m:分钟;s:秒)
--csv=:保存执行结果
locust -f  Locust_study/locustfile.py --master --no-web -c 200 -r 20 --expect-slaves 2 --run-time 20s --csv=./master_result.csv
locust -f  Locust_study/locustfile.py --slave --master-host=192.138.1.104  --csv=./master_result.csv
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值