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(这是为了兼容以前的版本;不推荐作为格式)
匹配现在也很严格(非宽松)。JMeter 2.8 及更早版本使用宽松模式,这可能会导致时间戳的日期不正确(时间通常是正确的)。

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,除非聚合多个样本)
经过时间(毫秒)
线程名称
tstimeStamp(自 UTC 时间 1970 年 1 月 1 日午夜以来的毫秒数)
变量名命名变量的值
JMeter 允许将其他变量与测试计划一起保存。目前,变量被保存为附加属性。测试计划变量名称用作属性名称。有关详细信息,请参阅示例变量(上)。

12.8 保存响应数据

如上所示,如果需要,可以将响应数据保存在 XML 日志文件中。但是,这会使文件变得相当大,并且必须对文本进行编码以使其仍然是有效的 XML。此外,不能包含图像。只能保存 TEXT类型的示例响应。
另一种解决方案是使用后处理器Save_Responses_to_a_file。这会为每个样本生成一个新文件,并将文件名与样本一起保存。然后可以将文件名包含在示例日志输出中。重新加载示例日志文件时,如有必要,将从文件中检索数据。

12.9 加载(读取)响应数据

要查看现有结果文件,您可以使用文件“浏览... ”按钮选择文件。如有必要,只需创建一个包含适当侦听器的虚拟测试计划。

结果可以从 XML 或 CSV 格式文件中读取。从 CSV 结果文件中读取时,标题(如果存在)用于确定保存了哪些字段。 为了正确解释无标题的 CSV 文件,必须设置适当的 JMeter 属性。

JMeter 在加载新文件之前不会清除任何当前数据,从而允许合并文件。如果要清除当前数据,请 在加载文件之前 使用菜单项:运行 → 清除 ( Ctrl  +  Shift  +  E ) 运行 → 全部清除 ( Ctrl  +  E ) 。

12.10 保存监听器 GUI 数据

JMeter 能够将任何监听器保存为 PNG 文件。为此,请在左侧面板中选择侦听器。单击 编辑 → 将节点另存为图像。将出现一个文件对话框。输入所需的名称并保存侦听器。

生成输出为表格的监听器也可以使用复制/粘贴来保存。在表格中选择所需的单元格,然后使用 OS Copy 快捷方式(通常为Ctrl  +  C)。数据将被保存到剪贴板,从那里可以将其粘贴到另一个应用程序中,例如电子表格或文本编辑器。

图1 -
图 1 -编辑 → 将节点另存为图像
Go to top