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(); } }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。