各大主流性能测试工具比对:
loadrunner和jmeter之前已经用过了,对于最新流行的locust带着好奇想一探究竟
前言:
locust完全基于python语言,采用pure python描述测试脚本,并且http请求完全基于requests库。除了http/https协议外,locust还可以测试其他协议的系统,只需采用python调用对应的库进行请求描述即可
locust的安装:
可以在cmd或pycharm里的Terminal里pip install locust,当我们在安装locust时,它会检测我们当前的python环境是否已经安装了这些库,如果没有安装,那么它会先把这些库一一装上
locust脚本:
直接上代码了,相信都看的懂:
#coding = utf-8
from locust import HttpUser, TaskSet, task
import requests
import json
class WebsiteTasks(TaskSet):
header = {'Content-Type': 'application/json','connection': 'keep-alive'}
params = {"account": "grace", "password": "123456"}
url = 'https://xxx/api/momapp/admin/login'
res = requests.post(url, data=json.dumps(params), headers=header)
t1 = res.json()
token = t1['token']
# def on_start(self): #进行初始化的工作,每个Locust用户开始做的第一件事
@task(5) #通过@task()装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被虚拟用户执行的概率越高,默认为1
def index(self):
payload = {
"token": self.token,
"pageIndex": 1,
"pageSize": 20,
"keyWord": ""
}
print(payload)
with self.client.post("/api/momapp/admin/role-get-list",data=json.dumps(payload),headers=self.header) as response:
if response.status_code == 200:
response.success()
else:
response.failure()
@task(1)
def about(self):
payload = {
"token": self.token,
"pageIndex": 1,
"pageSize": 10,
"keyWord": ""
}
with self.client.post("/api/momapp/basis/badmanager-get-list",data=json.dumps(payload),headers=self.header) as response:
if response.status_code == 200:
response.success()
else:
response.failure()
# 这里一定要用self.client.post()而不是用requests.post
class WebsiteUser(HttpUser):
host = "https://xxx" #被测系统的host,在终端中启动locust时没有指定--host参数时才会用到
#task_set = WebsiteTasks #TaskSet类,该类定义用户任务信息,必填。这里就是:WebsiteTasks类名,因为该类继承TaskSet;
tasks = [WebsiteTasks] #这里就是:WebsiteTasks类名,因为该类继承TaskSet
min_wait = 5000 #每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定默认间隔时间固定为1秒
max_wait = 15000
Locust启动: locust -f locustfile.py
接下来,通过浏览器访问localhost:8089,就可以看到locust页面。如下图:
Number of users to simulate:设置模拟用户数
Hatch rate(users spawned/second):每秒产生(启动)的虚拟用户数
Host:就是要压测的url
输入模拟用户数和每秒产生的虚拟用户数,单击Start swarming按钮,开始运行性能测试,这个是通过浏览器测试的形式,可以通过测试场景设计的时间长度运行
也可以手动调整 虚拟用户数和每秒启动用户数,点击成功后弹窗:
压力测试时间足够后,需要手动点击STOP按钮,结束压力测试,状态变成STOPPED
1、Type:请求的类型,例如GET/POST
2、Name:请求的路径
3、Requests:当前已完成的请求数量
4、Fails:当前失败的请求数量
5、Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位毫秒
6、90%ile:根据正态分布,90%的响应时间在正态分布平均值下方,即小于这个值,
7、99%ile:根据正态分布,99%的响应时间在正态分布平均值下方,即小于这个值,
8、Average:平均值,单位毫秒,所有请求的平均响应时间
9、Min:最小响应时间,单位毫秒
10、Max:最大响应时间,单位毫秒
11、Average Size:平均每个请求的数据量,单位为字节
12、Current RPS(requests per second):每秒钟处理请求的数量,即RPS
13、Current Failures/s:当前每秒失败的请求数量
Failures里的图表(因为压测过程中没有报错,所以Failures里为空):
Download Data里的图表,如下图:
Download Data里有4个,3个CSV文件和1个报告,可以下载到本地查看
如果需要收集更多压测数据则需要借助一些其他的性能监测工具:
数据监测工具推荐
(1)如果公司有搭建监测系统,可请运维协助在平台查看即可,比如promethus+Grafana;
(2)linux检测工具Nmon;
(3)windows自带perfmon;
(4)使用python的psuil库自定义检测频率与指标参数,需要对数据单独进行处理;