性能测试之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 logger


class 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: ResponseContextManager
            if 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: ResponseContextManager
            if 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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本(Waterdrip Capital)的投资总监——Elaine,作为VC创投课程第5期的嘉宾,在北京时间12月17日(周日)晚上21:00 PM-22:00 PM,届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

设计模式-命令模式

设计模式专栏 模式介绍模式特点应用场景命令模式和代理模式的区别代码示例Java实现命令模式python实现命令模式 命令模式在spring中的应用 模式介绍 命令模式是一种行为设计模式,它将一个请求封装为一个对象,从而让你使用不同的请求把客户端与服务端操作…

Textual Inversion: 一种精调Stable Diffusion模型的方法

引言 最近的文本到图像Stable Diffusion (SD)模型已经证明了使用文本提示合成新颖场景的前所未有的能力。这些文本到图像的模型提供了通过自然语言指导创作的自由。然而,它们的使用受到用户描述特定或独特场景、艺术创作或新物理产品的能力的…

设计模式——中介者模式

引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框, 它由各种控件组成, 例如…

音频I2S

前言 基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。 学习目标:简单了解相关概念、相关协议。 1 概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信…

结构型设计模式(二)装饰器模式 适配器模式

装饰器模式 Decorator 1、什么是装饰器模式 装饰器模式允许通过将对象放入特殊的包装对象中来为原始对象添加新的行为。这种模式是一种结构型模式,因为它通过改变结构来改变被装饰对象的行为。它涉及到一组装饰器类,这些类用来包装具体组件。 2、为什…

带PWM 调光的线性降压 LED 恒流驱动器

一、基本概述 TX6410B是一种带 PWM 调光功能的线性降压 LED 恒流驱动器,仅需外接一个电阻就可以构成一个完整的 LED 恒流驱动电路,调节该外接电阻可调节输出电流,输出电流范围为 10~2000mA。TX6410B内置 30V 50 毫欧 MOS。TX6410B内置过热保…

机器学习 | 决策树 Decision Tree

—— 分而治之,逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例: 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性,是不确定性的一种度量。 熵越大,不确定性越高,…

IDEA2023 + spring cloud 工程热部署设置方法

基于spring cloud 工程进行热部署 &#xff0c;实现每次修改工程源文件&#xff0c;后台自动启动&#xff0c;方便开发测试工作。具体分为5步骤即可&#xff1a; 1、修改工程的pom文件&#xff0c;增加adding devtools 工具包。 <dependency> <groupId>org.s…

olap/clickhouse-编译器优化与向量化

本文主要结合15721和clickhouse源码来聊聊向量化&#xff0c;正好我最近也在用Eigen做算子加速&#xff0c;了解下还是有好处的。 提示编译器 提示编译器而不是复杂化简单的代码 什么时候使用汇编&#xff0c;什么时候使用SIMD&#xff1f;下面有几个基本原则&#xff1a; …

用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式

1、模式标准 模式名称&#xff1a;备忘录模式 模式分类&#xff1a;行为型 模式意图&#xff1a;在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态 结构图&#xff1a; 适用于&#xff1a; …

DMA传输中的中断处理在STM32中的应用

DMA&#xff08;Direct Memory Access&#xff09;是一种在数字系统中进行数据传输的技术&#xff0c;它可以在不依赖CPU的情况下直接从内存中读取或写入数据。在STM32微控制器中&#xff0c;DMA控制器可以与外设进行数据传输&#xff0c;减轻了CPU的负担&#xff0c;提高了数据…

DFT音频还原及降噪实战

傅里叶变换与信息隐写术(二) 声音数据 ​ 声音可以用连续的波形来表示 ​ 声音在计算机中的存储是离散的 ​ 计算机中存储的是声音的几个采样点的数据&#xff0c;1 秒钟采样 5 个点就表示采样频率是 5 Hz&#xff08;每隔 0.25 秒取一个点&#xff0c;注意第 0 秒也取&#…

python:import自定义包或py文件时,pyCharm正常但终端运行提示ModuleNotFoundError: No module named错误

问题 示例项目引用items.py&#xff0c;项目在pycharm开发工具中可以正常运行&#xff0c;但使用终端直接运行会报错ModuleNotFoundError: No module named。如下图。 原因 pycharm开发工具运行正常&#xff0c;说明目录和引用模块是没问题的。问题在于终端的运行环境只搜索文…

链表基础知识(二、双向链表头插、尾插、头删、尾删、查找、删除、插入)

目录 一、双向链表的概念 二、 双向链表的优缺点分析​与对比 2.1双向链表特点&#xff1a; 2.2双链表的优劣&#xff1a; 2.3循环链表的优劣 2.4 顺序表和双向链表的优缺点分析​ 三、带头双向循环链表增删改查实现 3.1SList.c 3.2创建一个新节点、头节点 3.3头插 3.…

手拉手EasyExcel极简实现web上传下载(全栈)

环境介绍 技术栈 springbootmybatis-plusmysqleasyexcel 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性…

华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs

鸿蒙ArkTS 开发欢迎页SplashPage倒计时跳过&#xff0c;可自适应平板和手机&#xff1a; 一、SplashPage.ts import { BreakpointSystem, BreakPointType, Logger, PageConstants, StyleConstants } from ohos/common; import router from ohos.router;Entry Component struct…

数据结构之<树>的介绍

树的基本概念 在数据结构中&#xff0c;树&#xff08;Tree&#xff09;是一种层次结构&#xff0c;由节点和边组成。树的基本概念包括根节点、子节点、父节点、兄弟节点等。节点拥有零个或多个子节点&#xff0c;除了根节点外&#xff0c;每个节点有且仅有一个父节点。树的层…

数据结构-猴子吃桃问题

一、需求分析 有一群猴子摘了一堆桃子&#xff0c;他们每天都吃当前桃子的一半且再多吃一个&#xff0c;到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求&#xff1a; 1)采用数组数据结构实现上述求解&#xff1b; 2)采用链数据结构实现上述…

13、Kafka副本机制详解

Kafka 副本机制详解 1、副本定义2、副本角色3、In-sync Replicas&#xff08;ISR&#xff09;4、Unclean 领导者选举&#xff08;Unclean Leader Election&#xff09; 所谓的副本机制&#xff08;Replication&#xff09;&#xff0c;也可以称之为备份机制&#xff0c;通常是指…