介绍
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 webbrowserclass QuickstartUser(HttpUser):# between模拟同一个用户前后操作的等待时间随机(1-5秒)wait_time = between(1, 5)# constant固定用户前后操作时间为5秒# wait_time = constant(5)"""压力脚本模板开始"""@task(3)  # 需要压测的接口都需要加task,后面的数据为权重,默认权重1def 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 shapeKeyword arguments:step_time -- 每步运行时间step_load -- 每步运行的总人数spawn_rate -- 用户每秒增加人数time_limit -- 运行总时间"""step_time = 10step_load = 10spawn_rate = 10time_limit = 60def tick(self):run_time = self.get_run_time()if run_time > self.time_limit:return Nonecurrent_step = math.floor(run_time / self.step_time) + 1return (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的使用记录教程,可能存在错误的地方,可以评论区留言指正。谢谢!

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

  1. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

  2. PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及

    PolarDB-X 2.1 新版本发布 让"MySQL 原生分布式"触手可及 --黄贵(曲山)阿里云数据首席架构师 了解更多PolarDB-X 内容: https://develo ...

  3. Spring Cloud入门-Config分布式配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Spring Cloud Config 简介 在Git仓库中准备配置信息 配置仓库目录结构 master分支下的配置信息 dev分支下的配置信息 ...

  4. 《童虎学习笔记》5分钟入门PG分布式集群Citus

    本专栏全部文章 https://blog.csdn.net/tonghu_note/category_11713514.html 总目录 https://blog.csdn.net/tonghu_no ...

  5. ECMall2.x模板制作入门系列之2(模板标签/语法)

    ECMall2.x模板制作入门系列之2(模板标签/语法)今天给大家带来一个模板语法的教程.希望能为ECMall模板制作者提供一份参考资料.如有问题.建议和意见,欢迎提出.在ECMall模板中,用&qu ...

  6. Android 系统(273)---分布式Redis主备复制

    分布式Redis主备复制 主备复制流程 断点续传 当数据落在不同节点上时,如何保证数据节点之间的一致性是非常关键的.Redis采用主备复制的方式保证一致性,所有节点中,只有一个节点为主节点(maste ...

  7. Ansible Tower - 使用入门 4 - 用 Workflow 执行模板

    Ansible Tower 入门 1 - 配置主机清单和访问凭证 Ansible Tower 入门 2 - 通过模板运行 Git 上的 Playbook 和 Role Ansible Tower 入门 ...

  8. Locust系列-Locust入门

    一 简介: 1.locust作为一款性能测试工具,没有单独的ui界面,可以说是python下的一些库的集成 locust完全基于python作为编程语言,采用pure python描述测试脚本,其中的 ...

  9. Locust学习--Locust远程部署要点

    [简介] Locust是一个基于Python(Python 2.6+,不支持Python 3)的支持分布式的压力测试工具,能够测试系统的并发处理能力,可以用来测试Web服务或者其他业务.在测试过程中, ...

最新文章

  1. idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
  2. ftp服务器 vsftpd搭建和配置以及虚拟用户的设置
  3. java ==和=_Java ==和equals()的区别
  4. 嵌入式数据库 HSQLDB
  5. 哪里有2003系统服务器,服务器2003系统
  6. 以太坊核心开发者计划为2.0制定“最小化合并”方案
  7. python学爬虫还是人工_本人初二生,学习Python爬虫,要不要继续深入学习啊?
  8. PageAdmin网站建设教程:仿58同城站群系统实现不同地区Ip跳转不同分站
  9. arXiv 上传文章过程
  10. 【强化学习】 Nature DQN算法与莫烦代码重现(tensorflow)
  11. 软件工程 - 个人博客系统 - 可行性分析与需求分析文档
  12. 字节跳动上班有多累?
  13. [原]最初的梦想---关于野猪和家猪
  14. 关于Word的累加符号上下标变右标的解决办法
  15. 美眉都是可爱的…… (美图)
  16. 压力传感器的四个初始误差
  17. 培训python机构排名
  18. Android手机投屏
  19. 商务英语大连英语培训百家外语商务英语口语情景对话必备
  20. 机顶盒demux的流程

热门文章

  1. php下载视频文件怎么打开,后缀名为php的视频文件用什么播放器?
  2. 你的Java代码对JIT编译友好么?(转)
  3. Veeam拍了拍你,云数据管理从现在起步
  4. meng-科学计算包-numpy
  5. Book Reading
  6. 北大AI公开课第三课--视觉计算变革与挑战by Face++孙剑
  7. pandas to_excel如何突破65535的长度限制?
  8. java.io.ioexception: 磁盘空间不足_System.IO.IOException: 磁盘空间不足
  9. SimpleDateFormat的线程安全问题与解决
  10. WY C语言入门(5)