Jmeter二次开发流程拆解与环境初始化工具类封装
Jmeter二次开发流程拆解与环境初始化工具类封装
前言
从之前几集里,我们完成了测试用例接口与测试模块接口的开发以及Jmeter二次开发的Demo。
这一集我们将会正式对Jmeter进行二次开发。
Jmeter二次开发流程拆解
那么在开发之前,我们要去对Jmeter二次开发进行步骤的拆解与分析。
那么还是先来继续看一下之前的Demo代码。
public class TestStress {
@Test
public 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那一集我们也梳理过,我们的四大步骤如下:
- 环境初始化
- 配置脚本
- 结果集配置
- 执行测试用例
其中,环境初始化,表示设置Jmeter运行环境。配置脚本,即通过各种方式加载Jmeter脚本文件。
结果集配置,即配置结果集,收集测试过程产生的数据。执行测试用例,即启动线程组,采样器的执行,监听器和后处理。
JmeterEngine模块封装
需求
JmeterEngine支持两种测试计划录入
- 本地上传JMX脚本
- 在线创建测试计划
JmeterEngine支持两种执行压测,对外提供HTTP接口。
- 本地JMX执行
- 在线创建测试计划执行
封装环境初始化工具类
看完需求,我们要从Jmeter二次开发的流程中去开发我们的工具类,这样更利于后续代码的开发,请看下图。
从这图中,我们也能大致想出有哪些工具类是需要进行开发的。
我们大致需要完成以下几个接口:
- 获取Jmeter home路径
- 获取Jmeter bin目录
- 初始化Jmeter配置
- 获取JmeterEngine
getJmeterHome
public static String getJmeterHome(){ try{ return StressTestUtil.class.getClassLoader().getResource("jmeter").getPath(); }catch (Exception e){ throw new RuntimeException("获取jmeter路径失败"); } }获取Jmeter的home目录,这里的Jmeter的home目录是临时的,我把它放在了resources底下。
getJmeterHomeBin
public static String getJmeterHomeBin(){ return getJmeterHome() + File.separator + "bin"; }这个会更简单,因为Bin目录在Home目录的底下。
initJmeterProperties
public static void initJmeterProperties(){ String jmeterHome = getJmeterHome(); String jmeterHomeBin = getJmeterHomeBin(); //加载jmeter的配置文件 JMeterUtils.loadProperties(jmeterHomeBin + File.separator + "jmeter.properties"); //设置jmeter的安装目录 JMeterUtils.setJMeterHome(jmeterHome); //避免中文响应乱码 JMeterUtils.setProperty("sampleresult.default.encoding","UTF-8"); //初始化本地环境 JMeterUtils.initLocale(); }这里初始化Jmeter的配置。
getJmeterEngine
public static StandardJMeterEngine getJmeterEngine(){ //先初始化配置 initJmeterProperties(); return new StandardJMeterEngine(); }这个就是获取一个JmeterEngine,记得要先初始化哦~
完整代码
public class StressTestUtil { /** * 获取jmeterhome路径,临时路径 * @return */ public static String getJmeterHome(){ try{ return StressTestUtil.class.getClassLoader().getResource("jmeter").getPath(); }catch (Exception e){ throw new RuntimeException("获取jmeter路径失败"); } } /** * 获取jmeter bin目录 * @return */ public static String getJmeterHomeBin(){ return getJmeterHome() + File.separator + "bin"; } /** * 初始化jmeter配置 */ public static void initJmeterProperties(){ String jmeterHome = getJmeterHome(); String jmeterHomeBin = getJmeterHomeBin(); //加载jmeter的配置文件 JMeterUtils.loadProperties(jmeterHomeBin + File.separator + "jmeter.properties"); //设置jmeter的安装目录 JMeterUtils.setJMeterHome(jmeterHome); //避免中文响应乱码 JMeterUtils.setProperty("sampleresult.default.encoding","UTF-8"); //初始化本地环境 JMeterUtils.initLocale(); } public static StandardJMeterEngine getJmeterEngine(){ //先初始化配置 initJmeterProperties(); return new StandardJMeterEngine(); } }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

