性能测试:Locust使用介绍(五)

news2024/11/16 9:39:30

事件钩子

Locust附带了许多事件钩子,可用于以不同的方式扩展Locust。

例如,以下是如何设置一个事件监听器,该监听器将在请求完成后触发:

from locust import events

@events.request.add_listener
def my_request_handler(request_type, name, response_time, response_length, response,
                       context, exception, start_time, url, **kwargs):
    if exception:
        print(f"Request to {name} failed with exception {exception}")
    else:
        print(f"Successfully made a request to: {name}")
        print(f"The response was {response.text}")

[!NOTE]

在上面的示例中,通配符关键字参数(**kwargs)将为空,因为我们正在处理所有参数,但如果在Locust的未来版本中添加新参数,它可以防止代码中断。

此外,完全有可能实现一个不为此事件提供所有参数的客户端。例如,非HTTP协议甚至可能没有url或响应对象的概念。从侦听器函数定义中删除任何此类缺失的字段或使用默认参数。

在分布式模式下运行locust时,在运行测试之前在工作节点上进行一些设置可能会很有用。您可以通过检查节点运行器的类型来检查以确保您没有在主节点上运行:

from locust import events
from locust.runners import MasterRunner

@events.test_start.add_listener
def on_test_start(environment, **kwargs):
    if not isinstance(environment.runner, MasterRunner):
        print("Beginning test setup")
    else:
        print("Started test from Master node")

@events.test_stop.add_listener
def on_test_stop(environment, **kwargs):
    if not isinstance(environment.runner, MasterRunner):
        print("Cleaning up test data")
    else:
        print("Stopped test from Master node")

请求上下文

请求事件有一个上下文参数,使您能够传递有关请求的数据(如用户名、标签等)。它可以直接在请求方法的调用中设置,也可以通过重写User.context()方法在用户级别设置。

请求方法的上下文:

class MyUser(HttpUser):
    @task
    def t(self):
        self.client.post("/login", json={"username": "foo"})
        self.client.get("/other_request", context={"username": "foo"})

    @events.request.add_listener
    def on_request(context, **kwargs):
        if context:
            print(context["username"])

用户实例的上下文:

class MyUser(HttpUser):
    def context(self):
        return {"username": self.username}

    @task
    def t(self):
        self.username = "foo"
        self.client.post("/login", json={"username": self.username})

    @events.request.add_listener
    def on_request(context, **kwargs):
        print(context["username"])

使用catch_response从响应中的值获取上下文:

with self.client.get("/", catch_response=True) as resp:
    resp.request_meta["context"]["requestId"] = resp.json()["requestId"]

添加Web路由

Locust使用Flask为web UI提供服务,因此很容易将web端点添加到web UI中。通过监听init事件,我们可以检索对Flask应用程序实例的引用,并使用该引用设置新路由:

from locust import events

@events.init.add_listener
def on_locust_init(environment, **kw):
    @environment.web_ui.app.route("/added_page")
    def my_added_page():
        return "Another page"

现在,您应该能够启动locust并浏览http://127.0.0.1:8089/added_page.请注意,它不会自动添加为新选项卡,您需要直接输入URL。

扩展Web UI

作为添加简单web路由的替代方案,您可以使用Flask蓝图和模板不仅可以添加路由,还可以扩展web UI,允许您在内置的Locust统计数据旁边显示自定义数可以大大提高web UI的实用性和可定制性。

扩展web UI的工作示例可以在Locust源代码的示例目录中找到。

extend_modern_web_ui.py:显示每个调用的内容长度表。

web_ui_scache_stats.py:显示每次调用的统计数据。这可以很容易地扩展到其他CDN或缓存代理,并收集其他缓存统计数据,如缓存年龄、控制等…
在这里插入图片描述

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

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

相关文章

通信工程学习:什么是EDFA掺铒光纤放大器

EDFA:掺铒光纤放大器 EDFA,即掺铒光纤放大器(Erbium-Doped Fiber Amplifier),是一种在光纤通信中广泛使用的光放大器件。以下是对EDFA的详细解释: 一、定义与基本原理 EDFA是在石英光纤中掺入少量的稀土元…

fpga系列 HDL:全连接层实现单个神经元PE(组成:FADD+FM)+vivado单模块仿真

vivado单模块仿真 右键模块的tb.v文件-》“Set as Top” -》点击左侧的“Run Simulation” vivado单模块综合 也可将其他模块暂时Disable PE模块单独综合的结果: 单个神经元PE的结构 processingElement.v 该模块计算两个浮点数的乘积,并将乘积与当前结果相加。最…

Django笔记一:搭建Django环境与URL路径访问

