Locust web性能测试实践

news2024/11/28 13:40:45

Locust web性能测试实践

Locust 是一个开源的负载测试工具,使用Python语言实现,其简洁、轻量、高效的并发机制基于Gevent协程,可以实现单机模拟生成较高的并发压力。具有分布式和可扩展的特点,能够帮助你评估系统的性能并找到潜在的瓶颈。

Locust 的主要特点:

  1. 使用 Python 编写测试脚本:你可以用 Python 编写用户行为脚本,定义各种用户操作和请求。
  2. 分布式测试:支持分布式测试,允许在多台机器上同时运行,从而模拟大量的并发用户。
  3. 实时 Web 界面:提供直观的 Web 界面,用于配置测试参数、启动和监控测试。
  4. 可扩展性强:可以通过编写自定义代码来扩展 Locust 的功能,满足不同测试需求。

1. 安装Locust

使用 pip 进行安装:

pip3 install locust -i https://mirrors.aliyun.com/pypi/simple/

查看安装版本:

locust -V

2. web demo应用

使用 Python 的 Flask 框架实现一个简单的web服务器,包含主页 (/) 和关于页 (/about),用于Locust执行测试。

2.1 安装Flask

使用pip安装:

pip3 install flask -i https://mirrors.aliyun.com/pypi/simple/

2.2 创建Flask应用

新建一个名为 app.py 的文件,编写如下代码:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    return jsonify(message="Welcome to the homepage!")

@app.route('/about')
def about():
    return jsonify(message="This is the about page.")

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

2.3 运行 Flask 应用

在终端中运行以下命令启动 Flask 服务器:

python app.py

默认情况下,Flask 服务器会在 http://localhost:5000 运行。你可以通过浏览器访问这个地址,查看主页和关于页是否正常显示。

3. 运行模式

Locust支持单机模式、分布式模式和无头模式。每种模式适用于不同的测试场景。

3.1 单机模式

适用于小规模测试。简单直接,只需在一台机器上运行 Locust。

一个简单的 Locust 测试脚本如下所示:

# locust-test1.py
from locust import HttpUser, TaskSet, task, between

# 定义一个任务类继承TaskSet类
class UserBehavior(TaskSet):
    # @task(1) 是装饰器,声明此方法是一个任务,权重为1。权重不写的话默认为1
    @task(1)
    def index(self):
        self.client.get("/")
    # @task(2) 是装饰器,声明此方法是一个任务,权重为2
    @task(2)
    def about(self):
        self.client.get("/about")

# 定义一个运行类继承HttpUser类
class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = between(1, 5)
    host = "http://localhost:5000"

在这个脚本中,我们定义了一个 UserBehavior 类,其中包含两个任务:访问主页(index)和访问关于页(about)。然后我们定义了一个 WebsiteUser 类,指定用户行为、请求之间的等待时间以及测试的web服务器。

运行 Locust

在终端中运行以下命令启动 Locust:

locust -f locust-test1.py

配置和启动测试

打开浏览器访问 http://localhost:8089,在 Locust 的 Web 界面中设置测试参数,设置并发用户数为50,设置每秒增加的用户数为10,即以多快的速度增加用户。测试host为本机运行的flask服务器,运行时间为60秒。然后启动测试。

在这里插入图片描述

结果结果统计:
在这里插入图片描述

图标性能曲线:
在这里插入图片描述
测试报告下载:
在这里插入图片描述

3.2 分布式模式

适用于大规模测试。支持多台机器协同工作,能够模拟大量并发用户,包括 master 和 worker 节点,worker节点产生负载, master 节点主要负责协调和收集来自多个 worker 节点的数据。

运行方法

  • 启动 master:

    locust -f locust-test1.py --master
    
  • 启动 worker:

    # worker机器同样需要安装locust
    locust -f locust-test1.py --worker --master-host=<master_ip>
    

worker运行后,master侧命令行会有worker已连接的打印,可以看到当前master下面连接的worker数量。

在浏览器中打开 http://<master_ip>:8089,配置测试参数并启动测试:

在这里插入图片描述

3.3 无头模式(Headless Mode)

适用于持续集成(CI)环境或不需要图形界面的场景。可以自动执行测试,并将结果输出到控制台或文件中。

