JMeter 在 non-GUI 模式下为每个采样器创建自定义 .jtl 日志

JMeter create custom .jtl log for each sampler in non-GUI mode

我正在尝试 运行 我的测试用例处于非图形用户界面模式。

这是我的测试计划

和豆壳代码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.net.URLDecoder;

import org.apache.jmeter.services.FileServer;

String samplerNumber = "${__threadNum}";
String samplerName = "${__samplerName()}";

if(sampleEvent.getResult() instanceof org.apache.jmeter.protocol.http.sampler.HTTPSampleResult) {
    String request = (sampleEvent.getResult().getSamplerData());
    String response = prev.getResponseDataAsString();
    String url = java.net.URLDecoder.decode(request, "UTF-8");


    f = new FileOutputStream("D:/testScripts/logs/" + samplerName + ".log", true);
    p = new PrintStream(f); 

    p.println("sample time: " + prev.getTime() 
    + " Thread: " + samplerNumber 
    + ", sampler name: " + samplerName 
    + ", system time: " + new Date() 
    + " \nREQUEST: " + url);

    p.close();
    f.close();
}

基本上它所做的是为我拥有的每个 HTTP-sampler 编写一个 .log 文件并记录线程、采样器名称、系统时间和请求的 url.

我更愿意构建一个 .jtl 文件,稍后我可以将其读入侦听器(例如图形)并查看每个采样器本身的结果。

有没有办法修改脚本来实现它?

你基本上根本不需要这个侦听器,JMeter 默认将所有这些信息存储到它的 .jtl 结果文件中。如果您需要保存 URL,只需将下一行添加到 user.properties 文件:

jmeter.save.saveservice.url=true

或通过 -J command-line argument 传递,例如:

jmeter -Jjmeter.save.saveservice.url=true -n -t test.jmx -l result.csv

如果您仍想从代码执行此操作,它必须生成与 saveservice 配置匹配的有效 CSV,即以下属性:

# legitimate values: xml, csv, db.  Only xml and csv are currently supported.
#jmeter.save.saveservice.output_format=csv


# true when field should be saved; false otherwise

# assertion_results_failure_message only affects CSV output
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
#jmeter.save.saveservice.data_type=true
#jmeter.save.saveservice.label=true
#jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
#jmeter.save.saveservice.response_data=false
# Save ResponseData for failed samples
#jmeter.save.saveservice.response_data.on_error=false
#jmeter.save.saveservice.response_message=true
#jmeter.save.saveservice.successful=true
#jmeter.save.saveservice.thread_name=true
#jmeter.save.saveservice.time=true
#jmeter.save.saveservice.subresults=true
#jmeter.save.saveservice.assertions=true
#jmeter.save.saveservice.latency=true
# Only available with HttpClient4
#jmeter.save.saveservice.connect_time=true
#jmeter.save.saveservice.samplerData=false
#jmeter.save.saveservice.responseHeaders=false
#jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
#jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=true
#jmeter.save.saveservice.url=false
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
#jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
#jmeter.save.saveservice.idle_time=true

# Timestamp format - this only affects CSV output files
# legitimate values: none, ms, or a format suitable for SimpleDateFormat
#jmeter.save.saveservice.timestamp_format=ms

您可能还需要生成 header 行,它需要匹配像

这样的列
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1496132228865,336,HTTP Request,200,OK,Thread Group 1-1,text,true,,1576,115,1,1,http://example.com/,336,0,174

此外,使用 JSR223 Listener and Groovy 语言而不是 Beanshell 会 好得多,因为在这种情况下性能会更高,资源消耗会更低。

请参阅 Apache JMeter Properties Customization Guide 以了解有关 JMeter 属性以及设置和覆盖它们的方法的更多信息