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();
    }

}
相关推荐
齐 飞20 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空21 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅25 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
狂放不羁霸28 分钟前
idea | 搭建 SpringBoot 项目之配置 Maven
spring boot·maven·intellij-idea
wowocpp28 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
九圣残炎29 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge31 分钟前
Netty篇(入门编程)
java·linux·服务器
LunarCod37 分钟前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq271 小时前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql