locust快速入门--使用locust-plugins保存类似jmeter的csv数据

2024-01-22 09:04

本文主要是介绍locust快速入门--使用locust-plugins保存类似jmeter的csv数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

将locust测试的数据保存为类似jmeter一样的csv文件。

实现目标:

  1. 利用locust-plugins的功能,将数据保存为类似jmeter一样的csv文件
  2. 每次结束测试时不需要退出locust程序,就可以将本次测试的数据进行保存

实现方式:

  1. 安装locust插件库pip install locust-plugins

  2. 引入插件库,使用提供jmeter方法,实现csv文件保存。

    # -*- coding:UTF-8 -*-"""@ProjectName  : pyExamples @FileName     : locust_demo@Description  : 引入插件保存jmeter csv文件的功能。启动locust时会创建保存的文件,终止locust时才会把数据写入文件。如果在一次启动和终止locust期间进行多次测试,会把数据存到一个文件中。@Time         : 2024/1/22 下午11:30@Author       : Qredsun"""
    @events.init.add_listener
    def on_locust_init(environment, **kwargs):environment.listener = jmeter.JmeterListener(env=environment, testplan='test_plan')class UserRun(HttpUser):# wait_time = between(min_wait=0.1, max_wait=0.2)  # 设置task运行间隔wait_time = constant(1)@task  # 装饰器,说明下面是一个任务def getuser_(self):url = 'https://blog.csdn.net/qq_17328759/article/details/135582079'  # 接口请求的URL地址payload = {}with  self.client.get(url, json=payload, catch_response=True) as rsp:if rsp.status_code == 200:rsp.success()else:rsp.failure(f'接口调用失败:{rsp.json()}')
    
  3. 改造为每次测试结束即保存数据。

    1. 利用locust的test_start,对csv文件实现多次创建
    2. 利用locust的test_stop,实现对csv文件数据的写入
    3. 增加了多工作节点的判断,保证对LocalRunner和MasterRunner、WorkerRunner模式的支持
    # -*- coding:UTF-8 -*-"""@ProjectName  : pyExamples @FileName     : locust_demo@Description  : @Time         : 2024/1/22 下午11:30@Author       : Qredsun"""
    import os
    import socket
    import psutil
    import time
    from multiprocessing import Process
    from locust import HttpUser, events, task, between
    from locust import constant
    from locust.env import Environment
    from locust.log import setup_logging
    from logging import getLogger
    from locust.runners import MasterRunner
    from locust.runners import LocalRunner
    from locust.runners import WorkerRunner
    from locust_plugins.listeners import jmetersetup_logging("DEBUG")
    logger = getLogger(__file__)@events.init.add_listener
    def on_locust_init(environment, **kwargs):environment.listener = jmeter.JmeterListener(env=environment, testplan='test_plan')if isinstance(environment.runner, MasterRunner) or isinstance(environment.runner, LocalRunner):environment.listener._create_results_log()environment.listener._write_final_log()os.remove(environment.listener.results_filename)environment.events.quitting.remove_listener(environment.listener._write_final_log)environment.events.worker_report.remove_listener(environment.listener._worker_report)else:environment.events.report_to_master.remove_listener(environment.listener._report_to_master)environment.events.request.remove_listener(environment.listener._request)@events.test_start.add_listener
    def on_test_start(environment, **kwargs):msg = f'开始测试'if isinstance(environment.runner, MasterRunner) or isinstance(environment.runner, LocalRunner):logger.info(msg)# 每次测试时创建一个测试数据存放文件environment.listener.results_filename = time.strftime("test_data_%m_%d_%H_%M_%S.csv")logger.warning(environment.listener.results_filename)environment.listener.results_file = environment.listener._create_results_log()environment.events.worker_report.add_listener(environment.listener._worker_report)else:msg += ' -- work node -- 'logger.info(msg)environment.events.report_to_master.add_listener(environment.listener._report_to_master)environment.events.request.add_listener(environment.listener._request)@events.test_stop.add_listener
    def on_test_stop(environment, **kwargs):msg = f'测试'if isinstance(environment.runner, WorkerRunner):msg += ' -- work node -- 'logger.info(msg)returnif isinstance(environment.runner, LocalRunner):if environment.runner.state == "stopped":environment.listener._write_final_log()logger.info('保存数据至csv文件')else:if environment.runner.state == "stopped" and all(x.state in ["stopped", "ready"] for x in environment.runner.clients.all):environment.listener._write_final_log()logger.info('保存数据至csv文件')logger.info(msg)class UserRun(HttpUser):# wait_time = between(min_wait=0.1, max_wait=0.2)  # 设置task运行间隔wait_time = constant(1)# 每个task运行间隔固定间隔1s@task  # 装饰器,说明下面是一个任务def getuser_(self):url = 'https://blog.csdn.net/qq_17328759/article/details/135582079'  # 接口请求的URL地址payload = {}with  self.client.get(url, json=payload, catch_response=True) as rsp:if rsp.status_code == 200:rsp.success()else:rsp.failure(f'接口调用失败:{rsp.json()}')
    

这篇关于locust快速入门--使用locust-plugins保存类似jmeter的csv数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632506

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令