使用FreeMarker模板动态处理JMeter运行脚本

JMeter是一个性能测试的开源框架,它提供了图形界面和非图形界面两种动行方式。最近在研究搭建一个性能测试的平台,希望通过.jmx文件,在非图形界面的linux上运行。.jmx文件通过页面配置。我们平台希望支持Java和Http请求两种方式的性能测试,通过收集性能测试时的QPS, 响应时间,线程数,主机监控等指标来观察应用程序的性能情况。
FreeMarker在百度百科是这样描述的(https://baike.baidu.com/item/freemarker/9489366?fr=aladdin)是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML、网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
在平台中,我们先根据需要创建.jmx模板文件,Java请求的模板如下:



  
    
      
      false
      false
      
        
      
     
      ${UD_CLASSPATH}      
    
    
      
        
        continue
        ${UD_ThreadNum}    
        ${UD_RampUp}   
        ${UD_Steps}   
        ${UD_HoldTime}    
        
        
        M
      
      
        
          ${UD_Delimiter}    
          utf-8
          ${UD_DataFileName}    
          false
          false
          true
          shareMode.all
          false
          ${UD_VariableName}    
        
        
        
          
            
            <#list elementProp as elementProp>
                  
                ${elementProp.UD_ArgName}    
                ${elementProp.UD_ArgValue}   
                =
              
             
            
          
          ${UD_TestClass}       
        
        
        
          ${UD_Timer}   
        
        
        
          
            
              
                graphiteMetricsSender
                org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender
                =
              
              
                graphiteHost
                ${UD_GraphiteHost}    
                =
              
              
                graphitePort
                ${UD_GraphitePort}     
                =
              
              
                rootMetricsPrefix
                ${UD_RootMetricsPrefix}    
                =
              
              
                summaryOnly
                true
                =
              
              
                samplersList
                
                =
              
              
                percentiles
                90;95;99
                =
              
            
          
          org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
        
        
      
    
    
      true
    
    
  

模板中用${}包起来的字段即为我们要替换的字段
处理的关键代码如下:

Configuration configuration = new Configuration(Configuration.VERSION_2_3_25);
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
configuration.setDirectoryForTemplateLoading(new File(classLoader.getResource("").getPath()));
            configuration.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_25));
Template template = template = configuration.getTemplate("JavaSampler_Templete.jmx","UTF-8");//加载模板文件
Map rootMap = new HashMap<>();//用map处理模板中的字段
rootMap.put("UD_CLASSPATH", "/");
rootMap.put("UD_ThreadNum", 1);
rootMap.put("UD_RampUp", 1);
rootMap.put("UD_Steps", 1);
rootMap.put("UD_HoldTime", 1);
rootMap.put("UD_Timer", "1000");
rootMap.put("UD_isArg", "false");
rootMap.put("UD_Domain", "www.baidu.com");
rootMap.put("UD_Port", "80");
rootMap.put("UD_Protocol", "");
rootMap.put("UD_Path", "");
rootMap.put("UD_Delimiter", "");
rootMap.put("UD_DataFileName", "");
rootMap.put("UD_VariableName", "");
rootMap.put("UD_GraphiteHost", "localhost");
rootMap.put("UD_GraphitePort", "2003");
rootMap.put("UD_RootMetricsPrefix", "jmeter.");
List> paraList = new ArrayList>();
Map map = new HashMap();
map.put("UD_ArguName", "");
map.put("UD_ArguValue", "");
map.put("testName", "");
paraList.add(map);
rootMap.put("elementProp", paraList);// 用list处理模板中list的部分

根据上述设置即可生成可执行的模板文件。

你可能感兴趣的:(使用FreeMarker模板动态处理JMeter运行脚本)