Jmeter二次开发流程拆解与环境初始化工具类封装

Jmeter二次开发流程拆解与环境初始化工具类封装

前言

从之前几集里,我们完成了测试用例接口与测试模块接口的开发以及Jmeter二次开发的Demo。

这一集我们将会正式对Jmeter进行二次开发。

Jmeter二次开发流程拆解

那么在开发之前,我们要去对Jmeter二次开发进行步骤的拆解与分析。

那么还是先来继续看一下之前的Demo代码。

java 复制代码
 
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那一集我们也梳理过,我们的四大步骤如下:

  1. 环境初始化
  2. 配置脚本
  3. 结果集配置
  4. 执行测试用例

其中,环境初始化,表示设置Jmeter运行环境。配置脚本,即通过各种方式加载Jmeter脚本文件。

结果集配置,即配置结果集,收集测试过程产生的数据。执行测试用例,即启动线程组,采样器的执行,监听器和后处理。

JmeterEngine模块封装

需求

JmeterEngine支持两种测试计划录入

  • 本地上传JMX脚本
  • 在线创建测试计划

JmeterEngine支持两种执行压测,对外提供HTTP接口。

  • 本地JMX执行
  • 在线创建测试计划执行

封装环境初始化工具类

看完需求,我们要从Jmeter二次开发的流程中去开发我们的工具类,这样更利于后续代码的开发,请看下图。

从这图中,我们也能大致想出有哪些工具类是需要进行开发的。

我们大致需要完成以下几个接口:

  • 获取Jmeter home路径
  • 获取Jmeter bin目录
  • 初始化Jmeter配置
  • 获取JmeterEngine
getJmeterHome
java 复制代码
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
java 复制代码
public static String getJmeterHomeBin(){
        return getJmeterHome() + File.separator + "bin";
    }

这个会更简单,因为Bin目录在Home目录的底下。

initJmeterProperties
java 复制代码
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
java 复制代码
public static StandardJMeterEngine getJmeterEngine(){
        //先初始化配置
        initJmeterProperties();
        return new StandardJMeterEngine();
    }

这个就是获取一个JmeterEngine,记得要先初始化哦~

完整代码
java 复制代码
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();
    }

}
相关推荐
楚兴3 分钟前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
我会一直在的4 分钟前
Jmeter的基础使用
功能测试·jmeter·压力测试
惊讶的猫9 分钟前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
JavaGuide12 分钟前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
不爱缺氧i17 分钟前
完全卸载MariaDB
数据库·mariadb
吃虫子的人17 分钟前
记录使用Arthas修改线上源码重新加载的一次过程
java·arthas
纤纡.24 分钟前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
Java编程爱好者27 分钟前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
jiunian_cn38 分钟前
【Redis】渐进式遍历
数据库·redis·缓存