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 属性以及设置和覆盖它们的方法的更多信息
我正在尝试 运行 我的测试用例处于非图形用户界面模式。
这是我的测试计划
和豆壳代码
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 属性以及设置和覆盖它们的方法的更多信息