Locust初体验

各大主流性能测试工具比对:
在这里插入图片描述

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库自定义检测频率与指标参数,需要对数据单独进行处理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值