12. 听众介绍¶
侦听器是显示样本结果的组件。结果可以显示在树、表格、图表中,或者简单地写入日志文件。要查看来自任何给定采样器的响应内容,请将侦听器“查看结果树”或“查看表中的结果”添加到测试计划中。要以图形方式查看响应时间,请添加图形结果。组件页面的侦听 器部分包含所有侦听器的完整描述。
“配置”按钮可用于指定将哪些字段写入文件,以及将其写入为 CSV 还是 XML。CSV 文件比 XML 文件小得多,因此如果您要生成大量样本,请使用 CSV。
可以使用相对路径名或绝对路径名来指定文件名。相对路径是相对于当前工作目录(默认为bin/目录)解析的。JMeter 还支持相对于包含当前测试计划(JMX 文件)的目录的路径。如果路径名以“ ~/ ”开头(或jmeter.save.saveservice.base_prefix JMeter 属性中的任何内容),则假定该路径是相对于 JMX 文件位置的。
如果您只想录制某些样本,请将 Listener 添加为 sampler 的子项。或者,您可以使用简单控制器对一组采样器进行分组,并将监听器添加到其中。多个采样器可以使用相同的文件名 - 但请确保它们都使用相同的配置!
12.1 默认配置¶
要保存的默认项目可以在jmeter.properties(或user.properties)文件中定义。这些属性用作 Listener Config 弹出窗口的初始设置,也用于-l命令行标志指定的日志文件(通常用于 CLI 模式测试运行)。
要更改默认格式,请在jmeter.properties中找到以下行:
jmeter.save.saveservice.output_format=
要保存的信息是可配置的。有关最大信息,请选择“ xml ”作为格式并在测试计划元素上指定“功能测试模式”。如果未选中此框,则默认保存的数据包括时间戳(自 UTC 1970 年 1 月 1 日午夜以来的毫秒数)、数据类型、线程名称、标签、响应时间、消息和代码,和成功指标。如果选中,将记录所有信息,包括完整的响应数据。
以下示例说明如何设置属性以获取竖线 (" | ") 分隔格式,该格式将输出如下结果:。
timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage 02/06/03 08:21:42|1187|Home|200|Thread Group-1|text|true| 02/06/03 08:21:42|47|Login|200|Thread Group-1|text|false|Test Failed: expected to contain: password etc.
对应的需要设置的jmeter.properties如下图所示。此示例中的一个奇怪之处是output_format设置为csv,这通常表示逗号分隔的值。但是,default_delimiter被设置为竖线而不是逗号,因此 csv 标记在这种情况下是用词不当。(将 CSV 视为字符分隔值)
jmeter.save.saveservice.output_format=csv jmeter.save.saveservice.assertion_results_failure_message=true jmeter.save.saveservice.default_delimiter=|
影响结果文件输出的完整属性集如下所示。
#--------------------------------------------------------------------------- # Results file configuration #--------------------------------------------------------------------------- # This section helps determine how result data will be saved. # The commented out values are the defaults. # 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 #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 #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 #jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS # For use with Comma-separated value (CSV) files or other formats # where the fields' values are separated by specified delimiters. # Default: #jmeter.save.saveservice.default_delimiter=, # For TAB, since JMeter 2.3 one can use: #jmeter.save.saveservice.default_delimiter=\t # Only applies to CSV format files: # Print field names as first line in CSV #jmeter.save.saveservice.print_field_names=true # Optional list of JMeter variable names whose values are to be saved in the result data files. # Use commas to separate the names. For example: #sample_variables=SESSION_ID,REFERENCE # N.B. The current implementation saves the values in XML as attributes, # so the names must be valid XML names. # JMeter sends the variable to all servers # to ensure that the correct data is available at the client. # Optional xml processing instruction for line 2 of the file: #jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="sample.xsl"?> # Prefix used to identify filenames that are relative to the current base #jmeter.save.saveservice.base_prefix=~/ # AutoFlush on each line written in XML or CSV output # Setting this to true will result in less test results data loss in case of Crash # but with impact on performances, particularly for intensive tests (low or no pauses) # Since JMeter 2.10, this is false by default #jmeter.save.saveservice.autoflush=false # Put the start time stamp in logs instead of the end sampleresult.timestamp.start=true # Whether to use System.nanoTime() - otherwise only use System.currentTimeMillis() #sampleresult.useNanoTime=true # Use a background thread to calculate the nanoTime offset # Set this to ≤ 0 to disable the background thread #sampleresult.nanoThreadSleep=5000
用于timestamp_format的日期格式在SimpleDateFormat中描述。时间戳格式用于写入和读取文件。如果格式设置为“ ms ”,并且该列不解析为长整数,JMeter (2.9+) 将尝试以下格式:
- yyyy/MM/dd HH:mm:ss.SSS
- 年年/月/日 HH:mm:ss
- yyyy-MM-dd HH:mm:ss.SSS
- yyyy-MM-dd HH:mm:ss
- MM/dd/yy HH:mm:ss(这是为了兼容以前的版本;不推荐作为格式)
12.1.1 示例变量¶
JMeter 支持sample_variables 属性来定义附加 JMeter 变量的列表,这些变量将与 JTL 文件中的每个样本一起保存。这些值作为附加列写入 CSV 文件,并作为 XML 文件中的附加属性。请参见上面的示例。
12.1.2 样本结果保存配置¶
通过使用如下所示的配置弹出窗口,可以配置侦听器以将不同的项目保存到结果日志文件 (JTL)。默认值的定义如上面的侦听器默认配置部分所述。名称后带(CSV)的项目仅适用于CSV格式;带有 (XML) 的项目仅适用于 XML 格式。CSV 格式目前不能用于保存任何包含换行符的项目。
请注意,cookie、方法和查询字符串保存为“采样器数据”选项的一部分。
12.2 CLI 模式(批处理)测试运行¶
在 CLI 模式下运行时,-l标志可用于为测试运行创建顶级侦听器。这是对测试计划中定义的任何侦听器的补充。此侦听器的配置由文件jmeter.properties 中的条目控制,如上一节所述。
此功能可用于为每次测试运行指定不同的数据和日志文件,例如:
jmeter -n -t testplan.jmx -l testplan_01.jtl -j testplan_01.log jmeter -n -t testplan.jmx -l testplan_02.jtl -j testplan_02.log
请注意,默认情况下,JMeter 日志记录消息将写入文件jmeter.log。每次都会重新创建此文件,因此如果要保留每次运行的日志文件,则需要使用上面的-j选项对其进行重命名。
JMeter 支持日志文件名中的变量。如果文件名包含成对的单引号,则将名称处理为应用于当前日期的SimpleDateFormat格式,例如: log_file='jmeter_'yyyyMMddHHmmss'.tmp'。这可用于为每个测试运行生成一个唯一名称。
12.3 资源使用¶
大多数听众目前保留他们展示的每个样本的副本,除了:
- 简单数据写入器
- BeanShell/JSR223 监听器
- 邮件可视化器
- 监控结果
- 总结报告
以下侦听器不再需要保留每个样本的副本。相反,具有相同经过时间的样本会被聚合。现在需要更少的内存,特别是如果大多数样本最多只需要一两秒钟。
- 汇总报告
- 聚合图
要最小化所需的内存量,请使用简单数据写入器,并使用 CSV 格式。
12.4 CSV 日志格式¶
CSV 日志格式取决于在配置中选择了哪些数据项。只有指定的数据项记录在文件中。列的出现顺序是固定的,如下:
- timeStamp - 自 1970 年 1 月 1 日以来的毫秒数
- 经过- 以毫秒为单位
- 标签- 采样器标签
- responseCode - 例如200 , 404
- responseMessage - 例如确定
- 线程名
- 数据类型- 例如文本
- 成功-真或假
- failureMessage - 如果有的话
- bytes - 样本中的字节数
- sentBytes - 为样本发送的字节数
- grpThreads - 此线程组中的活动线程数
- allThreads - 所有组中的活动线程总数
- 网址
- 文件名- 如果使用了将响应保存到文件
- 延迟- 首次响应的时间
- connect - 建立连接的时间
- 编码
- SampleCount - 样本数(1,除非聚合多个样本)
- ErrorCount - 错误数(0 或 1,除非聚合了多个样本)
- 主机名- 生成样本的位置
- IdleTime - “空闲”时间的毫秒数(通常为 0)
- 变量,如果指定
12.5 XML 日志格式 2.1 ¶
更新后的XML(2.1)格式如下(换行会有所不同):
<?xml version="1.0" encoding="UTF-8"?> <testResults version="1.2"> -- HTTP Sample, with nested samples <httpSample t="1392" lt="351" ts="1144371014619" s="true" lb="HTTP Request" rc="200" rm="OK" tn="Listen 1-1" dt="text" de="iso-8859-1" by="12407"> <httpSample t="170" lt="170" ts="1144371015471" s="true" lb="http://www.apache.org/style/style.css" rc="200" rm="OK" tn="Listen 1-1" dt="text" de="ISO-8859-1" by="1002"> <responseHeader class="java.lang.String">HTTP/1.1 200 OK Date: Fri, 07 Apr 2006 00:50:14 GMT ⋮ Content-Type: text/css </responseHeader> <requestHeader class="java.lang.String">MyHeader: MyValue</requestHeader> <responseData class="java.lang.String">body, td, th { font-size: 95%; font-family: Arial, Geneva, Helvetica, sans-serif; color: black; background-color: white; } ⋮ </responseData> <cookies class="java.lang.String"></cookies> <method class="java.lang.String">GET</method> <queryString class="java.lang.String"></queryString> <url>http://www.apache.org/style/style.css</url> </httpSample> <httpSample t="200" lt="180" ts="1144371015641" s="true" lb="http://www.apache.org/images/asf_logo_wide.gif" rc="200" rm="OK" tn="Listen 1-1" dt="bin" de="ISO-8859-1" by="5866"> <responseHeader class="java.lang.String">HTTP/1.1 200 OK Date: Fri, 07 Apr 2006 00:50:14 GMT ⋮ Content-Type: image/gif </responseHeader> <requestHeader class="java.lang.String">MyHeader: MyValue</requestHeader> <responseData class="java.lang.String">http://www.apache.org/asf.gif</responseData> <responseFile class="java.lang.String">Mixed1.html</responseFile> <cookies class="java.lang.String"></cookies> <method class="java.lang.String">GET</method> <queryString class="java.lang.String"></queryString> <url>http://www.apache.org/asf.gif</url> </httpSample> <responseHeader class="java.lang.String">HTTP/1.1 200 OK Date: Fri, 07 Apr 2006 00:50:13 GMT ⋮ Content-Type: text/html; charset=ISO-8859-1 </responseHeader> <requestHeader class="java.lang.String">MyHeader: MyValue</requestHeader> <responseData class="java.lang.String"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ⋮ <html> <head> ⋮ </head> <body> ⋮ </body> </html> </responseData> <cookies class="java.lang.String"></cookies> <method class="java.lang.String">GET</method> <queryString class="java.lang.String"></queryString> <url>http://www.apache.org/</url> </httpSample> -- non HTTP Sample <sample t="0" lt="0" ts="1144372616082" s="true" lb="Example Sampler" rc="200" rm="OK" tn="Listen 1-1" dt="text" de="ISO-8859-1" by="10"> <responseHeader class="java.lang.String"></responseHeader> <requestHeader class="java.lang.String"></requestHeader> <responseData class="java.lang.String">Listen 1-1</responseData> <responseFile class="java.lang.String">Mixed2.unknown</responseFile> <samplerData class="java.lang.String">ssssss</samplerData> </sample> </testResults>
请注意,示例节点名称可能是“ sample ”或“ httpSample ”。
12.6 XML 日志格式 2.2 ¶
JTL 文件的格式对于 2.2 和 2.1 是相同的。格式 2.2 仅影响 JMX 文件。
12.7 样本属性¶
示例属性具有以下含义:
属性 | 内容 |
---|---|
经过 | 字节 |
斯比 | 发送字节 |
德 | 数据编码 |
dt | 数据类型 |
欧共体 | 错误计数(0 或 1,除非聚合多个样本) |
hn | 生成样本的主机名 |
它 | 空闲时间 = 不采样的时间(毫秒)(一般为 0) |
磅 | 标签 |
lt | 延迟 = 初始响应时间(毫秒) - 并非所有采样器都支持这一点 |
ct | 连接时间 = 建立连接的时间(毫秒) - 并非所有采样器都支持这一点 |
呐 | 所有线程组的活动线程数 |
吴 | 该组中的活动线程数 |
rc | 响应代码(例如200) |
R M | 响应消息(例如OK) |
s | 成功标志(真/假) |
sc | 样本计数(1,除非聚合多个样本) |
吨 | 经过时间(毫秒) |
吨 | 线程名称 |
ts | timeStamp(自 UTC 时间 1970 年 1 月 1 日午夜以来的毫秒数) |
变量名 | 命名变量的值 |
12.8 保存响应数据¶
如上所示,如果需要,可以将响应数据保存在 XML 日志文件中。但是,这会使文件变得相当大,并且必须对文本进行编码以使其仍然是有效的 XML。此外,不能包含图像。只能保存
TEXT类型的示例响应。
另一种解决方案是使用后处理器Save_Responses_to_a_file。这会为每个样本生成一个新文件,并将文件名与样本一起保存。然后可以将文件名包含在示例日志输出中。重新加载示例日志文件时,如有必要,将从文件中检索数据。
12.9 加载(读取)响应数据¶
要查看现有结果文件,您可以使用文件“浏览... ”按钮选择文件。如有必要,只需创建一个包含适当侦听器的虚拟测试计划。
结果可以从 XML 或 CSV 格式文件中读取。从 CSV 结果文件中读取时,标题(如果存在)用于确定保存了哪些字段。 为了正确解释无标题的 CSV 文件,必须设置适当的 JMeter 属性。
12.10 保存监听器 GUI 数据¶
JMeter 能够将任何监听器保存为 PNG 文件。为此,请在左侧面板中选择侦听器。单击
。将出现一个文件对话框。输入所需的名称并保存侦听器。生成输出为表格的监听器也可以使用复制/粘贴来保存。在表格中选择所需的单元格,然后使用 OS Copy 快捷方式(通常为Ctrl + C)。数据将被保存到剪贴板,从那里可以将其粘贴到另一个应用程序中,例如电子表格或文本编辑器。