Programming with JMeter-- Initialization

学 习了使用JMeterEngine简单的运行测试之后,不着急马上看内部的实现,先了解一下在启动JMeterEngine之前所做的一些初始化工作,这 个对于正确的代码启动JMeterEngine很有必要。下面是启动JMeterEngine之前的初始化流程简要描述:

1)   Parse commandLine,将命令行参数、以及一些内置的帮助信息封存在CLArgsParser实例中
2) Check parser中的error,若有则退出。
3) 根据parser中解析的信息,JMeterUtils开始初始化properties
   3.1 commandLine中有类似 -p user.properties参数,就加载;否则加载$Jmeter_home/bin/jmeter.properties
   3.2  commandLine中有类似-j jmeter.log参数,作为一条属性设置给JMeterUtils
   3.3  JMeterUtils.initLogging()/JMeterUtils.initLocale()
   3.4  JMeterUtils.setJMeterHome(…)
   3.5  若之前加载的properties文件中有system.properties/user.properties则加载之
   3.6  最后在jmeterProps中加入version信息

4)  若有search_paths、user.classpath信息就添加至classpath(NewDriver)
5)  为JMeterUtil设置时间信息,START.MS/START.YMD/START.HMS
6)  加载jmx测试文件生产一个HashTree,若指定了report文件(-l xxx.jtl)则创建一个ResultCollector挂到tree中,用来将测试结果写入jtl报告
7)  最后:创建一个StandardJMeterEngine,运行,结束。

        上面流程:

        1、2 步可以忽略,因为我编码来跑测试的话根本就可不用参与,也无需解析。

        步骤 3, 也是最重要的JMeterUtils类,该类有很多静态的属性,运行时所有必要的参数都会在这里维护起来。我们既然要将JMeter集成到项目,必要不能 对JMeter的安装包有所依赖,所以根据上面流程第3)步,我们必须要提供一个XXX.properties给JMeterUtils加载,可以参 考$Jmeter_home/bin/jmeter.properties或者$Jmeter_home/bin/user.properties,有必 要的话还可以设置log文件(这个可以作为一条属性加在XXX.properties里即可),这样代码可以照抄:

JMeterUtils.loadJMeterProperties(userProperties);
JMeterUtils.initLogging(); 
JMeterUtils.initLocale(); 
/**
  *这个可以作为属性放在userProperties文件里
  *JMeterUtils.setProperty(LoggingManager.LOG_FILE,jmlogfile);
  */

     当然,不要忘记设置JMETER  Home:JMeterUtils.setJMeterHome("")

这里设置""即可,否则如果在用SaveService进行xstream处理的时候,会报错,因为SaveService默认会去加载$Jmeter_home/bin /saveservice.properties文件,不做任何设置的话$Jmeter_home = null。设置了空不会报NPE,但是也不正确,我们还需要提供一个saveservice.properties文件,并将该文件路径由saveservice_properties参数指定:

JMeterUtils.setProperty("saveservice_properties", saveProperties);

步骤 4也可忽略,他主要是把JMeter安装目录相关的classpath加到NewDriver中,而我们不用该类

步骤 5 照抄:

long now=System.currentTimeMillis();
        JMeterUtils.setProperty("START.MS",Long.toString(now));// $NON-NLS-1$
        Date today=new Date(now); // so it agrees with above
        // TODO perhaps should share code with __time() function for this...
        JMeterUtils.setProperty("START.YMD",new SimpleDateFormat("yyyyMMdd").format(today));// $NON-NLS-1$ $NON-NLS-2$
        JMeterUtils.setProperty("START.HMS",new SimpleDateFormat("HHmmss").format(today));// $NON-NLS-1$ $NON-NLS-2$

最后步骤 6,我完全可以将该步骤在手动构建HashTree的时候完成,详见前面博文的HashTreeTestMock的代码。因为步骤六,本质是根据指定的jtl文件实例化一个ResultCollector并挂到HashTree中来实现JTL报告的生成。我完全可以在自己构建HashTree时提前将ResultCollector根据自己需要的jtl路径创建并挂到HashTree中。

相关推荐