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中。