栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Locust】2.5以上新版本locust使用入门,附带脚本模板,复制即用。

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Locust】2.5以上新版本locust使用入门,附带脚本模板,复制即用。

介绍
Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。使用的‘协程’方式,能够单机提供相对较大并发,并且存在可视化图形界面、也有无图形界面、分布式等多种运行方式。以下内容针对最新版本的locust讲解入门。

locust官网地址:https://www.locust.io/

安装
如果您还没有,请安装 Python 3.6 或更高版本。

安装蝗虫:
pip3 install locust

验证您的安装:
locust -V
locust 2.8.6

脚本模板
下面提供简单易用的初学者模板,附带详细注释。

from locust import HttpUser, task, between, constant
import os
import webbrowser

class QuickstartUser(HttpUser):
    # between模拟同一个用户前后操作的等待时间随机(1-5秒)
    wait_time = between(1, 5)
    # constant固定用户前后操作时间为5秒
    # wait_time = constant(5)
    
    """压力脚本模板开始"""
    @task(3)  # 需要压测的接口都需要加task,后面的数据为权重,默认权重1
    def function1(self):
      
        # 请求数据
        data = {"request": "{'serviceId':'report.getTest'}", "messageType": "json"}
        # 请求地址
        refresh_url = ":8157/datacent/unity/queryForJson//"
        # 请求头
        headers = {'Content-Type': "application/x-www-form-urlencoded;charset=UTF-8", "apiKey": "HIS5", "operator": "1"}

        # 开始模拟请求,“catch_response=True”为断言标记支持,如果不加,断言标记报错
        with self.client.post(url=refresh_url, data=data, headers=headers, verify=False,
                              catch_response=True) as refresh_res:
            # 请求结束进入断言,断言方式与requests请求断言完全相同,根据需要编写。
            if refresh_res.json()["code"] == "00000":
                # 断言成功,标记成功
                refresh_res.success()
            else:
                # 断言成功,标记失败
                refresh_res.failure("select_1_from_dual失败")
    """压力脚本模板结束"""

    def on_start(self):
        # 点击开始压测时,所有用户都会去运行一次,如:用做模拟登录,采用self.client模拟登录接口
        print("开始压测")

    def on_stop(self):
        # 点击stop时,所有用户都会去运行一次。
        print("结束压测结束")

if __name__ == '__main__':
    # 控制浏览器打开locust页面
    webbrowser.open_new_tab('http://localhost:8089')
    # 控制cmd执行locust,“locust_2022_2_12.py”为需要运行py脚本名字,“http://192.168.3.194”为压测服务器地址
    os.system("locust -f locust_2022_2_12.py --host=http://192.168.3.194 ")

有了这个模板,只需要不断的复制压力脚本模板,替换data、url、header即可进行随心所欲压力测试。

图形界面
脚本运行之后,会出现如下页面(如果没有可以刷新试试):

Number of users :压力测试的用户总量
Spawn rate:每秒增加的用户量,从0开始增加直到用户总量数停止。
Host:被测接口的域名或ip端口地址(带http://)

下面实例实测:

输入总用户50,每秒增加5用户,点击开始运行

图标显示当前接口的,请求量,失败数,请求响应中值,平均值等。
RPS(也叫TPS):每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。

用户图:展示从0开始,每秒增加5人,直到总数50,不再增加。

tps-异常图:展示,随着用户的增加,tps变化和接口异常数。一般只有压力超过服务器性能才会报错。

响应时间图:展示接口从开始压测,到稳定实时的响应时间,随着压力增加,一般会升高。

进阶:

1、定义步长压力,实现负载测试

–step-load在新版已经去除,可以采用StepLoadShape替换操作,只需要在脚本内部添加代码如下

class StepLoadShape(LoadTestShape):
    """
    A step load shape
    Keyword arguments:
        step_time -- 每步运行时间
        step_load -- 每步运行的总人数
        spawn_rate -- 用户每秒增加人数
        time_limit -- 运行总时间
    """

    step_time = 10
    step_load = 10
    spawn_rate = 10
    time_limit = 60

    def tick(self):
        run_time = self.get_run_time()

        if run_time > self.time_limit:
            return None

        current_step = math.floor(run_time / self.step_time) + 1
        return (current_step * self.step_load, self.spawn_rate)

上述代码,通过修改数值,可以实现规定 20用户运行5分钟,增加到40用户再运行5分钟的流程,轻松实现负载测试。官方实例:添加链接描述

2、分布式运行:

由于机子影响,有些电脑所能提供的压力会有峰值,如果需要更高的压力数,可以执行分布式运行,这边不做演示。可查看添加链接描述

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号