Jmeter二次开发Demo
Jmeter二次开发Demo
前言
在上一集,我们已经完成了JMX脚本的分析,大致了解了JMX脚本的基本元素。
那么在这一集,我们将会介绍一下Jmeter二次开发的Demo。
Demo代码
那么话不多说,我们就直接上代码。
public class TestStress {@Testpublic void testJmeterScript()throws Exception{// JMeter路径String jmeterPath = "G:\\Jmeter\\apache-jmeter-5.6.3";// JMeter根目录File jmeterHome = new File(jmeterPath);// JMX文件路径String jmxFilePath = "E:\\XXX\\JMX\\pay_json.jmx";// JMX文件File jmxFile = new File(jmxFilePath);// JMeter配置文件路径File jmeterProperties = new File(jmeterHome.getPath() + File.separator + "bin" + File.separator + "jmeter.properties");// 设置JMeter根目录JMeterUtils.setJMeterHome(jmeterHome.getPath());// 加载JMeter配置文件JMeterUtils.loadJMeterProperties(jmeterProperties.getPath());// JMeter标准引擎StandardJMeterEngine jmeter = new StandardJMeterEngine();// 测试计划树HashTree testPlanTree = new HashTree();// 设置文件服务器的基础脚本路径FileServer.getFileServer().setBaseForScript(jmxFile);// 加载测试计划树 jmx脚本testPlanTree = SaveService.loadTree(jmxFile);// 转换测试计划树JMeter.convertSubTree(testPlanTree, false);// Summariser对象Summariser summer = null;// Summariser名称String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");if (!summariserName.isEmpty()) {// 创建Summariser对象summer = new Summariser(summariserName);}// 结果日志文件名String logFile = "example.csv";// 结果收集器ResultCollector logger = new ResultCollector (summer);logger.setFilename(logFile);// 将结果收集器添加到测试计划树上testPlanTree.add(testPlanTree.getArray()[0], logger);// 配置JMeter引擎jmeter.configure(testPlanTree);// 运行JMeter测试jmeter.run();}
}
上面的代码,有几个小点是需要各位修改一下的,一个是Jmeter的路径,另一个是用于使用到这个Demo的JMX脚本的路径。不过要注意一下路径的分隔符要结合自身的系统来使用,比如说我的操作系统是Windows的,所以分隔符是'\\'。
代码解释
-
初始化JMeter环境:设置JMeter的安装路径和配置文件路径,并加载配置。
-
加载测试计划:指定JMX文件路径,将测试计划加载到JMeter的测试计划树中。
-
配置结果收集器:创建结果收集器对象,设置结果输出文件名,并将其添加到测试计划树中。
-
运行测试:配置JMeter引擎,使用测试计划树运行测试。
具体来说:
- 首先,代码设置了JMeter的根目录和JMX文件的路径。
- 然后,它加载了JMeter的配置文件,并初始化了JMeter引擎和测试计划树。
- 接下来,代码设置了文件服务器的基础脚本路径,并加载了JMX文件到测试计划树中。
- 之后,代码检查了是否需要创建Summariser对象(用于生成测试摘要)。
- 接着,代码创建了一个结果收集器,设置了输出日志的文件名,并将结果收集器添加到了测试计划树中。
- 最后,代码配置了JMeter引擎,并执行了测试。
相关文章:
Jmeter二次开发Demo
Jmeter二次开发Demo 前言 在上一集,我们已经完成了JMX脚本的分析,大致了解了JMX脚本的基本元素。 那么在这一集,我们将会介绍一下Jmeter二次开发的Demo。 Demo代码 那么话不多说,我们就直接上代码。 public class TestStress…...
MongoDB综合实战篇(超容易)
一、题目引入 在MongoDB的gk集合里插入以下数据: 用语句完成如下功能: (1)查询张三同学的成绩信息 (2)查询李四同学的语文成绩 (3)查询没有选化学的同学 (4…...
框架设计MVVM
重点: 1.viewmodel 包含model 2.view包含viewmodel,通过驱动viewmodel去控制model的数据和业务逻辑 // Test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <vector>using namespace std;#p…...
RK3399基础部分
1.RK3399介绍 基础特性: 高达1.8GHz的双核Cortex-A72 四核Cortex-A53高达1.4GHz NPU高达3.0TOPS Mali-T860MP4 GPU 双通道DDR3/DDR3L/LPDDR3/LPDDR4 4K超高清H265/H264/VP9 HDR10/HLG H264编码器 双MIPI CSI和ISP USB Type-CGPU: 图形处理器(英语&…...
linux高级编程(广播与组播)
广播与组播: 广播: 局域网,一个人发所有人都能收(服务器找客户端),(发给路由器的广播地址后后路由器自动给所有人发,可用于服务器找客户端) 只能udp来做 setsocketopt…...
Andriod Stdio新建Kotlin的Jetpack Compose简单项目
1.选择 No Activity 2.选择kotlin 4.右键选择 在目录MyApplication下 New->Compose->Empty Project 出现下面的画面 Finish 完成...
Linux多线程编程-哲学家就餐问题详解与实现(C语言)
在哲学家就餐问题中,假设有五位哲学家围坐在圆桌前,每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源,但进餐需要使用两根筷子(左右两侧各一根)。筷子是共享资源,哲学家们在进行进餐时需要…...
从C向C++18——演讲比赛流程管理系统
一.项目需求 1.比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。每名选手都有对应的编号,如 10001~ 10012比赛方式:分组比赛,每组6个人;第一轮分为两…...
QThread和std::thread
在 Qt 中, 我们经常会用到多线程,这时候就需要纠结是使用 Qt 的 QThread 还是使用 C 标准库的 std::thread。 这里记录一下我自己的理解,先介绍一下 QThread 和 std::thread 的使用方法,对比一下他们的不同,最后说一下…...
LeetCode 算法:组合总和 c++
原题链接🔗:组合总和 难度:中等⭐️⭐️ 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 …...
【两大3D转换SDK对比】HOOPS Exchange VS. CAD Exchanger
在现代工业和工程设计领域,CAD数据转换工具是确保不同软件系统间数据互通的关键环节。HOOPS Exchange和CAD Exchanger是两款备受关注的工具,它们在功能、支持格式、性能和应用场景等方面有着显著差异。 本文将从背景、支持格式、功能和性能、应用场景等…...
Openerstry + lua + redis根据请求参数实现动态路由转发
文章目录 一、需求分析二、准备1、软件安装2、redis-lua封装优化 三、实现1、nginx.conf2、dynamic.lua注意 3、准备两个应用4、访问nginx 四、参数直接传要代理的地址端口 一、需求分析 根据用户访问url的参数,将请求转发到对应指定IP的服务器上。 二、准备 1、…...
数字名片-Pushmall 智能AI数字名片7月更新计划
[数字名片]-商务营销推广助手7月更新计划 数字名片-商务营销推广助手7月更新计划 **2024年 6月完成模块开发优化****实现SaaS框架业务 1、智能名片:创建个人名片、企业名片、商机管理。 2、人脉商圈:附近人脉、就近群脉、好友名片。 3、企微社群&…...
21. Python代码快速查看数组分布
1. 前言 当你已经具备一段可用于快速查看数组分布的Python代码时,你拥有了一项强大的工具来分析和理解你的数据集。这种类型的代码通常会使用可视化库,例如Matplotlib和Seaborn,以直观的方式展示数据分布。这些库允许你创建直方图以观察数据集中的频率分布,以及核密度估计…...
记录些Redis题集(3)
分布式锁 分布式锁是一种用于在分布式系统中实现互斥访问的机制,它可以确保在多个节点、或进程同时访问共享资源。如果没有适当的锁机制,就可能导致数据不一致或并发冲突的问题。 分布式锁需要的介质 需要一个多个微服务节点都能访问的存储介质&#…...
OracleLinux6.9升级UEK内核
方法一: [root@localhost ~]# uname -r 4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# rpm -qa | grep kernel-uek kernel-uek-firmware-4.1.12-61.1.28.el6uek.noarch kernel-uek-4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# yum list kernel-uek Loaded plug…...
React学习笔记03-----手动创建和运行
一、项目创建与运行【手动】 react-scripts集成了webpack、bable、提供测试服务器 1.目录结构 public是静态目录,提供可以供外部直接访问的文件,存放不需要webpack打包的文件,比如静态图片、CSS、JS src存放源码 (1)…...
ubantu22.04安装OceanBase 数据库
1、管理员启动cmd,运行 sudo bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/service/installer.sh)" 2、提示如下代表安装完成 3、修改数据库配置文件的密码 sudo vim /etc/oceanbase.cnf 然后保存退…...
【linux】【深度学习】fairseq框架安装踩坑
直接pip install fairseq发现跑代码时候老是容易崩,所以选择用源码编译安装。 python环境选择3.8以上都行,我选择3.10 首先安装torch, 我选择安装pip install torch1.13.1 torchaudio0.13.1以及cuda 11.7 (具体cuda根据个人显卡进…...
【Python爬虫教程】第7篇-requests模块的cookies保存和使用
文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies 保存cookies是避免每次都登录获取权限,一遍权限是有过期时间的,不需要每次重复登录,可以将cookies保存起来…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
