locust常用类和方法解析

news/2025/11/12 15:52:29/文章来源:https://www.cnblogs.com/yjh1995/p/19214324
from locust import HttpUser, task, between# 相当于模拟一个用户
class WebUser(HttpUser):# 服务器的地址host = 'http://localhost:8000'# 下一个任务执行之前等待的时间,用于模式用户的思考时间wait_time = between(3, 5)  # 这里使用随机 3,5 秒钟# 定义一个测试任务,类似于一个取样器@task(1)def info(self):# 获取用户信息self.client.get('/info/')@task(10)def addresses(self):# 获取用户地址self.client.get('/addresses/')def on_start(self):# 测试之前执行的操作print('用户登录')auth = {'username': 'root', 'password': 'root1234'}self.client.post('/login/', json=auth)def on_stop(self):# 测试结束执行的操作print('用户退出')self.client.delete('/logout/')

locust导入对象说明

  • @task: 标记为事务,不定义数值时默认权重为1,权重比越高执行倍率越大

    • 通过 @task 装饰一个方法,这个方法表示一个用户可能执行的动作,一个用户会有多种动作;
    • 一个用户下一步具体要执行什么动作,是随机的,也就是 locust 会从动作列表中随机选择一个
    • @task 接受一个参数,表示权重,数值越大,这个动作被选中的概率就越高
    • 所有的task不能是异步方法。
  • HttpUser:主要用于做http请求,基于reques进行了封装,定义session,locust 中通过 HttpUser 来表示一个用户

    • client 的 get,post 等方法传递 url 地址时,不需要携带 http://www.example.com 这个前缀,只需要提供路径就行
  • FastHttpUser,高并发请求

  • User,自定义请求

  • host:配置要测试的目标服务器地址,配置后场景事务访问的接口则不需要再添加该地址

  • wait_time:下一个任务执行之前等待的时间,用于模拟用户的思考时间。单位:秒

    • wait_time = between(1, 5) 间隔是1-5秒随机值
    • wait_time = constant(1) 间隔固定1秒
  • on_start: 每用户初始动作,作用等同于pytest、unittest的setup

  • on_stop: 每用户结束动作,作用等同于pytest、unittest的teardown

  • TaskSetSequentialTaskSet,动作集合,请求有先后顺序时继承SequentialTaskSet类,没有先后顺序,可以使用继承TaskSet

    • 在 locust 中我们通过 TaskSet 类来组合多个动作,然后在 HttpUser 对象中引入 taskset ,引入方式是在 tasks 属性列表中,添加 taskset 类。

    • 注意: taskset 相当于一个特殊的动作,如果 locust 进入到 taskset 中执行其中的动作,那么 locust 会一直执行 taskset 中的动作,那么 WebUser 中定义的动作就不会被执行。 需要在 taskset 中调用 self.ingterrupt() 来退出,一般可以定义一个动作,在这个动作中调用 self.interrupt()

import uuidfrom locust import HttpUser, task, between, TaskSet# 注册
class RegistTaskSet(TaskSet):# 用户名是否重复@taskdef username_count(self):username = 'zhangsan'self.client.get(f'/usernames/{username}/count/')# 手机号是否重复@taskdef mobile_count(self):mobile = '13712345678'self.client.get(f'/mobiles/{mobile}/count/')# 获取图形验证码@taskdef image_codes(self):image_code_id = str(uuid.uuid4())self.client.get(f'/image_codes/{image_code_id}/')@taskdef stop(self):print('退出当前动作集合')self.interrupt()# 登录
class UserLoginTaskSet(TaskSet):# 嵌套用户注册tasks = [RegistTaskSet]@taskdef username_login(self):auth = {'username': 'root', 'password': 'root1234'}self.client.post('/login/', json=auth)@taskdef stop(self):print('退出当前动作集合')self.interrupt()# 模拟用户
class WebUser(HttpUser):# 包含用户登录tasks = [UserLoginTaskSet]# 服务器的地址host = 'http://localhost:8000'# 下一个任务执行之前等待的时间,用于模式用户的思考时间wait_time = between(3, 5)  # 这里使用随机 3,5 秒钟@taskdef search(self):# 搜索self.client.get('/search/')

断言

需要给请求参数携带 catch_response=True ,这样请求方法就会返回一个上下文管理器

这个上下文管理器返回的是响应对象,我们通过调用响应对象的 failure(消息) 来标记本次请求失败,

通过 catch_response=True 参数来进行断言。

HTTP客户端中使用调用response.failure()或response.success()

with self.client.get("/", catch_response=True) as response:if response.text != "Success":response.failure("Got wrong response")elif response.elapsed.total_seconds() > 0.5:response.failure("Request took too long")

自定义断言

def success_call(name, recvText, total_time):events.request_success.fire(request_type="[Success]",name=name,response_time=total_time,response_length=len(recvText))def fail_call(name, total_time):events.request_failure.fire(request_type="[Fail]",name=name,response_time=total_time,response_length=0,exception=Exception(),)
  • request_type请求方式,这里为了方便理解,直接使用的[Success][Fail],来区分成功的请求和失败的请求,只有成功或失败的回调被调用后,locust才会对其统计。

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

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

相关文章

locust高级特性详解