博主之前学从Java后端开发,后面获取到读研资格,想着未来转算法岗,初学Python,发现Python还挺有趣的,由于之前所学后端缘故,有点后端情节,想学习一下Django框架(python的web框架&…

Unix时间戳与C语言的time.h库函数

目录 Unix时间戳介绍 UTC/GMT 时间与秒计数器转换代码 time.h库函数 Unix时间戳介绍 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器…

Ajax 揭秘:异步 Web 交互的艺术

Ajax 揭秘:异步 Web 交互的艺术 一 . Ajax 的概述1.1 什么是 Ajax ?1.2 同步和异步的区别1.3 Ajax 的应用场景1.3.1 注册表单的用户名异步校验1.3.2 内容自动补全 二 . Ajax 的交互模型和传统交互模型的区别三 . Ajax 异步请求 axios3.1 axios 介绍3.1.1 使用步骤3…

车辆重识别(关于卷积神经网络一些资料)2024/9/11

关于卷积神经网络的介绍 一,全连接神经网络 1,全连接神经网络的整体结构 X代表左边输入的数据(向量或者矩阵等等),Y代表模型对数据处理之后的结果,中间的节点都可以算作为隐藏层。 2,全连接神经…

【C++二分查找 容斥原理】1201. 丑数 III

本文涉及的基础知识点 C二分查找 容斥原理:组合数学汇总 LeetCode1201. 丑数 III 丑数是可以被 a 或 b 或 c 整除的 正整数 。 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。 示例 1: 输入:n …

读构建可扩展分布式系统:方法与实践03分布式系统要点

1. 通信基础 1.1. 每个分布式系统都包含通过网络进行通信的软件组件 1.2. 硬件 1.2.1. 全球互联网就是一台异构机器,由不同类型的网络通信通道和设备组成,它们每秒将数百万条消息通过网络传送到预定目的地 1.2.2. 对于单个光纤链路,可以提…

使用gzexe保护Kylin Linux Shell脚本安全

使用gzexe保护Kylin Linux Shell脚本安全 1、加密脚本2、解密脚本3、注意事项 💖The Begin💖点点关注,收藏不迷路💖 在Kylin Linux中,若需保护shell脚本内容不被直接查看,可以使用gzexe工具进行加密。 1、…

R语言机器学习算法实战系列(一):XGBoost算法(eXtreme Gradient Boosting)

介绍 XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树(GBDT)的优化算法,它在处理大规模数据集和复杂模型时表现出色,同时在防止过拟合和提高泛化能力方面也有很好的表现。以下是XGBoost算法的原理和应用方向的详细介绍: 算法原理 目标函数:XGBoost的目标…

Android 测试机

要测手机应用,直接挂电脑上跑虚拟机的话,怀疑电脑都要起火了。 eBay 上买了个新的机器,也才 100 美元多点,机器都没有拆过,电池是完全无电的状态。 操作系统是 Android 12 的版本,升级到 Android 14 后&am…

从用户数据到区块链:Facebook如何利用去中心化技术

在数字化时代,用户数据的管理和保护已成为科技公司面临的重大挑战。作为全球最大的社交网络平台之一,Facebook不仅在用户数据的处理上积累了丰富的经验,也在探索如何利用去中心化技术,如区块链,来改进其数据管理和用户…

怎么使用ai 免费生成ppt?这4个工具可以帮忙

随之AI工具的流行,网络上也涌现了一批 AIPPT 工具,可以在办公上帮助我们节省很多制作PPT的时间。通常它们的操作也比较简单,所以适合很多人使用。为了可以帮助大家提高办公效率,我在这里跟大家分享4款可以免费使用的AIPPT制作工具…

STM32——看门狗通俗解析

笔者在学习看门狗的视频后,对看门狗仍然是一知半解,后面在实际应用中发现它是一个很好用的检测或者调试工具。所以总结一下笔者作为初学小白对看门狗的理解。 主函数初始化阶段、循环阶段和复位 众所周知,程序的运行一般是这样的&#xff1…

解决项目启动时报“找不到符号”问题

前言 在Java开发过程中,遇到“找不到符号”的错误是非常常见的现象。这种错误往往意味着编译器无法识别你所引用的某个类、方法或变量。本文旨在提供一套详细的排查和解决思路,帮助开发者快速定位并解决此类问题。 问题描述 “找不到符号”错误通常出…

K8S - Volume - NFS 卷的简介和使用

在之前的文章里已经介绍了 K8S 中两个简单卷类型 hostpath 和 emptydir k8s - Volume 简介和HostPath的使用 K8S - Emptydir - 取代ELK 使用fluentd 构建logging saidcar 但是这两种卷都有同1个限制, 就是依赖于 k8s nodes的空间 如果某个service pod中需要的vol…

2024年职场人士都在用的PDF转换工具大赏

PDF文件已经变得越来越常见了,是不是不知不觉你收到的或者发出去的文件都是这个格式。它可以巩固格式,但是编辑起来还是有一定难度的。这篇文章我来分享一些可以从pdf转换器免费版官网下载的工具。 1.Foxit PDF转换大师 链接一下>>https://www.p…

sqlgun靶场漏洞挖掘

进入首页首先看到一个搜索框,那么我们试一下xss 用script弹了个一 接下来我们尝试一下sql注入 这里我们使用联合查询查到了他的数据库名,那么这里也就存在SQL注入了 这里存在SQL注入那么我们就尝试一下是否可以注入木马来getshell 首先我们扫描目录&…

YOLO介绍—datawhale

速度快:YOLO的设计目标是实现快速的对象检测,它在保持相对高准确度的同时,能够实现高帧率的实时检测。 易于实现:YOLO的架构相对简单,易于理解和实现,这使得它在学术和工业界都得到了广泛的应用。 版本迭…

机器学习(西瓜书)第 14 章 概率图模型

14.1 隐马尔可夫模型 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测。概率模型(probabilistic model)提供了一种描述框架&a…