运行方法

使用命令行参数配置和启动测试:

locust -f locust-test1.py --headless -u 100 -r 10 -H http://192.168.0.210:5000 --run-time 1m --csv=results

参数说明

  • --headless:无头模式运行。
  • -u--users:模拟的用户数。
  • -r--spawn-rate:每秒启动的用户数。
  • --run-time:测试运行时间,例如 1m 表示 1 分钟。
  • --csv:将测试结果输出到 CSV 文件。

3.4 总结

  • 单机模式 适用于简单的小规模测试。
  • 分布式模式 适用于大规模测试,通过多个 worker 节点协同工作来模拟大量并发用户。
  • 无头模式 适用于自动化测试和持续集成环境,可以在没有图形界面的情况下运行测试并输出结果。

4. locust运行参数说明

命令行选项环境变量配置文件字段描述说明
-f, --locustfileLOCUST_LOCUSTFILElocustfile要导入的Python模块文件,例如’…/other.py’。默认为locustfile。
-H, --hostLOCUST_HOSThost负载测试主机地址,例如’https://www.baidu.com’。
-u, --usersLOCUST_USERSusers并发用户数。主要与--headless一起使用。您可以在测试期间使用"w"和"W"(增加1或10个用户)以及"s"和"S"(停止1或10个用户)来更改。
-r, --spawn-rateLOCUST_SPAWN_RATEspawn-rate每秒产生用户的速率。主要与--headless一起使用。
--hatch-rateLOCUST_HATCH_RATEhatch-rate启动虚拟用户的速率。
-t, --run-timeLOCUST_RUN_TIMErun-time在指定的时间段后停止测试,例如(300s、20m、3h、1h30m等)。仅与--headless一起使用。默认为永久运行。
--web-hostLOCUST_WEB_HOSTweb-host绑定Web界面的主机。默认为’*'(所有接口)。
--web-port, -PLOCUST_WEB_PORTweb-port运行Web主机的端口地址。默认为8089。
--headlessLOCUST_HEADLESSheadless禁用Web界面,立即开始负载测试。需要指定-u-t
--autostartLOCUST_AUTOSTARTautostart立即开始测试(不禁用Web UI)。使用-u-t控制用户数和运行时间。
--autoquitLOCUST_AUTOQUITautoquit在测试运行完成后 X 秒后完全退出 Locust。仅与--autostart一起使用。默认为保持Locust运行,直到使用 CTRL+C 关闭。
--headfulLOCUST_HEADFULheadful启用Headful模式。
--web-authLOCUST_WEB_AUTHweb-auth使用基本身份验证打开Web界面。格式为username:password。
--tls-certLOCUST_TLS_CERTtls-cert用于HTTPS服务的TLS证书的路径。
--tls-keyLOCUST_TLS_KEYtls-key用于HTTPS服务的TLS私钥的路径。
--masterLOCUST_MODE_MASTERmaster以Master模式运行,用于分布式负载测试。
--master-bind-hostLOCUST_MASTER_BIND_HOSTmaster-bind-hostMaster节点绑定的主机名或IP地址。仅在与--master一起使用。默认为’*'(所有可用接口)。
--master-bind-portLOCUST_MASTER_BIND_PORTmaster-bind-portMaster节点绑定的端口。仅在与--master一起使用。默认为5557。
--expect-workersLOCUST_EXPECT_WORKERSexpect-workers预期的分布式客户端数量。仅在与--headless一起使用时生效。
--expect-workers-max-waitLOCUST_EXPECT_WORKERS_MAX_WAITexpect-workers-max-wait等待Worker连接的最长时间。默认为永远等待。
--workerLOCUST_MODE_WORKERworker以Worker模式运行,用于分布式负载测试。
--master-hostLOCUST_MASTER_NODE_HOSTmaster-hostMaster节点的主机名或IP地址。仅在与--worker一起使用。默认为127.0.0.1。
--master-portLOCUST_MASTER_NODE_PORTmaster-portMaster节点使用的端口。仅在与--worker一起使用。默认为5557。
-T, --tagsLOCUST_TAGStags测试中要包含的标签列表,仅执行具有任何匹配标签的任务。
-E, --exclude-tagsLOCUST_EXCLUDE_TAGSexclude-tags要从测试中排除的标签列表,仅执行没有匹配标签的任务。
--csvLOCUST_CSVcsv将请求统计信息以CSV格式存储到文件中。
--csv-full-historyLOCUST_CSV_FULL_HISTORYcsv-full-history将每个统计信息条目以CSV格式存储到_stats_history.csv文件中。
--print-statsLOCUST_PRINT_STATSprint-stats在控制台中周期性打印统计信息。
--only-summaryLOCUST_ONLY_SUMMARYonly-summary仅打印摘要统计信息。
--reset-statsLOCUST_RESET_STATSreset-stats完成后重置统计信息。在分布式模式下,应在Master和Worker上设置。
--htmlLOCUST_HTMLhtml将HTML报告存储到指定的文件路径。
--skip-log-setupLOCUST_SKIP_LOG_SETUPskip-log-setup禁用Locust的日志记录设置。
--loglevel, -LLOCUST_LOGLEVELloglevel日志级别,选择DEBUG/INFO/WARNING/ERROR/CRITICAL。默认为INFO。
--logfileLOCUST_LOGFILElogfile日志文件的路径。如果未设置,日志将输出到stderr。
--exit-code-on-errorLOCUST_EXIT_CODE_ON_ERRORexit-code-on-error在测试结果包含任何失败或错误时设置退出代码。默认为1。
-s, --stop-timeoutLOCUST_STOP_TIMEOUTstop-timeout退出之前等待模拟用户完成的任务的秒数。仅在运行Locust分布式时设置在主进程上。