事件系统深度应用 全局事件监听 Locust的事件系统就像是一个"消息广播站",可以在特定时机执行自定义逻辑:@events.test_start.add_listener @events.test_stop.add_listener @events.user_error.add_liste…

Aoao Round 2 比赛总结

分数: \(100 + 25 + 20 + 0 = 145\) 好一个神秘 seq 赛。 T1 不难发现,一个符合要求的序列需要是连续的,且其中比 \(b\) 大的数和比 \(b\) 小的数数量相等。 因此,我们可以以 \(b\) 为起点,分别向两侧扫描,把比 …

基于遗传算法的PID控制器参数整定方法详解

基于遗传算法的PID控制器参数整定方法详解一、算法原理与核心流程 1. 遗传算法优化框架2. 关键参数编码染色体结构:采用实数编码直接表示Kp、Ki、Kd参数取值范围: Kp ∈ [0.1, 100], Ki ∈ [0, 50], Kd ∈ [0, 20] …

QT项目复盘:如何在有限资源下把桌面端做成‘高端应用’?

QT项目复盘:如何在有限资源下把桌面端做成‘高端应用’?项目背景:资源困境与“高端”诉求的矛盾 兰亭妙微曾接手某工业数据分析桌面应用开发,核心诉求是“高端化”——既要满足工程师对数据处理的高性能需求,又要…

11.12 联考总结

11.10 联考总结 前三题都很简单,但我二三题都调了较长的时间,很不好。 留给T4的时间不是很多。发现可以分解质因数,转化为网格图上不选相邻格的计数。理论复杂度是 \(O(\sqrt{N}\log_2N\log_3N2^{\log_3N})\) 似乎只…

揭开时序数据库的秘密:为何它是数据存储的未来?

在万物互联的时代,数据正以指数级速度增长。从智能工厂的传感器到金融市场的实时交易,从能源网络的监控到车联网的轨迹追踪,这些场景产生的数据都有一个共同特征——时间戳驱动。传统关系型数据库在处理这类高频、海…

Java中将String字符串转换为算术表达式并计算

在Java中,将字符串表示的算术表达式进行计算,可以借助现有的库,如Apache Commons JEXL或使用Java的内置脚本引擎JSR 223进行。但是,如果要自己解析和计算算术表达式,就需要零起步实现一个表达式解析器。这涉及到对…

按钮固定在底部

按钮固定在底部1 wxml<view class="fixed-bottom-btn"><view class="button" bindtap="goYuding">马上预定</view> </view> 2 wxss/* 固定在底部的按钮容器 *…

locust基础

它采用纯 Python 实现,是一个分布式用户负载测试的工具。 使用基于 Requests 库的客户端发起请求,使编写脚本大大简化; 在模拟并发方面摒弃进程和线程,完全基于时间驱动,采用协程(gevent)提供的非阻塞 IO 和 cor…

基于HSMS通信标准的SECS通讯程序

HSMS(High-Speed SECS Message Services)通信标准的SECS通讯程序开发 结合SEMI E37标准核心规范 一、HSMS协议核心机制 1. 连接模式与状态机模式 角色 关键流程被动模式 设备端(服务端) 监听端口(默认5000)→ 接…

设置fdfs自动启动

fdfs设置服务,且自启动很久以前的fdfs服务一直在跑,只是没有设置为服务,且无自启动。使用deepseek,指导我完成了整个设置,几乎无脑。 1、问deepseek,提示词如下执行ps -ef| grep fdfs显示如下,该如何创建服务?…

完整教程:Redis GEO 模块深度解析:从原理到高可用架构实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

办公楼设计多少钱一平?广州办公楼设计收费标准

办公楼设计费的收费标准因设计公司资质、项目规模、设计复杂程度以及地区差异等因素而有所不同。那么,办公楼设计多少钱一平? 一、办公楼设计多少钱一平 1.普通设计师:按建筑平米收费,设计费用在70-130元/㎡。 2.资深…

macOS 下载汇总 (系统、应用和教程) - macOS Tahoe 26

macOS Tahoe 26, macOS Sequoia 15, macOS Sonoma 14, macOS Ventura 13, macOS Monterey 12, macOS Big Sur 11macOS 下载汇总 (系统、应用和教程) macOS Tahoe 26, macOS Sequoia 15, macOS Sonoma 14, macOS Ventur…

使用page-meta为u-popup的遮罩层添加穿透屏蔽

根节点下添加page-meta <page-meta :page-style="overflow:${showAll ? hidden : visible};"></page-meta>在打开u-popup时将变量showAll 设置为true即可 关闭时记得解开

2025年广州到吉尔吉斯斯坦海运公司权威推荐榜单:广州到吉尔吉斯斯坦运输/广州到吉尔吉斯斯坦双清门到门/广州到吉尔吉斯斯坦双清源头公司精选

在"一带一路"倡议深入发展的背景下,广州作为中国南大门与吉尔吉斯斯坦间的贸易往来日益密切,选择一家可靠的海运公司已成为众多出口企业的关键决策。 本文将基于企业实力、运输网络、清关能力、数字化服务…

AI人力资源管理系统如何让HR的工作更高效、更有判断力

随着人工智能技术的快速发展,企业数字化的重心正从流程自动化转向智能化决策。在这一过程中,人力资源管理系统的角色也在悄然改变。传统HR系统更多承担的是事务管理职能,例如考勤、薪酬、审批和档案维护,它让人力工…