性能测试【Locust】基本使用介绍

一.前言

Locust是一款易于使用的分布式负载测试工具,基于事件驱动,使用轻量级执行单元(如协程)来实现高并发。

二.基本使用

以下是Locust性能测试使用的一个基础Demo示例,该示例有安装Locust、编写测试脚本、启动测试以及监控测试结果。

1. 安装Locust

首先,你需要在你的机器上安装Locust。最简单的方式是使用pip命令进行安装:

pip install locust

如果你打算在多个进程或机器上分布式运行Locust,建议也安装pyzmq库:

pip install pyzmq

2. 编写测试脚本

编写一个Locust测试脚本。Locust测试脚本通常包含至少两个类:一个继承自TaskSet的类用于定义用户行为,另一个继承自HttpLocust(或Locust,如果你不使用HTTP)的类用于设置用户属性和任务集。

以下是一个简单的Locust测试脚本示例,它模拟了用户访问网站首页和关于页面的行为:

import osfrom locust import task, between, TaskSet, HttpUserclass WebsiteTasks(TaskSet):token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.eyJza2V5IjoiZmQ2MTZiYjJjYTBlMmEwOGM5YTEwNmFlYzViYzY2ZGM0MmYxNmIzNDAyMzg3MzhhNzVhYmIzYjkwZjg0MmI1OSIsIm53X3VpZCI6ImUwZjBjMDZjLTdmMmYtNDRhMi1hZjQzLTU5YmEyYmY1MDU3YiJ9.Ip_iP_ZQwcsuigTTMKxlYVEbdC84oqsNzE-c1lPkcVA"@taskdef query_user_data(self):payload = {"conditions": {"keyword": "","sort": {"name": "create_time","order_by": "desc"},"start_time": "2024-06-01 00:00:00","end_time": "2025-05-26 00:00:00"},"page": 1,"pagesize": 10,"skey": ""}headers = {"Authorization": self.token,# 其他可能的请求头}# 发送POST请求到登录API,并设置name以便在报告中区分self.client.post("http://localhost:8080/user/search",json=payload,headers=headers,name="user")# @task# def query_answer(self):#     payload = {#         "query": "什么是年度?",#         "task_ids": ["ae62cf79-5870-49f0-94ca-6580b94b6e05"],#         "top_k": 3,#         "score_threshold": 0.5,#         "answer_source": ""#     }#     # headers = {#     #     "Authorization": self.token,#     #     # 其他可能的请求头#     # }#     # 发送POST请求到登录API,并设置name以便在报告中区分#     self.client.post("http://localhost:8080/search_answer",#                      json=payload,#                      name="query_answer")# 定义用户类
class WebsiteUser(HttpUser):tasks = [WebsiteTasks]  # 将用户行为关联到用户类wait_time = between(1, 2)  # 设置用户执行任务的等待时间# 注意:
# 1. 每个@task装饰的方法都代表一个用户可能执行的任务。
# 2. self.client是一个HttpSession实例,你可以使用它来发送HTTP请求。
# 3. name参数是可选的,但它对于Locust生成的报告非常有用,因为它允许你区分不同类型的请求。
# 4. weight参数用于调整任务之间的执行比例(默认是1)。# 运行Locust压测
# 1. 保存上述脚本为locustfile.py(或任何你喜欢的名字)。
# 2. 打开命令行或终端,导航到包含该脚本的目录。
# 3. 运行`locust -f locustfile.py`来启动Locust的Web界面。
# 4. 在浏览器中打开Locust的Web界面(默认是http://localhost:8089),设置用户数和孵化率,然后开始压测。

3. 启动Locust

安装并编写好测试脚本后,你可以通过命令行启动Locust。在命令行中,使用以下命令启动Locust的Web界面:

locust -f locustfile.py