有关更多详细信息,包括如何使用文件或环境变量设置选项,请参阅文档:https://docs.locust.io/en/stable/configuration.html

5. 参考

  1. 官方文档:http://docs.locust.io/en/stable/installation.html

  2. Locust性能测试之快速入门: https://www.cnblogs.com/xyztank/articles/16932194.html
    何使用文件或环境变量设置选项,请参阅文档:https://docs.locust.io/en/stable/configuration.html

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

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

相关文章

【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…

ArrayList集合+综合案例

数组与集合的区别 ArrayList 概述 是java编写好的一个类,用于表示一个容器,使用的时候,需要注意指定容器中元素的数据类型;(如果不指定,语法不报错,但是取值的时候不方便)注意事项 使用的时候,写ArrayList<元素的数据类型>的数据类型的时候,带着泛型;使用ArrayList集合…

一文搞定 大语言模型(LLM)微调方法

引言 众所周知&#xff0c;大语言模型(LLM)正在飞速发展&#xff0c;各行业都有了自己的大模型。其中&#xff0c;大模型微调技术在此过程中起到了非常关键的作用&#xff0c;它提升了模型的生成效率和适应性&#xff0c;使其能够在多样化的应用场景中发挥更大的价值。 那么&…

linux如何部署前端项目和安装nginx

要在Linux上部署前端项目并安装Nginx&#xff0c;你可以按照以下步骤操作&#xff1a; 安装Nginx: sudo apt update sudo apt install nginx 启动Nginx服务: sudo systemctl start nginx 确保Nginx服务开机自启: sudo systemctl enable nginx 部署前端项目&#xff0c;假设前…

【scikit-learn入门指南】:机器学习从零开始

1. 简介 scikit-learn是一款用于数据挖掘和数据分析的简单高效的工具&#xff0c;基于NumPy、SciPy和Matplotlib构建。它能够进行各种机器学习任务&#xff0c;如分类、回归和聚类。 2. 安装scikit-learn 在开始使用scikit-learn之前&#xff0c;需要确保已经安装了scikit-le…

物联网模型

1.1 流模型源码 到OneNote Makefile出错:build/output/paho_c_version 先make clean移除bulid/output内的动态库,再make就会看到出错,将build/output的动态库文件命名以 . so结束,再次make就不会出错了。在sudo make install 安装在usr/local/lib中 修改main.c文件之后,…

火车头采集织梦发布模块插件下载及教程

火车头采集网页数据发布到织梦CMS&#xff08;DeDeCMS&#xff09;系统操作步骤如下&#xff1a; 1. 火车头采集织梦DeDeCMS发布模块下载安装 百度网盘&#xff1a;火车头采集织梦CMS发布插件下载地址 提取码&#xff1a;414h 2. 在火车头采集软件导入织梦De…

