jmeter3.x源码修改实现jtl文件只打印失败请求

在使用jmeter进行性能压测过程中,经常碰到tps高、压测时间长而导致生成jtl文件过大的问题,虽然可不加“-l”参数让jmeter不生成jtl文件,但这样做弊端也很明显那就是如果出现失败的请求没有日志可以找到失败的原因进而排查问题,所以下面我们就通过修改jmeter源码实现加上“-F”参数后,让jmeter产生jtl里只记录失败的请求的效果。

首先是JMeter.java文件,依葫芦画瓢在这里加上‘-F’的定义:

Java代码   收藏代码
  1. private static final int SYSTEM_PROPFILE    = 'S';// $NON-NLS-1$  
  2. private static final int REMOTE_STOP        = 'X';// $NON-NLS-1$  
  3. private static final int JTLFAILONLY_OPT    = 'F';  

 还有下面这些地方也相应的增加代码:

Java代码   收藏代码
  1. private static final CLOptionDescriptor D_REPORT_OUTPUT_FOLDER_OPT =  
  2.             new CLOptionDescriptor("reportoutputfolder",  
  3.                     CLOptionDescriptor.ARGUMENT_REQUIRED, REPORT_OUTPUT_FOLDER_OPT,  
  4.                     "output folder for report dashboard");  
  5. private static final CLOptionDescriptor D_JTLFAILONLY_OPT =  
  6.             new CLOptionDescriptor("jtlfailonly",  
  7.                     CLOptionDescriptor.ARGUMENT_DISALLOWED, JTLFAILONLY_OPT,  
  8.                     "only record the failed request log");  

 

Java代码   收藏代码
  1. private static final CLOptionDescriptor[] options = new CLOptionDescriptor[] {  
  2.             D_OPTIONS_OPT,  
  3.             D_HELP_OPT,  
  4.             D_VERSION_OPT,  
  5.             D_PROPFILE_OPT,  
  6.             D_PROPFILE2_OPT,  
  7.             D_TESTFILE_OPT,  
  8.             D_LOGFILE_OPT,  
  9.             D_JTLFAILONLY_OPT,  

 这个地方要获取我们的参数是否为空并将参数传给startNonGui方法。

Java代码   收藏代码
  1. CLOption jtlfailonly = parser.getArgumentById(JTLFAILONLY_OPT);  
  2.                       
  3. startNonGui(testFile, jtlFile, rem, reportAtEndOpt != null, jtlfailonly!=null);  
  4. startOptionalServers();  

 在startNonGui方法中再将参数传递给runNonGui方法

Java代码   收藏代码
  1. driver.runNonGui(testFile, logFile, remoteStart != null, remoteHostsString, generateReportDashboard, jtlfailonly);  

 在runNonGui方法中修改如下,依据jtlfailonly参数是否存在调用ResultCollector的多态方法

Java代码   收藏代码
  1. if (logFile != null) {  
  2.                 ResultCollector logger=null;  
  3.                 if(jtlfailonly){  
  4.                     logger = new ResultCollector(summer,jtlfailonly);  
  5.                 }else {  
  6.                     logger = new ResultCollector(summer);  
  7.                 }  

 ResultCollector方法在ResultCollector类中,修改如下:


jmeter3.x源码修改实现jtl文件只打印失败请求_第1张图片
 重新编译运行后就可以实现效果了。

你可能感兴趣的:(性能测试)