【Locust】新版本locust使用入门到分布式,附带脚本模板,复制即用。 您所在的位置:网站首页 locust和grasshopper 【Locust】新版本locust使用入门到分布式,附带脚本模板,复制即用。

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

#【Locust】新版本locust使用入门到分布式,附带脚本模板,复制即用。| 来源: 网络整理| 查看: 265

介绍 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的使用记录教程,可能存在错误的地方,可以评论区留言指正。谢谢!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有