性能测试之Locust(完整版)

官方文档:Locust说明文档

一、Locust简介

1、定义

Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。

2、特点

①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;

②、有一个基于简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;

③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;

④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;

3、locust与jmeter的区别

工具区别
jmeter需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的,意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限
locust通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter

二、安装Locust

1、支持的python版本:2.7、3.4、3.5、3.6;

2、安装locust

①、通过 pip install locust 命令安装;

②、通过为pyzmq、gevent和greenlet安装预先构建的二进制包,然后在这里找到非官方的预制包,下载.whl文件后,使用 pip install name-of-file.whl 命令安装;

检测是否安装成功:

pip show locust

PS:运行大规模测试时,建议在Linux机器上执行此操作,因为gevent在Windows下的性能很差。

三、示例

from locust import TaskSet, task, HttpUser, run_single_user
from locust.clients import ResponseContextManager
from locust.runners import loggerclass Task(TaskSet):@task(1)def query_room_all_user_id(self):# 传递字典数据payload = {"roomId": "101_102_1_3_100001"}path = "/room-assignment/query-room-all-user-id"logger.info(f"Request URL {path}")with self.client.post(path, json=payload, catch_response=True) as res:res: ResponseContextManagerif res.status_code != 200:# 输出请求的完整 URL 和状态码logger.error(f"Request failed. URL: {res.request.url}, Status Code: {res.status_code}")# 输出响应文本logger.error(f"Response Text: {res.text}")# 标记请求为失败res.failure(res.text)@task(2)def query_room_info(self):# 传递字典数据payload = {"appId": "4","roomType": 2,"roomLevel": -1}path = "/room-assignment/query-room-info"logger.info(f"Request URL {path}")with self.client.post(path, json=payload, catch_response=True) as res:res: ResponseContextManagerif res.status_code != 200:# 输出请求的完整 URL 和状态码logger.error(f"Request failed. URL: {res.request.url}, Status Code: {res.status_code}")# 输出响应文本logger.error(f"Response Text: {res.text}")# 标记请求为失败res.failure(res.text)def on_start(self):def on_stop(self):logger.info('goodbye')class test(HttpUser):host = 'http://10.12.13.129:8008'tasks = [Task, ]if __name__ == '__main__':run_single_user(test)

脚本说明:(详细使用请看官方文档)

  • @task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1

四、启动

如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:

 locust -f testscript/locusttest.py --host=http://10.12.13.129:8008

PS:8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可;

五、结果分析、参数说明

1、启动界面

在这里插入图片描述

  • Number of users to simulate:设置模拟的用户总数

  • Hatch rate (users spawned/second):每秒启动的虚拟用户数

  • Start swarming:执行locust脚本

2、测试结果界面

PS:点击STOP可以停止locust脚本运行:

在这里插入图片描述

  • Type:请求类型,即接口的请求方法;
  • Name:请求路径;
  • requests:当前已完成的请求数量;
  • fails:当前失败的数量;
  • Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
  • Average:平均响应时间,单位为毫秒;
  • Min:最小响应时间,单位为毫秒;
  • Max:最大响应时间,单位为毫秒;
  • Content Size:所有请求的数据量,单位为字节;
  • reqs/sec:每秒钟处理请求的数量,即QPS

3、各模块说明

在这里插入图片描述

  • New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
  • Statistics:类似于jmeter中Listen的聚合报告;
  • Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
  • Failures:失败请求的展示界面;
  • Exceptions:异常请求的展示界面;
  • Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

订单管理系统开发经验的总结:优化流程、提升效率的关键实践

前言 一.订单管理系统的架构设计 二.订单系统的详细设计 1.拆分 2.换货 3.发货 4.拦截 5.取消 6.物流回传 三.订单系统的订单状态流转 初始状态 中间状态 异常状态 终态 四.订单系统的关键代码逻辑 五.结语 前言 两年来,整个订单管理系统经过大大小…

序列生成模型(一):序列概率模型

文章目录 前言1. 序列数据2. 序列数据的潜在规律3. 序列概率模型的两个基本问题 一、序列概率模型1. 理论基础序列的概率分解自回归生成模型 2. 序列生成 前言 深度学习在处理序列数据方面取得了巨大的成功,尤其是在自然语言处理领域。序列数据可以是文本、声音、视…

【算法Hot100系列】三数之和

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

人生感悟 | 又是一年,眼看要2024了

哈喽,你好啊,我是雷工! 刚过完大雪节气没两天,气温开始急转直下,走在路上明显感觉冷了许多。看天气预报很多地区已经开始下雪了。 看日历已经12月9号了,12月份,一年的最后一个月,2…

第24关 揭秘K8s部署优化:利用亲和性、反亲和性、污点、容忍和节点选择器的威力

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 学习这些枯燥难懂的知识点,最好的方式就是利用实战内容进行讲解。在第12关 精通K8s下的Ingress-Nginx控制器:生产环境实战配置指南中,我们部署了ingress-n…