【深度学习】stable-diffusion-3,SD3生图体验

stabilityai/stable-diffusion-3-medium 代码地址&#xff1a; https://huggingface.co/stabilityai/stable-diffusion-3-medium 可在这里体验&#xff1a; https://huggingface.co/spaces/ameerazam08/SD-3-Medium-GPU

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 生成哈夫曼树(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 生成哈夫曼树(100分) 🌍 评测功能需要订阅专栏后私信联系清…

全面解析OpenStack架构:掌握云计算核心组件!

Web Frontends Horizon 技术原理&#xff1a;Horizon是OpenStack的基于Web的用户界面&#xff0c;利用Django框架开发&#xff0c;提供用户友好的界面来管理和使用OpenStack资源。应用场景&#xff1a;用于管理虚拟机、存储、网络等资源。举例&#xff1a;管理员通过Horizon界面…

响应式德米拉数字内容交易系统素材下载站模板

★模板说明★ 该数字交易系统设计非常完美&#xff0c;两种响应式模式&#xff0c;可打开边栏模式和盒子模式&#xff1b;八种网站颜色&#xff0c;四种风格颜色可供用户自行选择&#xff0c;还可在网站选背景图片&#xff1b;完美的分成系统、充值功能、个人中心等等都以html…

SuperMap iClient3D 11i(2023) SP1 for Cesium 调整

SuperMap iClient3D 11i(2023) SP1 for Cesium 最新版本 下载地址 SuperMap技术资源中心|为您提供全面的在线技术服务 每一次版本升级,都要对代码进行修改调整,都是为了解决功能需求。当然,也为产品做了小白鼠测试,发现bug,优化功能。 由于前端开发使用的是dojo框架,类…

idea自定义注释模板

1、打开配置 setting -> Editor -> Live Template 2、添加TemplateGroup&#xff0c;并在添加的TemplateGroup下加LiveTemplate 3、配置Live Template 内容&#xff1a; **** Description: * $param$* return $return$ * author $user$* date $date$ $time$**/变量…

【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言 在私域知识问答和企业知识工程领域&#xff0c;结合Retrieval-Augmented Generation&#xff08;RAG&#xff09;模型和大型语言模型&#xff08;LLM&#xff09;已成为主流方法。然而&#xff0c;企业中存在着大量的PDF文件&#xff0c;PDF解析的低准确性显著影响了基于…

Docker Nginx

Docker官网 https://www.docker.com/https://www.docker.com/ 删除原先安装的Docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ …

为什么都在避坑抖店?现阶段小白真的很难做起来吗?现状分析

我是王路飞。 如果有想做抖店的&#xff0c;你们可能都发现了一个现象。 那就是现在很多抖店商家都在劝告新手小白&#xff0c;不要入局抖店了&#xff0c;都在劝避坑。 难道现阶段新手小白入局抖音小店&#xff0c;真的很难做起来吗&#xff1f; 我给你们分析下抖店现状&a…

9. 文本三剑客之awk

文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程11.4 行与列11.4.1 取行11.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具&#xff0c;但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具&#xff0c;它能提供一个类编程环…

干部考评系统如何评估干部表现

一、引言 干部考评系统是现代组织管理中不可或缺的一部分&#xff0c;它通过科学、公正、客观的方式对干部的表现进行评估&#xff0c;为干部的选拔、培养、激励和约束提供有力依据。本文旨在探讨干部考评系统如何有效评估干部表现。 二、干部考评系统的构建 明确考评目标&a…

winform 应用程序 添加 wpf控件后影响窗体DPI改变

第一步&#xff1a;添加 应用程序清单文件 app.manifest 第二步&#xff1a;把这段配置 注释放开&#xff0c;第一个配置true 改成false

移动端消息中心,你未必会设计,发一些示例出来看看。

APP消息中心是一个用于管理和展示用户收到的各种消息和通知的功能模块。它在APP中的作用是提供一个集中管理和查看消息的界面&#xff0c;让用户能够方便地查看和处理各种消息。 以下是设计APP消息中心的一些建议&#xff1a; 1. 消息分类&#xff1a; 将消息按照不同的类型进…