【Locust】新版本locust使用入门到分布式,附带脚本模板,复制即用。

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

介绍
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、分布式运行:

locust与jmeter不同,jmeter进行压测的时候,会一下子使用到cpu的所有核心,但是locust运行时,只会使用到cpu的一个核心,所以当单次运行无法达到想到的压力值。采用分布式运行,可以充分运用到cpu的所有内核,生成更大负载,也可以直接接入远程机,让负载值飞跃增长。

###当本地机运行分布式。

主程采用master运行。

locust -f locust.py --master --host=http://192.168.13.204

与旧版locust不同,新版不能使用salve,需要采用worker运行负载,如下。

locust -f locust.py --worker

每运行一次,就会多一个负载。(最大负载为cpu核心数)
分布式运行
采用这个分布式运行locust,会用更小的资源达到,更高的压力值。

###远程机子结合运行分布式。

主机负载同上,当运行负载机时,需要指定主机的ip。如下

locust -f locust.py --worker --master-host= 主机ip

结语:
以上是本人locust的使用记录教程,可能存在错误的地方,可以评论区留言指正。谢谢!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值