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

}
相关推荐
shiming887913 分钟前
C/C++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
前端白袍13 分钟前
C语言:C语言实现对MySQL数据库表增删改查功能
c语言·数据库·mysql
桃园码工15 分钟前
第一章:Go 语言概述 2.安装和配置 Go 开发环境 --Go 语言轻松入门
开发语言·后端·golang
Elastic 中国社区官方博客17 分钟前
Elasticsearch:Retrievers 介绍
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
互联网杂货铺23 分钟前
Postman定义公共函数
自动化测试·软件测试·测试工具·职场和发展·接口测试·压力测试·postman
robin_suli28 分钟前
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
java·开发语言·多线程·哈希表
蓝桉柒731 分钟前
安装数据库客户端工具
数据库
NiNg_1_23433 分钟前
Java中的多线程
java·开发语言
丁总学Java40 分钟前
nohup java -jar supporterSys.jar --spring.profiles.active=prod &
java·spring·jar
呆呆小雅41 分钟前
C# 结构体
android·java·c#