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

07-21 1028阅读

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

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

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

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

JmeterEngine模块封装

需求

JmeterEngine支持两种测试计划录入

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

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

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

      封装环境初始化工具类

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

      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();
            }
        }
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]