这里的-f选项后面跟的是你的测试脚本文件名。启动后,Locust会在本地启动一个Web服务器(默认端口为8089),你可以通过浏览器访问http://127.0.0.1:8089来设置并发用户数、每秒启动的用户数等参数,并启动测试。
在这里插入图片描述

  • Number of users :压力测试的用户总量,如上面的100
  • Spawn rate:每秒增加的用户量,从10开始增加直到用户总量数停止。
  • Host:被测接口的域名或IP端口地址(带http://或者https://)

设置好参数后,点击Start按钮,开始测试,各个页面信息介绍如下。

4. 监控测试结果

在Locust的Web界面中,你可以实时看到测试的统计数据,包括每秒完成的请求数(RPS)、平均响应时间、失败率等。你可以根据这些数据来评估你的系统的性能表现。

在这里插入图片描述
顺便介绍几个概念:

  • PV是指页面被浏览的次数,比如你打开一网页,那么这个网站的PV就算加了一次;
  • TPS是每秒内的事务数,比如执行了DML操作,那么相应的TPS会增加;
  • QPS是指每秒内查询次数,比如执行了SELECT操作,相应的QPS会增加。

Charts分为三个部分,分别是:

  • Total Requests per Second: 展示随着用户的增加,TPS变化数。
  • Response Times(ms): 展示接口从开始压测,到稳定实时的响应时间,随着压力增加,一般会升高。
  • Number of Users: 展示从0开始,每秒增加10人,直到总数100后不再增加。

5. 命令行模式

除了Web界面外,Locust还支持命令行模式,允许你直接在命令行中运行测试并查看结果。例如:

locust -f locustfile.py --no-web -c 10 -r 2 -t 10m

这个命令表示以命令行模式运行测试,设置并发用户数为10,每秒启动2个用户,测试运行时间为10分钟。

三.总结

优势

  • 可编程性:Locust使用Python,这意味着你可以编写Python脚本来定义复杂的用户行为,利用Python的强大库资源。
  • 轻量级且易于安装:Locust是一个相对轻量级的工具,安装过程简单方便。
  • Web界面:提供一个易于使用的web界面用于启动测试、实时查看测试结果和统计信息。
  • 可扩展性:支持分布式测试,你可以很容易地通过增加更多的Slave节点来模拟数十万甚至数百万的并发用户。
  • 实时统计:通过Web UI,Locust能够实时展示请求统计、响应时间图表等数据,使结果分析更为直观。
  • 适用性广:可以用来测试网站、API、数据库等多种服务的性能。

局限性

  • 性能问题:虽然Locust本身是高效的,但它运行Python脚本,这可能不如一些编译语言(如C++或Go)编写的测试工具性能高。
  • 资源消耗:在模拟非常高的并发用户数时,Locust(特别是运行Locust的机器)可能会消耗大量的CPU和内存资源。
  • 学习曲线:对于那些不熟悉Python的用户来说,初学Locust可能会有一定的学习曲线。
  • 对高级负载模式的支持有限:虽然Locust非常灵活,但在一些非常特定的负载测试场景(如具有复杂的用户会话管理或定制的网络协议)中,可能需要进行相当多的自定义编码。
  • 社区和支持:尽管Locust有一个活跃的社区,但与某些更成熟的压力测试工具相比(如Jmeter),其用户基础和可用资源可能较少。

总的来说,Locust是一个功能强大且灵活的负载测试工具,特别适合那些熟悉Python并希望快速构建和执行实时监控负载测试的开发者和测试人员。然而,每个工具都有其优势和局限性,选择合适的工具应基于具体的测试需求和场景。
以上就是Locust性能测试使用的一个基础Demo示例。Locust的强大之处在于它的易用性和高并发能力,使得性能测试变得更加简单和高效。你可以根据自己的需求编写更复杂的测试脚本,以模拟更多的用户行为和场景。希望对你有所帮助!

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

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

相关文章

三方共建 | 网络安全运营中心正式揭牌成立

9月3日,广州迎来了一场网络安全领域的盛事。悦学科技、聚铭网络、微步在线联合打造的7x24小时网络安全运营中心(以下简称“中心”)正式成立,并在现场举行了庄重而热烈的揭牌仪式。众多行业专家、企业代表齐聚一堂,共同…

MPP数据库之SelectDB

SelectDB 是一个高性能、云原生的 MPP(大规模并行处理)数据库,旨在为分析型数据处理场景提供快速、弹性和高效的解决方案。它专为处理大规模结构化和半结构化数据设计,常用于企业级业务分析、实时分析和决策支持。 SelectDB 是在…

实习项目|苍穹外卖|day9

实战作业。 用户端新增功能 1. 查询历史订单 接口设计 返回的是orderorderdetails(那我这里就先查order,再根据order_id查) 分页 pageHelper的使用: //controller相关函数GetMapping("/historyOrders")ApiOperati…

【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】

1.检查应用连接数 以管理员用户 gbase,登录数据库主节点。 接数据库,并执行如下 SQL 语句查看连接数。 SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;2.查看空闲连接 查看空闲(state 字段为”idle”)且长时间没有更…

AI问答-Vue实例属性/实例方法:$refs、$emit、$attrs、$props、$data...

一、本文简介 在Vue.js中,$ 符号通常用于表示Vue实例或组件上的内置属性和方法,这些被称为“实例属性”或“实例方法”。以下是一些常见的以$开头的Vue实例属性和方法 1.1、实例属性 序号实例属性解释1$dataVue实例的数据对象,用于存储组件…

Linux - 探秘/proc/sys/net/ipv4/ip_local_port_range

文章目录 Pre概述默认值及其意义评估需求如何调整临时修改永久修改测试和验证 修改的潜在影响 Pre Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置 计划: 简要解释 /proc/sys/net/ipv4/ip_local_port_range 文件的功能和作用。介绍该文件的默认值及其影响。说明…

ChatGPT: A Simulator Who Passed the Turing Test?

文章目录 引言Introduction:Applications:Discussion:Future Outlook:汉语翻译 引言 本文是一篇英语课前pre,简单介绍了ChatGPT的功能,内容一般,希望能帮到你。🙂 Introduction: Standing at the intersection of natural lan…

Failed building wheel for opencv-python-headless

Failed building wheel for opencv-python-headless 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人…

UiBot教程:实现复杂流程图的高效方法

在自动化测试和RPA(机器人流程自动化)领域,使用UiBot绘制复杂流程图是日常工作中常见的挑战之一。如何在繁杂的逻辑中保持高效?如何实现复杂流程的自动化设计而不迷失于其中?这是许多测试工程师和自动化开发者所面临的…

存储课程学习笔记1_访问scsi磁盘读写测试(struct sg_io_hdr,ioctl,mmap)

创建虚拟机时,可以选择SCSI,STAT,NVME不同类型的磁盘。 0:总结 》了解内核提供的访问scsi的结构和方法 (主要是sg_io_hdr_t 结构体和ioctl函数)。 》需要读scsi协议文档,了解相关指令,只演示了16字节固定…

智启新机,云驱增长 | 华宇亮相2024腾讯全球数字生态大会

9月5日-6日,以“智启新机,云驱增长”为主题的2024腾讯全球数字生态大会在深圳国际会展中心举办。本次大会聚集了多位企业领军人物及行业专家,共同聚焦数字化下的产业新增长,以前沿探索为基石,以行业最佳实践为标杆&…

解密SERP代理:如何提高排名跟踪效率

一、什么是 SERP 代理? SERP代理是指专门用于访问搜索引擎结果页面(SERP)的代理服务器。这些代理服务器能够模拟真实的用户请求,从而避免因频繁查询或位置变化而导致IP被封禁或数据不准确。通过使用SERP代理,您可以获…

java 项目结构 文件说明 潜规则 java入门

java 项目结构 潜规则 java入门 一、controller、service、serviceImpl、Mapper、Xml等文件的作用 下图为java约定俗成的几个文件的作用 二、在项目中的使用情况,由于业务逻辑很简单,所以每个文件中的代码行数都很少 controller.java /*** 资产rim项目…

Java许可政策再变,Oracle JDK 17 免费期将结束!

原文地址:https://www.infoworld.com/article/3478122/get-ready-for-more-java-licensing-changes.html Oracle JDK 17的许可协议将于9月变更回Oracle Technology Network License Agreement,这将迫使用户重新评估他们的使用策略。 有句老话说&#xf…

个人hic分析流程搭建4—compartment模块分析

参考我的上一篇博客https://blog.csdn.net/weixin_62528784/article/details/142132891?spm1001.2014.3001.5502, 在处理完hic上游分析模块之后,接下来就是正式的3层次模块分析了,compartmentTADloop 3大主层次,本篇介绍compart…

Linux 挂载磁盘与开机自动挂载操作指南

Linux 挂载磁盘与开机自动挂载操作指南 文章目录 Linux 挂载磁盘与开机自动挂载操作指南一 挂载磁盘1 查看硬盘信息2 新增数据盘执行分区3 新建分区4 创建一个主分区5 分区编号6 初始磁柱编号7 截止磁柱编号8 查看新建分区信息9 分区结果写入10 新分区同步操作系统11 设置新分区…

如何编译OpenHarmony SDK API

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 startup子系统之syspara_lite系统属性部件 (1) startup子系统之syspara_lite系统属性部件 (2) startup子系…

跟《经济学人》学英文:2024年09月07日这期 What to read about the British economy

What to read about the British economy Britain used to be the world’s richest country. These six books explain how it came to be, and why it is no longer 原文: IN RECENT YEARS the British economy has tended to be in the news for the wrong re…

逆向工程 反编译 C# net core

索引器访问 在您的代码中,您试图使用 configurationRoot.get_Item("AgileConfig:appId") 来访问配置项,但这里存在几个问题: 错误的访问方法:在 .NET 的 IConfigurationRoot 接口中,没有直接名为 get_Item 的…

kkFileView PDF Image Mode Preview BUG

kkFileView PDF & Image Mode Preview BUG lazyload.js officePicture.ftl pdf.ftl kkFileView getCorsFile?urlPath 会触发SSRF漏洞 kkFileView SSRF-CSDN博客 commonHeader.ftl initWaterMark() 修改代码的工作量,主要是先部署项目,解…