01 概述

概述 本套课程是2023年12月17日以后编写的,适用于NodeJS20Vite5Vue3的一套视频课,非常适合零基础入门学习Vue3的同学。 本套视频课的教案会免费发布在CSDN、公众号、知乎,简书、掘金等平台,视频课程则会发布在Bilibi网站。 环境…

如何处置网上的老旧信息优化品牌形象?

网络时代,企业没有秘密,一切信息都可以在互联网上找到蛛丝马迹。新企业创办初期往往面聊网络信息缺失,给客户一种不敢信任的感觉,这个时期小马识途建议企业积极发布企业消息,进行网络优化,快速塑造网络品牌…

别小看Python的【print】函数,这些高级用法你知道吗?

文章目录 引言技巧1:格式化输出示例1:使用%s来插入字符串,使用%d来插入整数示例2:使用字符串的format()方法示例3:使用f-string格式化输出 技巧2:控制输出文本的颜色技巧3:将打印结果重定向至文…

PyVMomi 克隆虚拟机时将磁盘改为Thin模式

需求介绍: 之前已经使用pyvmomi库实现了虚拟机的自动备份,不过由于备份的虚拟机都是较为重要的系统,磁盘都是厚置备模式,终于有一天,备份目标的空间不够了,导致几个虚拟机无法备份。在不想增加磁盘的情况下…

【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 目录 码元 速率和波特 思考1 思考2 思考3 带宽(Bandwidth) 📝总结 码元…

YOLOv8算法改进【NO.95】使用在线卷积重新参数化(OREPA)方法改进C2_f模块

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 第一,创新主干特征提取网络,将整个Backbone改…

Linux+Docker+Gitee+Jenkins自动化部署.NET Core服务

目录 一、安装Jenkins 1、跟新yum包 2、查询镜像 3、拉取镜像 4、创建Jenkins工作目录,并将容器内目录挂载到此目录上 5、启动Jenkins容器 二、Jenkins配置 1、Jenkins安装gitee码云插件 2、创建私人令牌 3、Jenkins添加全局凭据 4、系统配置 三、构建任…

C++之程序生成

一、C的发展史 截止到2023年12月,C已经更新了很多版本,并在每个版本中修复了bug和添加了新的特性,ISO C委员会每三年会对C进行一次更新: C98:于1998年发布,是最早的国际标准化版本。它包含了面向对象编程…

Typescript中Omit数据类型的理解

在 TypeScript 中&#xff0c;Omit 是一个内置的工具类型&#xff0c;它用于从对象类型中排除指定的属性&#xff0c;并返回剩余的属性。 Omit 的语法如下所示&#xff1a; type Omit<T, K> Pick<T, Exclude<keyof T, K>>;其中&#xff0c;T 表示原始类型…

【Java后端】Servlet HTTP协议(学习笔记)

Servlet 一、Servlet概述 Servlet&#xff1a;server applet 服务器的小程序 Servlet是一个定义了Java类被浏览器访问到(tomcat识别)的规则接口 二、注解配置Servlet 创建JavaEE项目&#xff0c;选择Servlet的版本3.0以上&#xff0c;可以不创建web.xml定义一个类&#xf…

D3D12可编程渲染流水线

一、初始化D3D库 启用 DirectX数学库 x86需要启用SSE2指令集&#xff0c;所有平台均需将浮点模型设置为fast。默认为&#xff1a; 精度 (/fp:precise)。 #include <DirectXMath.h> #include <DirectXPackedVector.h> 启用调试模式下的内存泄漏检测 // Enabl…

CCF-CSP真题《202309-5 阻击》思路+ c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-5试题名称&#xff1a;阻击时间限制&#xff1a;2.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 上回提到&#xff0c;西西艾弗岛下方有一个庞大的遗…

Auto.js pro 8.4.1 与 Auto.js pro 9.3.11

已分享出Auto.js Pro8.4.1完美免登录版本 1.在官方基础上支持x86 32位的模拟器运行。Auto.js Pro 8.4.10的官方版本&#xff0c;只有arm64的lib库&#xff0c;不支持雷电模拟器的7.0系统&#xff0c;于是就是找了个v7a的库塞了进去&#xff0c;方便了调试&#xff1b; 2.去除…

【面试】广告优化

a1&#xff1a;点击率公式是什么&#xff1f;点击率低的原因是什么&#xff1f; 点击率点击/曝光&#xff0c;点击率低的原因主要有两点&#xff1a;一是创意不吸引人&#xff1b;二是目标受众不准确/定向过宽不精确&#xff0c;广告曝光给了对产品不感兴趣用户 a2&#xff1a;…

mysql学习记录

insert into table_nameA(字段名) select 字段名 from table_nameA&#xff08;按照一般的select语句格式进行&#xff09; 通过此语句&#xff0c;可以根据需要抓取数据组成新记录落表 存储过程&#xff1a; 创建&#xff1a; CREATE PROCEDURE pro_name&#xff08; IN o…