欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Programming with JMeter-- Initialization

程序员文章站 2022-03-02 11:53:24
...

学 习了使用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中。