18 简介

几个测试元素使用 JMeter 属性来控制它们的行为。这些属性通常在加载类时解析。这通常发生在测试计划开始之前,因此无法使用__setProperty()函数更改设置。

18.1 采样器

采样器执行 JMeter 的实际工作。每个采样器(Flow Control Action除外)都会生成一个或多个采样结果。示例结果具有各种属性(成功/失败、经过时间、数据大小等),可以在各种侦听器中查看。

FTP 请求

该控制器允许您向 FTP 服务器发送 FTP“检索文件”或“上传文件”请求。如果您要向同一个 FTP 服务器发送多个请求,请考虑使用FTP 请求默认配置元素,这样您就不必为每个 FTP 请求生成控制器输入相同的信息。下载文件时,可以将其存储在磁盘(本地文件)或响应数据中,或两者兼而有之。

延迟设置为登录所需的时间。

FTP 请求控制面板的屏幕截图
FTP 请求控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
服务器名称或 IP
FTP服务器的域名或IP地址。
是的
港口
要使用的端口。如果这是>0,则使用此特定端口,否则 JMeter 使用默认 FTP 端口。
远程文件:
要检索的文件或要上传的目标文件的名称。
是的
本地文件:
要上传的文件,或下载目的地(默认为远程文件名)。
是,如果上传 (*)
本地文件内容:
提供上传内容,覆盖本地文件属性。
是,如果上传 (*)
获取(返回)/ 放置(存储)
是否检索或上传文件。
是的
使用二进制模式?
选中此项以使用二进制模式(默认 ASCII)
是的
在响应中保存文件?
是否将检索到的文件的内容存储在响应数据中。如果模式是 ASCII,则内容将在View Results Tree中可见。
是的,如果下载
用户名
FTP 帐户用户名。
通常
密码
FTP 帐户密码。注意 这将在测试计划中可见。
通常
^

HTTP 请求

此采样器允许您向 Web 服务器发送 HTTP/HTTPS 请求。它还允许您控制 JMeter 是否解析 HTML 文件以获取图像和其他嵌入式资源并发送 HTTP 请求以检索它们。检索以下类型的嵌入资源:

  • 图片
  • 小程序
  • 样式表 (CSS) 和从这些文件中引用的资源
  • 外部脚本
  • 框架,iframe
  • 背景图像(正文、表格、TD、TR)
  • 背景声音

默认解析器是org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser。这可以通过使用属性“ htmlparser.className ”来更改 - 有关详细信息,请参阅jmeter.properties

如果您要向同一个 Web 服务器发送多个请求,请考虑使用HTTP 请求默认 配置元素,这样您就不必为每个 HTTP 请求输入相同的信息。

或者,您可能希望使用 JMeter 的HTTP(S) 测试脚本记录器来创建它们,而不是手动添加 HTTP 请求。如果您有大量 HTTP 请求或带有许多参数的请求,这可以节省您的时间。

有三种不同的测试元素用于定义采样器:

AJP/1.3 采样器
使用 Tomcat mod_jk 协议(允许在 AJP 模式下测试 Tomcat,无需 Apache httpd) AJP Sampler 不支持多文件上传;只会使用第一个文件。
HTTP 请求
这有一个实现下拉框,用于选择要使用的 HTTP 协议实现:
爪哇
使用 JVM 提供的 HTTP 实现。与 HttpClient 实现相比,这有一些限制 - 见下文。
HTTP客户端4
使用 Apache HttpComponents HttpClient 4.x。
空白值
没有在 HTTP 采样器上设置实现,因此依赖于 HTTP 请求默认值(如果存在)或jmeter.properties中定义的jmeter.httpsampler属性
GraphQL HTTP 请求
这是HTTP 请求的 GUI 变体,提供更方便的 UI 元素来查看或编辑 GraphQL查询变量操作名称,同时使用相同的采样器在后台自动将它们转换为 HTTP 参数。这会隐藏或自定义以下 UI 元素,因为它们对于通过 HTTP/HTTPS 请求的 GraphQL 不太方便或不相关:
  • 方法:只有 POST 和 GET 方法可用,符合 GraphQL over HTTP 规范。默认选择 POST 方法。
  • 参数帖子正文选项卡:您可以改为通过查询、变量和操作名称 UI 元素查看或编辑参数内容。
  • 文件上传选项卡:与 GraphQL 查询无关。
  • 高级选项卡中来自 HTML 文件的嵌入式资源部分:与 GraphQL JSON 响应无关。

Java HTTP 实现有一些限制:

  • 无法控制如何重新使用连接。当 JMeter 释放连接时,它可能会或可能不会被同一线程重用。
  • API 最适合单线程使用 - 各种设置是通过系统属性定义的,因此适用于所有连接。
  • 不支持 Kerberos 身份验证
  • 它不支持使用 Keystore Config 进行基于客户端的证书测试。
  • 更好地控制重试机制
  • 它不支持虚拟主机。
  • 它仅支持以下方法:GETPOSTHEADOPTIONSPUTDELETETRACE
  • 使用DNS 缓存管理器更好地控制 DNS 缓存
注意:FILE协议仅用于测试目的。无论使用哪个 HTTP 采样器,它都由相同的代码处理。

如果请求需要服务器或代理登录授权(即浏览器会在其中创建弹出对话框),您还必须添加HTTP 授权管理器配置元素。对于普通登录(即用户在表单中输入登录信息),您需要确定表单提交按钮的作用,并使用适当的方法(通常是POST)和表单定义中的适当参数创建一个 HTTP 请求. 如果页面使用 HTTP,您可以使用 JMeter 代理来捕获登录序列。

每个线程使用一个单独的 SSL 上下文。如果要使用单个 SSL 上下文(不是浏览器的标准行为),请设置 JMeter 属性:

https.sessioncontext.shared=true
默认情况下,从 5.0 版开始,SSL 上下文在线程组迭代期间保留,并在每次测试迭代时重置。如果在您的测试计划中同一用户迭代多次,那么您应该将其设置为 false。
httpclient.reset_state_on_thread_group_iteration=true
注意:这不适用于 Java HTTP 实现。
JMeter 默认使用 SSL 协议级别的 TLS。如果服务器需要不同的级别,例如SSLv3,请更改 JMeter 属性,例如:
https.default.protocol=SSLv3

JMeter 还允许通过更改属性https.socket.protocols来启用其他协议。

如果请求使用 cookie,那么您还需要一个 HTTP Cookie 管理器。您可以将这些元素中的任何一个添加到线程组或 HTTP 请求。如果您有多个 HTTP 请求需要授权或 cookie,则将元素添加到线程组。这样,所有 HTTP 请求控制器将共享相同的授权管理器和 Cookie 管理器元素。

如果请求使用一种称为“URL 重写”的技术来维护会话,那么请参阅第 6.1 节使用 URL 重写处理用户会话以 了解其他配置步骤。

HTTP 请求控制面板的屏幕截图
HTTP 请求控制面板截图
HTTP 请求高级配置字段
HTTP 请求高级配置字段
GraphQL HTTP 请求的控制面板截图
GraphQL HTTP 请求的控制面板截图
GraphQL HTTP 请求的变量字段
GraphQL HTTP 请求的变量字段

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
服务器
Web 服务器的域名或 IP 地址,例如www.example.com。[不包括http://前缀。] 注意:如果在 Header Manager 中定义了“ Host ”标头,那么这将用作虚拟主机名。
服务器是必需的,除非:
港口
Web 服务器正在侦听的端口。默认值:80
连接超时
连接超时。等待连接打开的毫秒数。
响应超时
响应超时。等待响应的毫秒数。请注意,这适用于每次等待响应。如果服务器响应分多个块发送,则总经过时间可能比超时时间长。

持续时间断言可用于检测需要太长时间才能完成的响应。

服务器(代理)
执行请求的代理服务器的主机名或 IP 地址。[不包括http://前缀。]
港口
代理服务器正在侦听的端口。
否,除非指定了代理主机名
用户名
(可选)代理服务器的用户名。
密码
(可选)代理服务器的密码。(注意,这是在测试计划中未加密存储的)
执行
JavaHttpClient4。如果未指定(并且未由 HTTP 请求默认值定义),则默认值取决于 JMeter 属性 jmeter.httpsampler的值,否则将使用 HttpClient4 实现。
协议
HTTPHTTPS文件。默认值:HTTP
方法
GETPOSTHEADTRACEOPTIONSPUTDELETEPATCH(不支持 JAVA实现)。使用HttpClient4,还允许使用以下与 WebDav 相关的方法:COPYLOCKMKCOLMOVEPROPFINDPROPPATCHUNLOCKREPORTMKCALENDARSEARCH

可以使用 JMeter 属性 httpsampler.user_defined_methods为 HttpClient4 预定义更多方法。

是的
内容编码
要使用的内容编码(用于POSTPUTPATCHFILE)。这是要使用的字符编码,与 Content-Encoding HTTP 标头无关。
自动重定向
将底层 http 协议处理程序设置为自动遵循重定向,因此 JMeter 看不到它们,因此不会作为示例显示。应该只用于GETHEAD请求。HttpClient 采样器将拒绝将其用于POSTPUT的尝试。
警告:有关 cookie 和标头处理的信息,请参见下文。
跟随重定向
这仅在未启用“自动重定向”时才有效。如果设置,JMeter 采样器将检查响应是否为重定向,如果是则遵循它。初始重定向和进一步响应将显示为附加样本。父样本的 URL 和数据字段将取自最终(非重定向)样本,但父字节计数和经过时间包括所有样本。延迟取自初始响应。请注意,HttpClient 采样器可能会记录以下消息:
"Redirect requested but followRedirects is disabled"
这可以忽略。
JMeter 将在绝对和相对重定向 URL 中折叠“ /../segment ”形式的路径。例如http://host/one/../two将被折叠成http://host/two如有必要,可以通过设置 JMeter 属性httpsampler.redirect.removeslashdotdot=false来抑制此行为
使用保活
JMeter 设置 Connection: keep-alive标头。这不适用于默认的 HTTP 实现,因为连接重用不受用户控制。它确实适用于 Apache HttpComponents HttpClient 实现。
对 HTTP POST 使用 multipart/form-data
使用multipart/form-dataapplication/x-www-form-urlencoded发布请求
浏览器兼容的标头
当使用multipart/form-data时,这会抑制Content-TypeContent-Transfer-Encoding标头;仅发送Content-Disposition标头。
小路
资源的路径(例如/servlets/myServlet)。如果资源需要查询字符串参数,请将它们添加到下方的“随请求发送参数”部分。
作为一种特殊情况,如果路径以“ http:// ”或“ https:// ”开头,那么这将用作完整的 URL。
在这种情况下,服务器、端口和协议字段将被忽略;GETDELETE方法的参数也会被忽略。另请注意,路径未编码 - 除了用%20替换空格- 因此可能需要对不安全的字符进行编码以避免诸如URISyntaxException之类的错误。
随请求发送参数
查询字符串将从您提供的参数列表中生成。每个参数都有一个namevalue,对参数进行编码的选项,以及包含或排除等号的选项(当值为空字符串时,某些应用程序不期望等号)。查询字符串将以正确的方式生成,具体取决于您选择的“方法”(即,如果您选择GETDELETE,查询字符串将附加到 URL,如果POSTPUT,则将单独发送)。此外,如果您使用多部分表单发送文件,则将使用多部分表单规范创建查询字符串。 有关参数处理的更多信息,请参见下文。

此外,您可以指定每个参数是否应进行 URL 编码。如果您不确定这意味着什么,最好选择它。如果您的值包含如下字符,则通常需要编码:

  • ASCII 控制字符
  • 非 ASCII 字符
  • 保留字符:URL 使用一些特殊字符来定义它们的语法。当这些字符在 URL 中没有作为特殊角色使用时,需要对其进行编码,例如:' $ '、' & '、' + '、' '、' / '、' : '、' ', ' = ', ' ? ',' @ '
  • 不安全字符:某些字符可能由于各种原因在 URL 中被误解。这些字符也应始终进行编码,例如:' '、' < '、' > '、' # '、' % '、...
文件路径:
要发送的文件的名称。如果留空,JMeter 不发送文件,如果填写,JMeter 会自动将请求作为多部分表单请求发送。

如果它是一个POSTPUTPATCH请求,并且有一个文件的“参数名称”属性(如下)被省略,则该文件作为请求的整个主体发送,即不添加任何包装器。这允许发送任意正文。此功能适用于POST请求,也适用于PUT请求。 有关参数处理的更多信息,请参见下文。

参数名称:
name ”网络请求参数的值。
MIME 类型
MIME 类型(例如,text/plain)。如果是POSTPUTPATCH请求,并且省略了“ name ”属性(如下)或请求正文仅由参数值构造,则该字段的值用作 内容类型请求的值标题。
从 HTML 文件中检索所有嵌入式资源
告诉 JMeter 解析 HTML 文件并为文件中引用的所有图像、Java 小程序、JavaScript 文件、CSS 等发送 HTTP/HTTPS 请求。请参阅下面的更多细节。
将响应保存为 MD5 哈希?
如果选择此选项,则响应不会存储在样本结果中。而是计算并存储数据的 32 个字符的 MD5 哈希值。这用于测试大量数据。
网址必须匹配:
如果存在,这必须是一个正则表达式,用于匹配找到的任何嵌入式 URL。因此,如果您只想从http://example.invalid/下载嵌入式资源,请使用表达式: http://example\.invalid/.*
URL 不能匹配:
如果存在,这必须是一个正则表达式,用于过滤掉找到的任何嵌入式 URL。因此,如果您不想从任何来源下载 PNG 或 SVG 文件,请使用表达式: .*\.(?i:svg|png)
使用并发池
使用并发连接池来获取嵌入式资源。
尺寸
用于获取嵌入式资源的并发连接的池大小。
源地址类型
[仅适用于具有 HTTPClient 实现的 HTTP 请求]
要区分源地址值,请选择以下类型:
  • 选择IP/主机名以使用特定 IP 地址或(本地)主机名
  • 选择设备以选择该接口的第一个可用地址,这可能是 IPv4 或 IPv6
  • 选择Device IPv4选择设备名称的 IPv4 地址(如eth0loem0等)
  • 选择Device IPv6选择设备名称的 IPv6 地址(如eth0loem0等)
源地址字段
[仅适用于具有 HTTPClient 实现的 HTTP 请求]
此属性用于启用 IP 欺骗。它会覆盖此示例的默认本地 IP 地址。JMeter 主机必须有多个IP 地址(即IP 别名、网络接口、设备)。该值可以是主机名、IP 地址或网络接口设备,例如“ eth0 ”或“ lo ”或“ wlan0 ”。
如果定义了属性httpclient.localaddress,则该属性用于所有 HttpClient 请求。

以下参数仅适用于GraphQL HTTP Request

参数

属性
描述
必需的
询问
GraphQL 查询(或突变)语句。
是的
变量
有效 JSON 字符串中的 GraphQL 查询(或突变)变量。 注意:如果输入字符串不是有效的 JSON 字符串,则会使用错误日志将其忽略。
操作名称
请求多操作文档时可选的 GraphQL 操作名称。
使用自动重定向时,仅针对初始 URL 发送 cookie。这可能会导致重定向到本地服务器的网站出现意外行为。例如,如果www.example.com重定向到www.example.co.uk。在这种情况下,服务器可能会返回两个 URL 的 cookie,但 JMeter 只会看到最后一个主机的 cookie,即www.example.co.uk。如果测试计划中的下一个请求使用www.example.com,而不是www.example.co.uk,它不会得到正确的cookies。同样,为初始请求发送标头,而不会为重定向发送标头。这通常只是手动创建的测试计划的问题,因为使用记录器创建的测试计划将从重定向的 URL 继续。

参数处理:
对于POSTPUT方法,如果没有要发送的文件,并且省略了参数的名称,则通过连接所有参数的值来创建正文。请注意,这些值是在不添加任何行尾字符的情况下连接起来的。这些可以通过在值字段中使用__char()函数来添加。这允许发送任意正文。如果设置了编码标志,则对这些值进行编码。另请参阅上面的 MIME 类型,您可以如何控制发送的内容类型请求标头。
对于其他方法,如果缺少参数名称,则忽略该参数。这允许使用由变量定义的可选参数。


当请求只有未命名的参数(或根本没有参数)时,您可以选择切换到正文数据选项卡。此选项在以下情况下很有用(其中包括):

  • GWT RPC HTTP 请求
  • JSON REST HTTP 请求
  • XML REST HTTP 请求
  • SOAP HTTP 请求
请注意,一旦您离开 Tree 节点,您将无法切换回参数选项卡,除非您从其数据中 清除Body Data选项卡。

正文数据模式下,除了最后一行之外,每行都将附加CRLF 。要在最后一行数据之后发送CRLF,只需确保后面有一个空行。(这看不到,除非注意光标是否可以放在下一行。)

图 1 - 带有一个未命名参数的 HTTP 请求
图 1 - 带有一个未命名参数的 HTTP 请求
图 2 - 确认对话框切换
图 2 - 确认对话框切换
图 3 - 使用正文数据的 HTTP 请求
图 3 - 使用正文数据的 HTTP 请求

方法处理:
GET DELETE POST PUTPATCH请求方法的工作方式类似,除了从 3.1 开始,只有POST方法支持多部分请求或文件上传。PUTPATCH方法主体必须提供为以下之一:

  • 将正文定义为具有空参数名称字段的文件;在这种情况下,MIME 类型用作 Content-Type
  • 将主体定义为没有名称的参数值
  • 使用“身体数据”选项卡

GETDELETEPOST方法还有另一种使用“参数”选项卡传递参数 的方法。 GETDELETEPUTPATCH需要 Content-Type。如果不使用文件,请将 Header Manager 附加到采样器并在那里定义 Content-Type。

JMeter 扫描来自嵌入式资源的响应。它使用属性HTTPResponse.parsers,它是解析器 ID 的列表,例如htmlParsercssParserwmlParser。对于找到的每个 id,JMeter 会检查另外两个属性:

  • id.types - 内容类型列表
  • id.className - 用于提取嵌入资源的解析器

有关设置的详细信息,请参见jmeter.properties文件。如果未设置HTTPResponse.parser属性,JMeter 将恢复到以前的行为,即仅扫描文本/html响应

模拟慢速连接:

HttpClient4Java Sampler 支持模拟慢速连接;请参阅jmeter.properties中的以下条目:

# Define characters per second > 0 to emulate slow connections
#httpclient.socket.http.cps=0
#httpclient.socket.https.cps=0
然而,Java采样器仅支持慢速 HTTPS 连接。

响应大小计算

Java实现不包括传输开销,例如响应正文大小中的块标头 。HttpClient4
实现确实包含响应正文大小 的开销,因此该值可能大于响应内容中的字节数。

重试处理
默认情况下,HttpClient4 和 Java 实现的重试都设置为 0,这意味着不会尝试重试。
对于 HttpClient4,可以通过设置相关的 JMeter 属性来覆盖重试计数,例如:

httpclient4.retrycount=3
使用 HC4 实现,默认情况下重试将在幂等 Http 方法上完成。如果要重试所有方法,请设置属性
httpclient4.request_sent_retry_enabled=true
请注意,Java 实现默认情况下都不重试,您可以通过设置更改此设置
http.java.sampler.retries=3

注意:证书不符合算法约束
您可能会遇到以下错误:java.security.cert.CertificateException: 如果您在具有 SSL 证书(本身或其中之一)的网站上运行 HTTPS 请求,证书不符合算法约束信任链中的 SSL 证书)带有使用 MD2 的签名算法(如md2WithRSAEncryption)或大小小于 1024 位的 SSL 证书。

此错误与 Java 8 中提高的安全性有关。

要允许您执行 HTTPS 请求,您可以通过编辑 Java jdk.certpath.disabledAlgorithms属性来降低 Java 安装的安全性。根据您的情况,删除 MD2 值或大小约束。

此属性在此文件中:

JAVA_HOME/jre/lib/security/java.security

有关详细信息,请参阅 错误 56357

^

JDBC 请求

此采样器允许您将 JDBC 请求(SQL 查询)发送到数据库。

在使用它之前,您需要设置一个 JDBC 连接配置配置元素

如果提供了变量名称列表,那么对于 Select 语句返回的每一行,变量都设置为对应列的值(如果提供了变量名称),并且还设置了行数。例如,如果 Select 语句返回 2 行 3 列,并且变量列表为A,,C,则将设置以下变量:

A_#=2 (number of rows)
A_1=column 1, row 1
A_2=column 1, row 2
C_#=2 (number of rows)
C_1=column 3, row 1
C_2=column 3, row 2

如果 Select 语句返回零行,则A_#C_#变量将设置为0,并且不会设置其他变量。

如有必要,旧变量会被清除 - 例如,如果第一次选择检索六行而第二次选择仅返回三行,则将删除第四、五和第六行的附加变量。

延迟时间是从获取连接所用的时间开始设置的。
JDBC 请求控制面板的屏幕截图
JDBC 请求控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
JDBC 连接配置中声明的池变量名
连接池绑定的 JMeter 变量的名称。这必须与JDBC 连接配置的“变量名”字段一致。
是的
查询类型
根据语句类型设置:
  • 选择语句
  • 更新语句 - 也将其用于插入和删除
  • 可调用语句
  • 准备好的选择语句
  • Prepared Update Statement - 也用于插入和删除
  • 犯罪
  • 回滚
  • 自动提交(假)
  • 自动提交(真)
  • 编辑 - 这应该是一个变量引用,评估为上述之一
CommitRollbackAutocommit(false)Autocommit(true)类型 是特殊的,因为它们忽略了给定的 SQL 语句并且只改变了连接的状态。
是的
SQL 查询
SQL 查询。
不要输入尾随分号。
Callable 语句 一般不用{}括起来;但是,如果数据库使用非标准语法,则可以使用它们。
当语句包含在{}中时,JDBC 驱动程序会在必要时自动转换语句。
例如:
  • 从 t_customers 中选择 *,其中 id=23
  • CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE (null, ?, ?, null, null, null)
    • 参数值:名,文件名
    • 参数类型: VARCHARVARCHAR
第二个示例假设您使用的是 Apache Derby。
是的
参数值
逗号分隔的参数值列表。使用]NULL[表示NULL参数。(如果需要,可以通过定义属性“ jdbcsampler.nullmarker ”来更改空字符串。)
如果任何值包含逗号或双引号,则列表必须用双引号括起来,并且任何嵌入的双引号必须加倍,例如:
"Dbl-Quote: "" and Comma: ,"
即使您的参数是OUT参数,语句中的值也必须与占位符一样多。即使不使用该值(例如在 CallableStatement 中),请务必设置一个值。
是,如果准备好的或可调用的语句有参数
参数类型
逗号分隔的 SQL 参数类型列表(例如INTEGERDATEVARCHARDOUBLE)或常量的整数值。当您使用驱动程序建议的自定义数据库类型时,可以使用这些整数值(例如OracleTypes.CURSOR可以由其整数值-10表示)。
这些被定义为类java.sql.Types中的字段,例如参见:
Javadoc for java.sql.Types
注意:JMeter 将使用运行时 JVM 定义的任何类型,因此如果您在不同的 JVM 上运行,请务必查看相应的文档
如果可调用语句具有INOUTOUT参数,则必须通过为适当的参数类型添加前缀来指示这些参数,例如,使用“ INOUT INTEGER ”代替“ INTEGER ”。
如果未指定,则假定为“ IN ”,即“ DATE ”与“ IN DATE ”相同。
如果类型不是java.sql.Types中的字段之一,JMeter 也接受相应的整数,例如,由于OracleTypes.CURSOR == -10,您可以使用“ INOUT -10 ”。
语句中的类型必须与占位符一样多。
是,如果准备好的或可调用的语句有参数
变量名
以逗号分隔的变量名称列表,用于保存 Select 语句、Prepared Select 语句或 CallableStatement 返回的值。请注意,与 CallableStatement 一起使用时,变量列表必须与调用返回的OUT参数的顺序相同。如果变量名少于OUT参数,则只有与提供变量名一样多的结果应存储在线程上下文变量中。如果存在多于OUT参数的变量名,则将忽略其他变量
结果变量名称
如果指定,这将创建一个包含行映射列表的 Object 变量。每个映射都包含作为键的列名和作为值的列数据。用法:
columnValue = vars.getObject("resultObject").get(0).get("Column Name");
查询超时
以秒为单位设置查询超时,空值表示 0 是无限的。-1表示不设置用例或某些驱动程序不支持超时时可能需要的任何查询超时。默认为 0。
限制结果集
限制遍历 ResultSet 的行数。空值表示-1,例如没有限制,这也是默认值。这有助于减少通过 JDBC 驱动程序从数据库中获取的数据量,但会分别影响Handle ResultSet的所有可能选项——例如不完整的 ResultSet 和记录数≤限制。
处理结果集
定义如何处理从可调用语句返回的 ResultSet:
  • 存储为字符串(默认)- 变量名称列表中的所有变量都存储为字符串,当列表中存在时不会遍历ResultSetCLOB将被转换为字符串。BLOB将被转换为字符串,就好像它们是 UTF-8 编码的字节数组一样。CLOBBLOB都将在jdbcsampler.max_retain_result_size字节之后被切断。
  • 存储为对象- 变量名称列表上的ResultSet类型的变量将存储为对象,并且可以在后续测试/脚本中访问并进行迭代,不会遍历ResultSetCLOB将被处理,就像选择了Store As String一样。BLOB将存储为字节数组。CLOBBLOB都将在jdbcsampler.max_retain_result_size字节之后被切断。
  • 计数记录- ResultSet类型的变量将通过将记录计数显示为结果进行迭代。变量将存储为字符串。对于BLOB,将存储对象的大小。
当前版本的 JMeter 使用 UTF-8 作为字符编码。以前使用平台默认值。
确保变量名称在测试计划中是唯一的。
^

Java 请求

此采样器允许您控制实现 org.apache.jmeter.protocol.java.sampler.JavaSamplerClient接口的 java 类。通过编写您自己的此接口实现,您可以使用 JMeter 来利用多个线程、输入参数控制和数据收集。

下拉菜单提供了 JMeter 在其类路径中找到的所有此类实现的列表。然后可以在下表中指定参数 - 由您的实现定义。提供了两个简单的示例(JavaTestSleepTest)。

JavaTest示例采样 器可用于检查测试计划,因为它允许在几乎所有字段中设置值。然后这些可以被断言等使用。这些字段允许使用变量,因此可以很容易地看到这些值。

Java 请求控制面板的屏幕截图
Java 请求控制面板截图
如果方法teardownTest未被AbstractJavaSamplerClient的子类覆盖,则不会调用其teardownTest方法。这减少了 JMeter 的内存需求。这不会对现有的测试计划产生任何影响。
“添加/删除”按钮目前没有任何用途。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
班级名称
被采样的JavaSamplerClient接口的具体实现。
是的
使用请求发送参数
将传递给采样类的参数列表。所有参数都作为字符串发送。具体设置见下文。

以下参数适用于SleepTestJavaTest实现:

参数

属性
描述
必需的
睡觉时间
睡眠时间(毫秒)
是的
睡眠掩码
添加多少“随机性”:
睡眠时间计算如下:
totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask)
是的

以下参数还适用于JavaTest实现:

参数

属性
描述
必需的
标签
要使用的标签。如果提供,覆盖名称
响应码
如果提供,则设置 SampleResult ResponseCode。
响应消息
如果提供,则设置 SampleResult ResponseMessage。
地位
如果提供,则设置 SampleResult 状态。如果这等于“ OK ”(忽略大小写),则将状态设置为成功,否则将样本标记为失败。
采样器数据
如果提供,则设置 SampleResult SamplerData。
结果数据
如果提供,则设置 SampleResult ResultData。
^

LDAP 请求

此采样器允许您向 LDAP 服务器发送不同的 LDAP 请求(添加修改删除搜索)。

如果您要向同一个 LDAP 服务器发送多个请求,请考虑使用LDAP 请求默认 配置元素,这样您就不必为每个 LDAP 请求输入相同的信息。

登录配置元素也用于登录和密码 的方式相同。
LDAP 请求控制面板的屏幕截图
LDAP 请求控制面板的屏幕截图

有两种方法可以创建用于测试 LDAP 服务器的测试用例。

  1. 内置测试用例。
  2. 用户定义的测试用例。

测试 LDAP 有四种测试场景。测试如下:

  1. 添加测试
    1. 内置测试:

      这将在 LDAP 服务器中添加一个预定义的条目并计算执行时间。执行测试后,创建的条目将从 LDAP 服务器中删除。

    2. 用户定义测试:

      这将在 LDAP 服务器中添加条目。用户必须输入表中的所有属性。条目是从表中收集来添加的。计算执行时间。测试后创建的条目不会被删除。

  2. 修改测试
    1. 内置测试:

      这将首先创建一个预定义的条目,然后会在 LDAP 服务器中修改创建的条目。并计算执行时间。执行测试后,创建的条目将从 LDAP 服务器中删除。

    2. 用户定义测试:

      这将修改 LDAP 服务器中的条目。用户必须输入表中的所有属性。从表中收集条目以进行修改。计算执行时间。该条目不会从 LDAP 服务器中删除。

  3. 搜索测试
    1. 内置测试:

      这将首先创建条目,然后搜索属性是否可用。它计算搜索查询的执行时间。在执行结束时,创建的条目将从 LDAP 服务器中删除。

    2. 用户定义测试:

      这将在搜索库(同样,由用户定义)中搜索用户定义的条目(搜索过滤器)。这些条目应该在 LDAP 服务器中可用。计算执行时间。

  4. 删除测试
    1. 内置测试:

      这将首先创建一个预定义条目,然后将其从 LDAP 服务器中删除。计算执行时间。

    2. 用户定义测试:

      这将删除 LDAP 服务器中的用户定义条目。这些条目应该在 LDAP 服务器中可用。计算执行时间。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
服务器名称或 IP
LDAP 服务器的域名或 IP 地址。JMeter 假定 LDAP 服务器正在侦听默认端口 ( 389 )。
是的
港口
要连接的端口(默认为389)。
是的
根目录号
用于 LDAP 操作的基本 DN
是的
用户名
LDAP 服务器用户名。
通常
密码
LDAP 服务器密码。(注意,这是在测试计划中未加密存储的)
通常
条目 DN
要创建或修改的上下文的名称;不能为空。
您必须自己设置对象的正确属性。因此,如果要添加cn=apache,ou=test ,则必须将表添加到cnapache
是,如果选择了用户定义的测试和添加测试或修改测试
删除
要删除的上下文的名称;不能为空
是,如果选择了用户定义的测试和删除测试
搜索库
要搜索的上下文或对象的名称
是,如果选择了用户定义的测试和搜索测试
搜索过滤器
用于搜索的过滤器表达式;可能不为空
是,如果选择了用户定义的测试和搜索测试
添加测试
使用这些名称对在给定上下文中创建新对象
是,如果选择了用户定义的测试并添加测试
修改测试
使用这些名称对来修改给定的上下文对象
是,如果选择了用户定义的测试和修改测试
^

LDAP 扩展请求

此采样器可以将所有 8 个不同的 LDAP 请求发送到 LDAP 服务器。它是 LDAP 采样器的扩展版本,因此更难配置,但可以更接近于真正的 LDAP 会话。

如果您要向同一个 LDAP 服务器发送多个请求,请考虑使用LDAP 扩展请求默认 配置元素,这样您就不必为每个 LDAP 请求输入相同的信息。

LDAP 扩展请求控制面板的屏幕截图
LDAP 扩展请求控制面板的屏幕截图

定义了九个测试操作。这些操作如下所示:

线程绑定

任何 LDAP 请求都是 LDAP 会话的一部分,因此应该做的第一件事是启动与 LDAP 服务器的会话。为了启动这个会话,使用了一个线程绑定,它等同于 LDAP“绑定”操作。要求用户提供用户名(专有名称)和密码,用于启动会话。当没有密码或指定了错误的密码时,将启动一个匿名会话。请注意,省略密码不会使此测试失败,错误的密码会失败。(注意,这是在测试计划中未加密存储的)

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
服务器名称
LDAP 服务器的名称(或 IP 地址)。
是的
港口
LDAP 服务器正在侦听的端口号。如果省略,JMeter 假定 LDAP 服务器正在侦听默认端口 (389)。
DN
将用于任何后续操作的基础对象的可分辨名称。它可以作为所有操作的起点。您不能在高于此 DN 的级别上启动任何操作!
用户名
要绑定的用户的完整专有名称。
密码
上述用户的密码。如果省略它将导致匿名绑定。如果不正确,采样器将返回错误并恢复为匿名绑定。(注意,这是在测试计划中未加密存储的)
连接超时(以毫秒为单位)
连接超时,如果超过将中止连接
使用安全 LDAP 协议
使用ldaps://方案而不是ldap://
信任所有证书
信任所有证书,仅在选中使用安全 LDAP 协议时使用
线程解绑

这只是结束会话的操作。它相当于 LDAP 的“解除绑定”操作。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
单一绑定/解除绑定

这是 LDAP“绑定”和“取消绑定”操作的组合。它可用于任何用户的身份验证请求/密码检查。它将打开一个新会话,只是为了检查用户/密码组合的有效性,然后再次结束会话。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
用户名
要绑定的用户的完整专有名称。
是的
密码
上述用户的密码。如果省略它将导致匿名绑定。如果不正确,采样器将返回错误。(注意,这是在测试计划中未加密存储的)
重命名条目

这是 LDAP“ moddn ”操作。它可用于重命名条目,也可用于将条目或完整子树移动到 LDAP 树中的不同位置。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
旧条目名称
您要重命名或移动的对象的当前专有名称,相对于线程绑定操作中的给定 DN。
是的
新的专有名称
要重命名或移动的对象的新专有名称,相对于线程绑定操作中的给定 DN。
是的
添加测试

这是 LDAP“添加”操作。它可用于向 LDAP 服务器添加任何类型的对象。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
条目 DN
要添加的对象的可分辨名称,相对于线程绑定操作中的给定 DN。
是的
添加测试
要用于对象的属性及其值的列表。如果需要添加多值属性,则需要将具有各自值的相同属性多次添加到列表中。
是的
删除测试

这是 LDAP “删除”操作,它可以用来从 LDAP 树中删除一个对象

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
删除
要删除的对象的可分辨名称,相对于线程绑定操作中的给定 DN。
是的
搜索测试

这是 LDAP“搜索”操作,将用于定义搜索。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
搜索库
您希望搜索查找的子树的可分辨名称,相对于线程绑定操作中的给定 DN。
搜索过滤器
searchfilter,必须在 LDAP 语法中指定。
是的
范围
使用0表示 baseobject-,1表示 onelevel-,2表示子树搜索。(默认= 0
尺寸限制
指定您希望从服务器返回的最大结果数。(默认= 0,表示没有限制。)当采样器达到最大结果数时,它将失败,错误代码为4
时限
指定服务器可以在搜索上花费的最大 (cpu) 时间(以毫秒为单位)。请注意,这并没有说明响应时间。(默认为0,表示没有限制)
属性
指定要返回的属性,用分号分隔。空字段将返回所有属性
返回对象
对象是否将被返回 ( true ) 或不 ( false )。默认=
取消引用别名
如果为true,它将取消引用别名,如果为false,它将不跟随它们(默认 = false
解析搜索结果?
如果为true,则搜索结果将添加到响应数据中。如果为false,则将标记(无论是否找到结果)添加到响应数据中。
改装测试

这是 LDAP“修改”操作。它可用于修改对象。它可用于添加、删除或替换属性的值。

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
条目名称
要修改的对象的可分辨名称,相对于线程绑定操作中的给定 DN
是的
改装测试
属性值操作码三倍。操作码可以是任何有效
的LDAP 操作码(添加删除删除替换)。 如果您不使用删除操作指定值,则将删除给定属性的所有值。 如果您确实在删除操作中指定了值,则只会删除给定的值。 如果此值不存在,则采样器将无法通过测试。


是的
比较

这是 LDAP“比较”操作。它可用于将给定属性的值与某个已知值进行比较。实际上,这主要用于检查给定的人是否是某个组的成员。在这种情况下,您可以将用户的 DN 作为给定值与groupOfNames类型的对象的“成员”属性中的值进行比较。如果比较操作失败,则此测试失败,错误代码为49

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
条目 DN
您要比较其属性的对象的当前专有名称,相对于线程绑定操作中的给定 DN。
是的
比较过滤器
形式为“属性=值
是的
^

访问日志采样器

AccessLogSampler 旨在读取访问日志并生成 http 请求。对于那些不熟悉访问日志的人,它是网络服务器维护它接受的每个请求的日志。这意味着每个图像、CSS 文件、JavaScript 文件、html 文件……

Tomcat 使用通用格式来记录访问日志。这意味着任何使用通用日志格式的网络服务器都可以使用 AccessLogSampler。使用常见日志格式的服务器包括:Tomcat、Resin、Weblogic 和 SunOne。常见的日志格式如下所示:

127.0.0.1 - - [21/Oct/2003:05:37:21 -0500] "GET /index.jsp?%2Findex.jsp= HTTP/1.1" 200 8343
解析器的当前实现只查看引号中包含 HTTP 协议方法之一(GETPUTPOSTDELETE等)的文本。其他所有内容都被剥离并忽略。例如,解析器完全忽略响应代码​​。

将来,过滤掉响应代码不为200的条目可能会更好。扩展采样器应该相当简单。您必须实现两个接口:

  • org.apache.jmeter.protocol.http.util.accesslog.LogParser
  • org.apache.jmeter.protocol.http.util.accesslog.Generator

AccessLogSampler 的当前实现使用生成器来创建新的 HTTPSampler。服务器名称、端口和获取图像由 AccessLogSampler 设置。接下来,使用整数1调用解析器,告诉它解析一个条目。之后, 调用 HTTPSampler.sample()来发出请求。

samp = (HTTPSampler) GENERATOR.generateRequest();
samp.setDomain(this.getDomain());
samp.setPort(this.getPort());
samp.setImageParser(this.isImageParser());
PARSER.parse(1);
res = samp.sample();
res.setSampleLabel(samp.toString());
LogParser中 所需的方法是:
  • 集合生成器(生成器)
  • 解析(整数)

实现Generator接口的类应该为所有方法提供具体的实现。有关如何实现任一接口的示例,请参阅 StandardGeneratorTCLogParser

Access Log Sampler 控制面板的屏幕截图
Access Log Sampler 控制面板的屏幕截图

(测试代码)

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
服务器
Web 服务器的域名或 IP 地址。
是的
协议
方案
否(默认为 http
港口
Web 服务器正在侦听的端口。
否(默认为 80)
日志解析器类
日志解析器类负责解析日志。
是(默认提供)
筛选
过滤器类用于过滤掉某些行。
日志文件的位置
访问日志文件的位置。
是的

TCLogParser为每个线程独立处理访问日志SharedTCLogParserOrderPreservingLogParser共享对文件的访问权限,即每个线程获取日志中的下一个条目 。

SessionFilter旨在跨线程处理 Cookie。它不会过滤掉任何条目,但会修改 cookie 管理器,以便给定 IP 的 cookie 一次由单个线程处理。如果两个线程尝试处理来自同一个客户端 IP 地址的样本,那么一个线程将被迫等待,直到另一个线程完成。

LogFilter旨在允许通过文件名和正则表达式过滤访问日志条目,并允许替换文件扩展名。但是,目前无法通过 GUI 进行配置,因此无法真正使用。

^

BeanShell 采样器

该采样器允许您使用 BeanShell 脚本语言编写采样器。

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 Sampler +Groovy 以提高性能、支持新的 Java 功能以及对 BeanShell 库的有限维护。

测试元素支持ThreadListenerTestListener接口方法。这些必须在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell 采样器还支持Interruptible接口。可以在脚本或 init 文件中定义 interrupt ()方法。

BeanShell Sampler 控制面板的屏幕截图
BeanShell Sampler 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。名称存储在脚本变量 Label 中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。这适用于脚本文件;对于 GUI 中定义的脚本,您可以在脚本本身中使用所需的任何变量和函数引用。参数存储在以下变量中:
参数
包含作为单个变量的参数的字符串
bsh.args
包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName中
脚本
要运行的 BeanShell 脚本。返回值(如果不是null)存储为采样器结果。
是(除非提供脚本文件)
NB 每个 Sampler 实例都有自己的 BeanShell 解释器,并且 Samplers 只能从单个线程调用

如果定义了属性“ beanshell.sampler.init ”,它将作为源文件的名称传递给解释器。这可用于定义常用方法和变量。bin 目录中有一个示例初始化文件:BeanShellSampler.bshrc

如果提供了脚本文件,则将使用该文件,否则将使用该脚本。

JMeter 在将脚本字段传递给解释器之前处理函数和变量引用,因此这些引用只会被解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这很可能导致语法错误。为了使用运行时变量,请使用适当的 props 方法,例如props.get("START.HMS"); props.put("PROP1","1234");
BeanShell 目前不支持 Java 5 语法,例如泛型和增强的 for 循环。

在调用脚本之前,在 BeanShell 解释器中设置了一些变量:

参数字段的内容被放入变量“参数”中。字符串也使用单个空格作为分隔符拆分为单独的标记,结果列表存储在字符串数组bsh.args中。

设置的 BeanShell 变量的完整列表如下:

  • log -记录器
  • 标签- 采样器标签
  • FileName - 文件名,如果有的话
  • 参数- 参数字段中的文本
  • bsh.args - 参数,如上所述拆分
  • SampleResult - 指向当前SampleResult的指针
  • 响应代码默认为200
  • ResponseMessage默认为“ OK
  • IsSuccess默认为true
  • ctx - JMeterContext
  • vars - JMeterVariables - 例如
    vars.get("VAR1");
    vars.put("VAR2","value");
    vars.remove("VAR3");
    vars.putObject("OBJ1",new Object());
  • 道具- JMeterProperties(类java.util.Properties) - 例如
    props.get("START.HMS");
    props.put("PROP1","1234");

脚本完成后,控制权返回给 Sampler,并将以下脚本变量的内容复制到SampleResult中的相应变量中:

  • 响应代码- 例如200
  • ResponseMessage - 例如“ OK
  • IsSuccess -

SampleResult ResponseData 是根据脚本的返回值设置的。如果脚本返回 null,它可以通过使用方法 SampleResult.setResponseData(data)直接设置响应,其中 data 是字符串或字节数组。数据类型默认为“文本”,但可以使用方法 SampleResult.setDataType(SampleResult.BINARY)设置为二进制。

SampleResult变量使脚本可以完全访问 SampleResult 中的所有字段方法。例如,脚本可以访问方法 setStopThread(boolean)setStopTest(boolean)。这是一个简单的(不是很有用!)示例脚本:

if (bsh.args[0].equalsIgnoreCase("StopThread")) {
    log.info("Stop Thread detected!");
    SampleResult.setStopThread(true);
}
return "Data from sample with Label "+Label;
//or
SampleResult.setResponseData("My data");
return null;

另一个例子:
确保属性beanshell.sampler.init=BeanShellSampler.bshrcjmeter.properties中定义。以下脚本将显示ResponseData字段中所有变量的值:

return getVariables();

有关各种类(JMeterVariablesSampleResult等)可用方法的详细信息,请查看 Javadoc 或源代码。但请注意,任何方法的滥用都可能导致难以发现的细微故障。

^

JSR223 采样器

JSR223 采样器允许使用 JSR223 脚本代码来执行创建/更新变量所需的示例或某些计算。

如果您不想在运行此采样器时生成SampleResult,请调用以下方法:
SampleResult.setIgnore();
此调用将产生以下影响:
  • SampleResult 将不会传递给 SampleListener,例如 View Results Tree、Summariser ...
  • SampleResult 不会在 Assertions 或 PostProcessors 中进行评估
  • SampleResult 将被评估以计算最后一个样本状态(${JMeterThread.last_sample_ok})和 ThreadGroup “在采样器错误后采取的行动”(自 JMeter 5.4 起)

JSR223 测试元素具有可以显着提高性能的特性(编译)。要从此功能中受益:

  • 使用脚本文件而不是内联它们。如果此功能在 ScriptEngine 上可用,这将使 JMeter 编译它们并缓存它们。
  • 或使用脚本文本并检查缓存已编译的脚本(如果有可用的属性)。
    使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用,因为缓存只会缓存第一个替换。而是使用脚本参数。
    要从缓存和编译中受益,用于脚本的语言引擎必须实现 JSR223 Compilable接口(Groovy 是其中之一,java、beanshell 和 javascript 不是)
    当使用 Groovy 作为脚本语言并且不检查缓存已编译脚本(如果可用)时(建议使用缓存),您应该设置此 JVM 属性-Dgroovy.use.classvalue=true ,因为从版本 2.4.6 开始出现 Groovy 内存泄漏,请参阅:
缓存大小由以下 JMeter 属性 ( jmeter.properties ) 控制:
jsr223.compiled_scripts_cache_size=100
BeanShell Sampler不同,解释器不会在调用之间保存。
使用脚本文件或脚本文本的 JSR223 测试元素 + 选中缓存已编译脚本(如果可用)如果 ScriptEngine 支持此功能,则现在编译该脚本,这可以极大地增强性能。
JSR223 采样器控制面板的屏幕截图
JSR223 Sampler 控制面板截图
JMeter 在将脚本字段传递给解释器之前处理函数和变量引用,因此这些引用只会被解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这很可能导致语法错误。为了使用运行时变量,请使用适当的 props 方法,例如
props.get("START.HMS");
props.put("PROP1","1234");

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
脚本语言
要使用的 JSR223 脚本语言的名称。
除了下拉列表中显示的语言之外,还支持其他语言。如果在 JMeter lib 目录中安装了适当的 jar,则其他可能可用。
请注意,某些语言(例如 Velocity)可能对 JSR223 变量使用不同的语法,例如
$log.debug("Hello " + $vars.get("a"));
为速度。
是的
脚本文件
用作 JSR223 脚本的文件名,如果使用相对文件路径,则它将相对于“ user.dir ”系统属性引用的目录
参数
要传递给脚本文件或脚本的参数列表。
缓存已编译的脚本(如果可用)
如果选中(建议)并且使用的语言支持Compilable接口(Groovy 是其中之一,java、beanshell 和 javascript 不是),JMeter 将编译脚本并使用它的 MD5 哈希作为唯一缓存键缓存它
脚本
要传递给 JSR223 语言的脚本
是(除非提供脚本文件)

如果提供了脚本文件,则将使用该文件,否则将使用该脚本。

在调用脚本之前,会设置一些变量。请注意,这些是 JSR223 变量 - 即它们可以直接在脚本中使用。

  • log -记录器
  • 标签- 采样器标签
  • FileName - 文件名,如果有的话
  • 参数- 参数字段中的文本
  • args - 参数,如上所述拆分
  • SampleResult - 指向当前SampleResult的指针
  • sampler - ( Sampler ) - 指向当前 Sampler 的指针
  • ctx - JMeterContext
  • vars - JMeterVariables - 例如
    vars.get("VAR1");
    vars.put("VAR2","value");
    vars.remove("VAR3");
    vars.putObject("OBJ1",new Object());
  • 道具- JMeterProperties(类java.util.Properties) - 例如
    props.get("START.HMS");
    props.put("PROP1","1234");
  • OUT - System.out - 例如OUT.println("message")

SampleResult ResponseData 是 根据脚本的返回值设置的。如果脚本返回null,它可以通过使用方法 SampleResult.setResponseData(data)直接设置响应,其中 data 是字符串或字节数组。数据类型默认为“文本”,但可以使用方法 SampleResult.setDataType(SampleResult.BINARY)设置为二进制。

SampleResult 变量使脚本可以完全访问 SampleResult 中的所有字段和方法。例如,脚本可以访问方法 setStopThread(boolean)setStopTest(boolean)

与 BeanShell 采样器不同,JSR223 采样器不通过脚本变量设置ResponseCodeResponseMessage和示例状态。目前,改变这些的唯一方法是通过SampleResult方法:

  • SampleResult.setSuccessful(true/false)
  • SampleResult.setResponseCode("代码")
  • SampleResult.setResponseMessage("消息")
^

TCP 采样器

TCP 采样器打开与指定服务器的 TCP/IP 连接。然后它发送文本,并等待响应。

如果选择“重用连接”,则在同一线程中的采样器之间共享连接,前提是使用完全相同的主机名字符串和端口。不同的主机/端口组合将使用不同的连接,不同的线程也是如此。如果同时选择了“重用连接”和“关闭连接”,则在运行采样器后将关闭套接字。在下一个采样器上,将创建另一个套接字。您可能希望在每个线程循环结束时关闭一个套接字。

如果检测到错误 - 或未选择“重用连接” - 套接字将关闭。另一个套接字将在下一个示例中重新打开。

以下属性可用于控制其操作:

tcp.status.prefix
状态编号之前的文本
tcp.status.suffix
状态编号后面的文本
tcp.status.properties
将状态代码转换为消息的属性文件的名称
tcp.handler
TCP 处理程序类的名称(默认TCPClientImpl) - 仅在 GUI 上未指定时使用
处理连接的类由 GUI 定义,没有属性tcp.handler如果未找到,则在包org.apache.jmeter.protocol.tcp.sampler中搜索该类。

用户可以提供自己的实现。该类必须扩展org.apache.jmeter.protocol.tcp.sampler.TCPClient

当前提供了以下实现。

  • TCPClientImpl
  • BinaryTCPClientImpl
  • LengthPrefixedBinaryTCPClientImpl
实现的行为如下:
TCPClientImpl
这个实现是相当基本的。读取响应时,如果通过设置属性tcp.eolByte定义,它将一直读取到行字节的末尾,否则直到输入流的末尾。您可以通过设置tcp.charset来控制字符集编码,这将默认为平台默认编码。
BinaryTCPClientImpl
此实现将必须是十六进制编码字符串的 GUI 输入转换为二进制,并在读取响应时执行相反的操作。读取响应时,它会一直读取到消息字节的结尾,如果这是通过设置属性tcp.BinaryTCPClient.eomByte定义的,否则直到输入流的结尾。
LengthPrefixedBinaryTCPClientImpl
此实现通过在二进制消息数据前加上二进制长度字节来扩展 BinaryTCPClientImpl。长度前缀默认为 2 个字节。这可以通过设置属性tcp.binarylength.prefix.length来改变。
超时处理
如果设置了超时,读取将在超时时终止。因此,如果您使用的是eolByte / eomByte,请确保超时时间足够长,否则读取将提前终止。
响应处理
如果定义了tcp.status.prefix,则在响应消息中搜索其后一直到后缀的文本。如果找到任何此类文本,则将其用于设置响应代码。然后从属性文件(如果提供)中获取响应消息。
前缀和后缀的用法
例如,如果前缀 = " [ " 和后缀 = " ] ",则以下响应:
[J28] XI123,23,GBP,CR
会有响应代码J28
“ 400 ”-“ 499 ”和“ 500 ”-“ 599 ” 范围内的响应码目前视为失败;所有其他人都是成功的。[这需要可配置!]
提供的 TCP 实现不使用登录名/密码。

套接字在测试运行结束时断开。
TCP 采样器控制面板的屏幕截图
TCP采样器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
TCPClient 类名
TCPClient 类的名称。默认为属性tcp.handler,失败TCPClientImpl
服务器名称或 IP
TCP 服务器的名称或 IP
是的
端口号
使用的端口
是的
重用连接
如果选中,则连接保持打开状态。否则在读取数据时关闭。
是的
关闭连接
如果选中,则连接将在运行采样器后关闭。
是的
SO_LINGER
创建套接字时,以秒为单位启用/禁用SO_LINGER指定的逗留时间。如果将“ SO_LINGER ”值设置为0,则可以防止大量套接字处于TIME_WAIT状态。
行尾(EOL)字节值
行尾的字节值,将其设置为-128+127范围之外的值以跳过eol检查。您也可以使用eolByte属性在jmeter.properties文件中设置它。如果同时在 TCP Sampler Config 和jmeter.properties文件中设置此项,将使用 TCP Sampler Config 中的设置值。
连接超时
连接超时(毫秒,0禁用)。
响应超时
响应超时(毫秒,0禁用)。
设置无延迟
请参阅java.net.Socket.setTcpNoDelay()。如果选中,这将禁用 Nagle 算法,否则将使用 Nagle 算法。
是的
要发送的文本
要发送的文本
是的
登录用户
用户名 - 默认实现不使用
密码
密码 - 默认实现不使用(注意在测试计划中未加密存储)
^

JMS 发布者¶

JMS Publisher 将消息发布到给定的目的地(主题/队列)。对于那些不熟悉 JMS 的人来说,它是用于消息传递的 J2EE 规范。市场上有许多 JMS 服务器和几个开源选项。


JMeter 不包含任何 JMS 实现 jar;这必须从 JMS 提供程序下载并放入 lib 目录
JMS Publisher 控制面板的屏幕截图
JMS Publisher 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
使用 JNDI 属性文件
使用jndi.properties。请注意,该文件必须位于类路径中——例如通过更新user.classpath JMeter 属性。如果未选择此选项,JMeter 将使用“ JNDI Initial Context Factory ”和“ Provider URL ”字段来创建连接。
是的
JNDI 初始上下文工厂
上下文工厂的名称
提供者网址
JMS 提供程序的 URL
是的,除非使用 jndi.properties
目的地
消息目的地(主题或队列名称)
是的
设置
目标设置类型。使用At startup,目标名称是静态的(即在测试期间始终使用相同的名称),使用Each sample,目标名称是动态的,并且在每个样本处进行评估(即目标名称可能是一个变量)
是的
验证
JMS 提供者的身份验证要求
是的
用户
用户名
密码
密码(注意这是在测试计划中未加密存储的)
到期
消息过时之前的过期时间(以毫秒为单位)。如果不指定过期时间,则默认值为0(永不过期)。
优先事项
消息的优先级。从0(最低)到9(最高)有十个优先级。如果您未指定优先级,则默认级别为4
重新连接错误代码(正则表达式)
强制重新连接的 JMSException 错误代码的正则表达式。如果为空,则不会重新连接
要聚合的样本数
要聚合的样本数
是的
消息来源
从哪里获取消息:
从文件
表示引用的文件将被所有样本读取和重用。如果文件名更改,则自 JMeter 3.0 起重新加载
下面指定的文件夹中的随机文件
表示将从下面指定的文件夹中选择一个随机文件,此文件夹必须包含扩展名为.dat的文件(用于字节消息)或扩展名为.txt.obj的文件(用于对象或文本消息)
文本区
用于文本或对象消息的消息
是的
消息类型
文本、地图、对象消息或字节消息
是的
内容编码
指定读取消息源文件的编码:
原始
文件不支持变量,并使用默认系统字符集加载它。
默认
使用默认系统编码加载文件,但依赖 XML prolog 的 XML 除外。如果文件包含变量,它们将被处理。
标准字符集
指定的编码(有效与否)用于读取文件和处理变量
是的
使用非持久交付模式?
是否设置DeliveryMode.NON_PERSISTENT(默认为false
JMS 属性
JMS 属性是特定于底层消息传递系统的属性。您可以设置名称、值和值的类(类型)。默认类型是String。例如:对于 WebSphere 5.1 Web 服务,您需要设置 JMS 属性 targetService 以通过 JMS 测试 Web 服务。

对于 MapMessage 类型,JMeter 将源读取为文本行。每行必须有 3 个字段,以逗号分隔。这些字段是:

  • 条目名称
  • 对象类名,例如“ String ”(如果未指定,则假定为java.lang包)
  • 对象字符串值
值(字符串)
name,String,Example
size,Integer,1234
Object 消息的实现和工作方式如下:
  • 将包含您的对象及其依赖项的 JAR 放在jmeter_home/lib/文件夹中
  • 使用 XStream 将对象序列化为 XML
  • 将结果放入以.txt.obj为后缀的文件中,或将 XML 内容直接放入文本区域
请注意,如果消息在文件中,则不会发生属性替换,而如果您使用文本区域则会发生。

下表显示了一些在配置 JMS 时可能有用的值:

Apache ActiveMQ 评论
上下文工厂org.apache.activemq.jndi.ActiveMQInitialContextFactory.
提供者网址虚拟机://本地主机
提供者网址vm:(经纪人:(vm://localhost)?persistent=false)禁用持久性
队列参考动态队列/队列名称 动态定义QUEUENAME 到 JNDI
主题参考动态主题/主题名称 动态定义TOPICNAME 到 JNDI
^

JMS 订阅者

JMS 订阅者将订阅给定目的地(主题或队列)中的消息。对于那些不熟悉 JMS 的人来说,它是用于消息传递的 J2EE 规范。市场上有许多 JMS 服务器和几个开源选项。


JMeter 不包含任何 JMS 实现 jar;这必须从 JMS 提供程序下载并放入 lib 目录
JMS 订阅者控制面板的屏幕截图
JMS 订阅者控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
使用 JNDI 属性文件
使用jndi.properties。请注意,该文件必须位于类路径中——例如通过更新user.classpath JMeter 属性。如果未选择此选项,JMeter 将使用“ JNDI Initial Context Factory ”和“ Provider URL ”字段来创建连接。
是的
JNDI 初始上下文工厂
上下文工厂的名称
提供者网址
JMS 提供程序的 URL
目的地
消息目的地(主题或队列名称)
是的
持久订阅 ID
用于持久订阅的 ID。首次使用时,如果 JMS 提供程序尚不存在相应的队列,它将自动生成。
客户编号
使用持久订阅时要使用的客户端 ID。当你有多个线程时,一定要添加一个像${__threadNum}这样的变量。
JMS 选择器
JMS 规范定义的消息选择器,仅提取符合选择器条件的消息。语法使用 SQL 92 的子部分。
设置
目标设置类型。使用At startup,目标名称是静态的(即在测试期间始终同名),使用Each sample,目标名称是动态的,并在每个样本处进行评估(即目标名称可能是一个变量)
是的
验证
JMS 提供者的身份验证要求
是的
用户
用户名
密码
密码(注意这是在测试计划中未加密存储的)
要聚合的样本数
要聚合的样本数
是的
保存回复
采样器是否应该存储响应。如果不是,则仅返回响应长度。
是的
超时
指定要应用的超时时间,以毫秒为单位。0 = 无。这是总体聚合超时,而不是每个样本。
是的
客户
使用哪个客户端实现。它们都创建可以读取消息的连接。但是,它们使用不同的策略,如下所述:
MessageConsumer.receive()
为每个请求的消息调用receive() 。保留样本之间的连接,但除非采样器处于活动状态,否则不会获取消息。这最适合队列订阅。
消息监听器.onMessage()
建立一个将所有传入消息存储在队列中的侦听器。采样器完成后,侦听器保持活动状态。这最适合主题订阅。
是的
在样本之间停止?
如果选中,则 JMeter在每个样本结束时调用Connection.stop() (并在每个样本之前调用start())。在多个样本/线程连接到同一个队列的某些情况下,这可能很有用。如果未选中,JMeter 在线程开始时调用Connection.start() ,直到线程结束才 调用stop() 。
是的
分隔器
当消息多于一个时,分隔符用于分隔消息(与设置要聚合的样本数有关)。请注意,\n\r\t被接受。
重新连接错误代码(正则表达式)
强制重新连接的 JMSException 错误代码的正则表达式。如果为空,则不会重新连接
错误之间的暂停(毫秒)
发生错误时订阅服务器将暂停(以毫秒为单位)
^

JMS 点对点

此采样器通过点对点连接(队列)发送和接收 JMS 消息。它与发布/订阅消息不同,通常用于处理事务。

request_only通常用于对 JMS 系统施加负载。当您想要测试处理发送到请求队列的消息的 JMS 服务的响应时间时,将使用
request_reply ,因为此模式将等待此服务发送的回复队列上的响应。
浏览返回当前队列深度,即队列中的消息数。
read从队列中读取消息(如果有)。
clear清除队列,即从队列中删除所有消息。

JMeter 在创建队列连接时使用属性java.naming.security.[principal|credentials] - 如果存在的话。如果不需要此行为,请设置 JMeter 属性 JMSSampler.useSecurity.properties=false


JMeter 不包含任何 JMS 实现 jar;这必须从 JMS 提供程序下载并放入 lib 目录
JMS 点对点控制面板的屏幕截图
JMS点对点控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
队列连接工厂
用于连接到消息传递系统的队列连接工厂的 JNDI 名称。
是的
JNDI 名称请求队列
这是消息发送到的队列的 JNDI 名称。
是的
JNDI 名称回复队列
接收队列的 JNDI 名称。如果此处提供了一个值并且通信方式是请求响应 ,则将监视此队列以获取对发送的请求的响应。
要聚合的样本数
要聚合的样本数。仅适用于沟通方式阅读。
是的
JMS 选择器
JMS 规范定义的消息选择器,仅提取符合选择器条件的消息。语法使用 SQL 92 的子部分。
沟通方式
通信方式可以是Request Only(也称为 Fire and Forget)、Request ResponseReadBrowseClear
仅请求
只会发送消息,不会监控回复。因此,它可以用来给系统增加负载。
请求响应
将发送消息并监视它收到的回复。行为取决于 JNDI 名称回复队列的值。如果 JNDI 名称回复队列有值,则此队列用于监视结果。请求和回复的匹配是通过请求的消息 id 和回复的相关 id 完成的。如果 JNDI 名称回复队列为空,则临时队列将用于请求者和服务器之间的通信。这与固定回复队列有很大不同。使用临时队列,发送线程将阻塞,直到收到回复消息。使用请求响应模式,您需要有一个服务器来侦听发送到请求队列的消息并将回复发送到message.getJMSReplyTo()引用的队列。
将从没有附加侦听器的传出队列中读取消息。这可以方便地进行测试。如果您需要在没有绑定文件的情况下处理队列(如果使用 jmeter-jms-skip-jndi 库),则可以使用此方法,该方法仅适用于 JMS 点对点采样器。如果使用绑定文件,还可以使用 JMS 订阅者采样器从队列中读取。
浏览
将确定当前队列深度而不从队列中删除消息,返回队列中的消息数。
清除
将清除队列,即从队列中删除所有消息。
是的
使用备用字段进行消息关联
这些复选框选择将用于将响应消息与原始请求匹配的字段。
使用请求消息 ID
如果选中,将使用请求 JMSMessageID,否则将使用请求 JMSCorrelationID。在后一种情况下,必须在请求中指定相关 ID。
使用响应消息 ID
如果选择,将使用响应 JMSMessageID,否则将使用响应 JMSCorrelationID。
有两种常用的 JMS 相关模式:
JMS 相关 ID 模式
即在其相关ID上匹配请求和响应=>取消选中两个复选框,并提供相关ID。
JMS 消息 ID 模式
即,将请求消息 ID 与响应相关 ID 匹配 => 仅选择“使用请求消息 ID”。
在这两种情况下,JMS 应用程序都负责根据需要填充相关 ID。
如果使用同一个队列来发送和接收消息,那么响应消息将与请求消息相同。在这种情况下,要么提供相关 id 并清除两个复选框;或同时选中这两个复选框以使用消息 ID 进行关联。这对于检查原始 JMS 吞吐量很有用。
是的
超时
回复消息的超时时间(以毫秒为单位)。如果在指定时间内没有收到回复,则特定测试用例失败,超时后收到的特定回复消息将被丢弃。默认值为2000毫秒。0表示没有超时。
是的
到期
消息过时之前的过期时间(以毫秒为单位)。如果不指定过期时间,则默认值为0(永不过期)。
优先事项
消息的优先级。从0(最低)到9(最高)有十个优先级。如果您未指定优先级,则默认级别为4
使用非持久交付模式?
是否设置DeliveryMode.NON_PERSISTENT
是的
内容
消息的内容。
JMS 属性
JMS 属性是特定于底层消息传递系统的属性。您可以设置名称、值和值的类(类型)。默认类型是String。例如:对于 WebSphere 5.1 Web 服务,您需要设置 JMS 属性 targetService 以通过 JMS 测试 Web 服务。
初始上下文工厂
Initial Context Factory 是用于查找 JMS 资源的工厂。
JNDI 属性
JNDI 属性是底层 JNDI 实现的特定属性。
提供者网址
JMS 提供程序的 URL。
^

JUnit 请求

当前的实现支持标准的 JUnit 约定和扩展。它还包括oneTimeSetUponeTimeTearDown等扩展。采样器的工作方式与 Java 请求类似,但存在一些差异。
  • 它不使用 JMeter 的测试接口,而是扫描 jar 文件以查找扩展 JUnit 的TestCase类的类。这包括任何类或子类。
  • JUnit 测试 jar 文件应该放在jmeter/lib/junit而不是/lib目录中。您还可以使用“ user.classpath ”属性来指定在哪里查找TestCase类。
  • JUnit 采样器不使用名称/值对进行配置,如Java Request。采样器假定setUptearDown将正确配置测试。
  • 采样器仅测量测试方法的经过时间,不包括setUptearDown
  • 每次调用测试方法时,JMeter 都会将结果传递给监听器。
  • oneTimeSetUponeTimeTearDown的支持是作为一种方法完成的。由于 JMeter 是多线程的,我们不能像 Maven 那样调用oneTimeSetUp / oneTimeTearDown
  • 采样器将意外异常报告为错误。标准的 JUnit 测试运行器和 JMeter 的实现之间有一些重要的区别。JMeter 不是为每个测试创建一个新的类实例,而是为每个采样器创建一个实例并重用它。这可以通过复选框“为每个样本创建一个新实例”来更改。
采样器的当前实现将首先尝试使用字符串构造函数创建一个实例。如果测试类未声明字符串构造函数,则采样器将查找空构造函数。下面的例子:
JUnit 构造函数
空构造函数:
public class myTestCase {
  public myTestCase() {}
}
字符串构造函数:
public class myTestCase {
  public myTestCase(String text) {
    super(text);
  }
}
默认情况下,JMeter 将为成功/失败代码和消息提供一些默认值。用户应该定义一组唯一的成功和失败代码,并在所有测试中统一使用它们。

一般准则

如果您使用setUptearDown,请确保将方法声明为 public。否则,测试可能无法正常运行。
以下是编写 JUnit 测试的一些通用指南,以便它们与 JMeter 一起工作。由于 JMeter 运行多线程,因此记住某些事情很重要。
  • 编写setUptearDown方法,使它们是线程安全的。这通常意味着避免使用静态成员。
  • 使测试方法成为离散的工作单元,而不是长序列的动作。通过将测试方法保持为离散操作,可以更轻松地组合测试方法来创建新的测试计划。
  • 避免使测试方法相互依赖。由于 JMeter 允许对测试方法进行任意排序,因此运行时行为不同于默认的 JUnit 行为。
  • 如果测试方法是可配置的,请注意属性的存储位置。建议从 Jar 文件中读取属性。
  • 每个采样器都会创建一个测试类的实例,因此请编写您的测试,以便设置发生在oneTimeSetUponeTimeTearDown中。
JUnit 请求控制面板的屏幕截图
JUnit 请求的控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
搜索 JUnit4 注释
选择此项以搜索 JUnit4 测试(@Test注释)
是的
包过滤器
要显示的包的逗号分隔列表。例如,org.apache.jmeterjunit.framework
班级名称
JUnit 测试类的完全限定名称。
是的
构造函数字符串
字符串传递给字符串构造函数。如果设置了字符串,则采样器将使用字符串构造函数而不是空构造函数。
测试方法
测试的方法。
是的
成功讯息
指示成功意味着什么的描述性消息。
成功代码
表示测试成功的唯一代码。
失败信息
指示失败意味着什么的描述性消息。
故障码
表示测试失败的唯一代码。
错误信息
错误的描述。
错误代码
一些错误代码。不需要是唯一的。
不要调用 setUp 和 tearDown
设置采样器不调用setUptearDown。默认情况下,应该调用setUptearDown 。不调用这些方法可能会影响测试并使其不准确。此选项只能与调用oneTimeSetUponeTimeTearDown 一起使用。如果选择的方法是oneTimeSetUponeTimeTearDown,则应选中此选项。
是的
附加断言错误
是否将断言错误附加到响应消息。
是的
附加运行时异常
是否将运行时异常附加到响应消息。仅适用于未选择“附加断言错误”的情况。
是的
每个样本创建一个新实例
是否为每个样本创建一个新的 JUnit 实例。默认为 false,这意味着 JUnit TestCase被创建并重用。
是的

可识别以下 JUnit4 注释:

@测试
用于查找测试方法和类。支持“预期”和“超时”属性。
@前
与JUnit3中的setUp()处理相同
@后
与JUnit3中的tearDown()处理相同
@BeforeClass , @AfterClass
被视为测试方法,因此它们可以根据需要独立运行
请注意,JMeter 当前直接运行测试方法,而不是将其留给 JUnit。这是为了允许从采样时间中排除setUp / tearDown方法。因此,采样器时间不包括调用setUp / tearDown方法及其基于注释的替代方法所花费的时间。
^

邮件阅读器采样器

Mail Reader Sampler 可以使用 POP3(S) 或 IMAP(S) 协议读取(并可选择删除)邮件消息。

Mail Reader Sampler 控制面板的屏幕截图
Mail Reader Sampler 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
服务器类型
提供者使用的协议:例如pop3pop3simapimaps。或另一个代表服务器协议的字符串。例如用于只读邮件文件提供程序的文件POP3 和 IMAP 的实际提供程序名称是pop3imap
是的
服务器
服务器的主机名或 IP 地址。请参阅下文以使用文件协议。
是的
港口
用于连接服务器的端口(可选)
用户名
用户登录名
密码
用户登录密码(注意这是在测试计划中未加密存储的)
文件夹
要使用的 IMAP(S) 文件夹。请参阅下文以使用文件协议。
是,如果使用 IMAP(S)
要检索的消息数
设置此项以检索所有或部分消息
是的
仅获取标头
如果选中,则仅检索邮件标头。
是的
从服务器删除消息
如果设置,消息将在检索后被删除
是的
使用 MIME 存储消息
是否将消息存储为 MIME。如果是这样,则整个原始消息都存储在响应数据中;标头未存储,因为它们在数据中可用。如果不是,则将消息标头存储为响应标头。一些标题(DateToFromSubject)存储在正文中。
是的
不使用安全功能
表示与服务器的连接不使用任何安全协议。
使用 SSL
表示与服务器的连接必须使用 SSL 协议。
使用 StartTLS
指示与服务器的连接应尝试启动 TLS 协议。
实施 StartTLS
如果服务器没有启动 TLS 协议,连接将被终止。
信任所有证书
选择后,它将接受独立于 CA 的所有证书。
使用本地信任库
选择后,它将只接受本地信任的证书。
本地信任库
包含受信任证书的文件的路径。相对路径根据当前目录解析。
如果失败,则针对包含测试脚本(JMX 文件)的目录。
您可以通过将此处描述的任何属性添加到user.properties来传递与邮件相关的环境属性。

消息存储为主采样器的子样本。多部分消息部分存储为消息的子样本。

“文件”协议
特殊处理:文件JavaMail 提供程序可用于从文件中读取原始消息。服务器字段用于指定文件夹父级路径。单个消息文件应以名称n.msg存储,其中n是消息编号。或者,服务器字段可以是包含单个消息的文件的名称。当前的实现非常基础,主要用于调试目的。

^

流控制动作 (原为:测试动作)

Flow Control Action 采样器是一个用于条件控制器的采样器。测试元素不会生成样本,而是暂停或停止选定的目标。

这个采样器也可以与事务控制器一起使用,因为它允许在不需要生成示例的情况下包含暂停。对于可变延迟,将暂停时间设置为零,并添加一个 Timer 作为子项。

停止”动作在完成任何正在进行的样本后停止线程或测试。“立即停止”动作停止测试,无需等待样品完成;它将中断任何活动样本。如果某些线程未能在 5 秒的时间限制内停止,则会在 GUI 模式下显示一条消息。您可以尝试使用Stop命令来查看这是否会停止线程,但如果没有,您应该退出 JMeter。在 CLI 模式下,如果某些线程未能在 5 秒的时间限制内停止,JMeter 将退出。

可以使用 JMeter 属性jmeterengine.threadstop.wait更改等待时间。时间以毫秒为单位。

流控制操作控制面板的屏幕截图
流量控制动作控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
目标
当前线程/所有线程(忽略暂停转到下一个循环迭代
是的
行动
暂停/停止/立即停止/进入下一个循环迭代
是的
期间
暂停多长时间(毫秒)
是,如果选择了暂停
^

SMTP 采样器

SMTP 采样器可以使用 SMTP/SMTPS 协议发送邮件消息。可以为连接设置安全协议(SSL 和 TLS)以及用户身份验证。如果使用安全协议,则会对服务器证书进行验证。
有两种方法可以处理此验证:

信任所有证书
这将忽略证书链验证
使用本地信任库
使用此选项,证书链将根据本地信任库文件进行验证。
SMTP 采样器控制面板的屏幕截图
SMTP Sampler 控制面板的屏幕截图

参数

属性
描述
必需的
服务器
服务器的主机名或 IP 地址。请参阅下文以使用文件协议。
是的
港口
用于连接服务器的端口。默认值为:SMTP=25、SSL=465、StartTLS=587
连接超时
以毫秒为单位的连接超时值(套接字级别)。默认为无限超时。
读取超时
以毫秒为单位读取超时值(套接字级别)。默认为无限超时。
地址来自
将出现在电子邮件中的发件人地址
是的
写给
目标电子邮件地址(多个值,以“ ; ”分隔)
是,除非指定了 CC 或 BCC
抄送地址
抄送目的地电子邮件地址(多个值以“ ; ”分隔)
密件抄送地址
密件抄送目的地电子邮件地址(多个值以“ ; ”分隔)
地址回复
备用回复地址(多个值用“ ; ”分隔)
使用身份验证
指示 SMTP 服务器是否需要用户身份验证
用户名
用户登录名
密码
用户登录密码(注意这是在测试计划中未加密存储的)
不使用安全功能
表示与 SMTP 服务器的连接不使用任何安全协议。
使用 SSL
表示与 SMTP 服务器的连接必须使用 SSL 协议。
使用 StartTLS
指示与 SMTP 服务器的连接应尝试启动 TLS 协议。
实施 StartTLS
如果服务器没有启动 TLS 协议,连接将被终止。
信任所有证书
选择后,它将接受独立于 CA 的所有证书。
使用本地信任库
选择后,它将只接受本地信任的证书。
本地信任库
包含受信任证书的文件的路径。相对路径根据当前目录解析。
如果失败,则针对包含测试脚本(JMX 文件)的目录。
覆盖系统 SSL/TLS 协议
将自定义 SSL/TLS 协议指定为空格分隔列表以用于握手示例TLSv1 TLSv1.1 TLSv1.2。默认为所有支持的协议。
学科
电子邮件主题。
抑制主题标题
如果选中,则发送的邮件中会省略“主题: ”标题。这与发送一个空的“主题: ”标题不同,尽管某些电子邮件客户端可能会以相同的方式显示它。
在主题中包含时间戳
在主题行中包含System.currentTimemillis() 。
添加标题
可以使用此按钮定义其他标题。
信息
消息正文。
发送普通正文(即不是多部分/混合)
如果选中,则尽可能将正文作为普通消息发送,即不是multipart/mixed。如果消息体为空且只有一个文件,则将文件内容作为消息体发送。
注意:如果消息正文不为空,并且至少有一个附件,则正文以multipart/mixed形式发送。
附加文件
要附加到消息的文件。
发送 .eml
如果设置,将发送.eml文件而不是SubjectMessageAttach file(s)字段中的条目
计算消息大小
计算消息大小并将其存储在样本结果中。
启用调试日志记录?
如果设置,则“ mail.debug ”属性设置为“ true
^

操作系统进程采样器

OS Process Sampler 是一个可用于在本地机器上执行命令的采样器。
它应该允许执行任何可以从命令行运行的命令。
可以启用返回码的验证,并且可以指定预期的返回码。

请注意,OS shell 通常提供命令行解析。这在操作系统之间有所不同,但通常外壳会在空白处拆分参数。一些 shell 扩展了通配符文件名;有些没有。引用机制也因操作系统而异。采样器故意不进行任何解析或引用处理。命令及其参数必须以可执行文件预期的形式提供。这意味着采样器设置不能在操作系统之间移植。

许多操作系统都有一些内置命令,这些命令不作为单独的可执行文件提供。例如,Windows DIR命令是命令解释器 ( CMD.EXE ) 的一部分。这些内置程序不能作为独立程序运行,而必须作为参数提供给适当的命令解释器。

例如,Windows 命令行:DIR C:\TEMP需要指定如下:

命令:
命令
参数 1:
/C
参数 2:
目录
参数 3:
C:\温度
OS Process Sampler 控制面板的屏幕截图
OS Process Sampler 控制面板的屏幕截图

参数

属性
描述
必需的
命令
要执行的程序名称。
是的
工作目录
执行命令的目录,默认为“ user.dir ”系统属性引用的文件夹
命令参数
传递给程序名称的参数。
环境参数
运行命令时添加到环境中的键/值对。
标准输入 (stdin)
要从中获取输入的文件的名称 ( STDIN )。
标准输出(标准输出
标准输出 ( STDOUT ) 的输出文件的名称。如果省略,则捕获输出并将其作为响应数据返回。
标准错误 (stderr)
标准错误 ( STDERR ) 的输出文件的名称。如果省略,则捕获输出并将其作为响应数据返回。
检查返回码
如果选中,采样器会将返回代码与预期返回代码进行比较。
预期返回码
系统调用的预期返回码,如果选中“检查返回码”则需要。注意 500 在 JMeter 中用作错误指示器,因此您不应使用它。
超时
命令超时,以毫秒为单位,默认为0,表示没有超时。如果在命令完成之前超时到期,JMeter 将尝试终止操作系统进程。
^

MongoDB 脚本(已弃用)

此采样器允许您向 MongoDB 发送请求。

在使用它之前,您需要设置一个 MongoDB Source Config Configuration 元素

此元素当前使用com.mongodb.DB#eval,它采用全局写锁,对数据库造成性能影响,请参阅db.eval()。所以最好避免使用这个元素进行负载测试,而是使用使用 MongoDBHolder 的 JSR223+Groovy脚本。MongoDB Script 更适合功能测试或测试设置(设置/拆卸线程)
MongoDB 脚本控制面板的屏幕截图(已弃用)
MongoDB 脚本控制面板的屏幕截图(已弃用)

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
MongoDB 源代码
MongoDB 连接绑定到的 JMeter 变量的名称。这必须与MongoDB Source Config 的“ MongoDB Source ”字段一致。
是的
数据库名称
数据库名称,将在您的脚本中使用
是的
用户名
密码
脚本
Mongo 脚本,因为它将在 MongoDB shell 中使用
是的
确保变量名称在测试计划中是唯一的。
^
^

螺栓请求

该采样器允许您通过 Bolt 协议运行 Cypher 查询。

在使用它之前,您需要设置螺栓连接配置

每个请求都使用从池中获取的连接,并在采样器完成时将其返回到池中。连接池大小使用驱动程序默认值 (~100),目前不可配置。

测量的响应时间对应于“完整”查询执行,包括执行密码查询的时间和使用数据库发回的结果的时间。

Bolt 请求控制面板的屏幕截图
Bolt 请求控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
评论
免费文本以获取更多详细信息。
密码声明
要执行的查询。
是的
参数
参数值,JSON 格式。
记录查询结果
是否将查询结果数据添加到采样器响应中(默认为 false)。请注意,激活它会产生内存开销,请明智地使用它。
强烈建议使用查询参数,允许数据库缓存和重用执行计划。
^
^

18.2 逻辑控制器


逻辑控制器确定采样器的处理顺序。

简单控制器

Simple Logic Controller 可让您组织采样器和其他逻辑控制器。与其他逻辑控制器不同,该控制器不提供存储设备以外的功能。

简单控制器控制面板的屏幕截图
简单控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
使用简单控制器

下载此示例(参见图 6)。在这个例子中,我们创建了一个发送两个 Ant HTTP 请求和两个 Log4J HTTP 请求的测试计划。我们通过将 Ant 和 Log4J 请求放在简单逻辑控制器中来对它们进行分组。请记住,简单逻辑控制器对 JMeter 如何处理您添加到其中的控制器没有影响。因此,在此示例中,JMeter 按以下顺序发送请求:Ant Home Page、Ant News Page、Log4J Home Page、Log4J History Page。

请注意,文件报告器配置为将结果存储在当前目录中 名为“ simple-test.dat ”的文件中。

图 6 简单控制器示例
图 6 简单控制器示例
^

循环控制器

如果您将 Generative 或 Logic Controllers 添加到 Loop Controller,除了您为 Thread Group 指定的循环值之外,JMeter 还将循环通过它们一定次数。例如,如果您将一个 HTTP 请求添加到循环计数为 2 的 Loop Controller,并将 Thread Group 循环计数配置为 3,那么 JMeter 将总共发送2 * 3 = 6 个HTTP 请求。

JMeter 会将循环索引公开为名为__jm__<Name of your element>__idx的变量。例如,如果您的循环控制器名为 LC,那么您可以通过${__jm__LC__idx}访问循环索引。索引从 0 开始

Loop Controller 控制面板的屏幕截图
Loop Controller 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
循环计数
每次通过测试运行时,此控制器的子元素将被迭代的次数。

-1相当于检查Forever切换。

特殊情况:嵌入在线程组 元素中的循环控制器的行为略有不同。除非设置为永远,否则它会在完成给定次数的迭代后停止测试。

在此字段中使用函数时,请注意它可能会被多次评估。使用__Random的示例将为 Loop Controller 的每个子采样器将其评估为不同的值,并导致不良行为。
是的,除非选中“永远”
循环示例

下载此示例(参见图 4)。在这个例子中,我们创建了一个测试计划,它只发送一次特定的 HTTP 请求,然后发送五次另一个 HTTP 请求。

图 4 - 循环控制器示例
图 4 - 循环控制器示例

我们为单个线程和循环计数值配置了线程组。我们没有让线程组控制循环,而是使用了循环控制器。您可以看到我们向线程组添加了一个 HTTP 请求,向循环控制器添加了另一个 HTTP 请求。我们将循环控制器配置为循环计数值为 5。

JMeter 将按以下顺序发送请求:主页、新闻页、新闻页、新闻页、新闻页和新闻页。

请注意,文件报告器被配置为将结果存储在当前目录中名为“ loop-test.dat ”的文件中。
^

一次控制器

Once Only Logic Controller 告诉 JMeter 每个线程只处理其中的控制器一次,并在通过测试计划的进一步迭代期间传递其下的任何请求。

Once Only Controller 现在将始终在任何循环父控制器的第一次迭代期间执行。因此,如果将 Once Only 控制器放置在指定循环 5 次的 Loop Controller 下,那么 Once Only 控制器将仅在通过 Loop Controller 的第一次迭代时执行(即每 5 次)。

请注意,这意味着如果放置在线程组下(每个线程的每个测试仅运行一次),Once Only 控制器仍将像以前预期的那样运行,但现在用户在使用 Once Only 控制器时具有更大的灵活性。

对于需要登录的测试,请考虑将登录请求放在此控制器中,因为每个线程只需登录一次即可建立会话。

一次性控制器控制面板的屏幕截图
一次性控制器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
仅一次示例

下载此示例(参见图 5)。在此示例中,我们创建了一个测试计划,其中包含两个发送 HTTP 请求的线程。每个线程向主页发送一个请求,然后向错误页面发送三个请求。尽管我们将线程组配置为迭代 3 次,但每个 JMeter 线程只向主页发送一个请求,因为该请求位于一个仅一次的控制器中。

图 5. Once Only 控制器示例
图 5. Once Only 控制器示例

每个 JMeter 线程将按以下顺序发送请求:主页、错误页、错误页、错误页。

请注意,文件报告器被配置为将结果存储在当前目录中名为“ loop-test.dat ”的文件中。

^

交错控制器

如果您将 Generative 或 Logic Controllers 添加到 Interleave Controller,JMeter 将在每个循环迭代的每个其他控制器之间交替。

交错控制器控制面板的屏幕截图
交错控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
忽略子控制器块
如果选中,交错控制器会将子控制器视为单个请求元素,并且一次只允许每个控制器一个请求。
跨线程交错
如果选中,交错控制器将在每个循环迭代的每个子控制器之间交替,但在所有线程中,例如在具有 4 个线程和 3 个子控制器的配置中,在第一次迭代时,线程 1 将运行第一个子,线程 2 第二个子,线程 3 第三个孩子,线程 4 第一个孩子,在下一次迭代每个线程将运行以下子控制器
简单交错示例

下载此示例(参见图 1)。在此示例中,我们将线程组配置为有两个线程和五个循环计数,每个线程总共有十个请求。请参阅下表了解 JMeter 发送 HTTP 请求的顺序。

图 1 - 交错控制器示例 1
图 1 - 交错控制器示例 1
循环迭代每个 JMeter 线程发送这些 HTTP 请求
1新闻页面
1日志页面
2常见问题页面
2日志页面
3阿甘正传页面
3日志页面
4因为控制器中没有更多请求,所以

JMeter 重新开始并发送第一个 HTTP 请求,即新闻页面。
4日志页面
5常见问题页面
5日志页面
有用的交错示例

下载另一个示例(参见图 2)。在此示例中,我们将线程组配置为具有单个线程和 8 个循环计数。请注意,测试计划有一个外部交错控制器,其中有两个交错控制器。


        图 2 - 交错控制器示例 2
图 2 - 交错控制器示例 2

外部交错控制器在两个内部交错控制器之间交替。然后,每个内部交错控制器在每个 HTTP 请求之间交替。每个 JMeter 线程将按以下顺序发送请求:主页、交错、错误页面、交错、CVS 页面、交错和常见问题页面、交错。

请注意,文件报告器配置为将结果存储在当前目录中名为“ interleave-test2.dat ”的文件中。


        图 3 - 交错控制器示例 3
图 3 - 交错控制器示例 3

如果主交错控制器下的两个交错控制器是简单的控制器,那么顺序将是:主页、CVS 页面、交错、错误页面、常见问题页面、交错。

但是,如果在主交错控制器上选中“忽略子控制器块”,则顺序为:主页、交错、错误页面、交错、CVS 页面、交错和常见问题页面、交错。

^

随机控制器

随机逻辑控制器的行为类似于交错控制器,除了它不是按顺序通过其子控制器和采样器,而是在每次通过时随机选择一个。

多个控制器之间的交互会产生复杂的行为。随机控制器尤其如此。在假设任何给定的交互会产生什么结果之前进行实验
随机控制器控制面板截图
随机控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
忽略子控制器块
如果选中,交错控制器会将子控制器视为单个请求元素,并且一次只允许每个控制器一个请求。
^

随机顺序控制器

随机顺序控制器很像简单控制器,因为它最多会执行每个子元素一次,但节点的执行顺序将是随机的。

随机顺序控制器控制面板的屏幕截图
随机顺序控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
^

吞吐量控制器

吞吐量控制器允许用户控制它的执行频率。有两种模式:

  • 执行百分比
  • 处决总数
执行百分比
使控制器通过测试计划执行一定百分比的迭代。
总处决
导致控制器在执行一定次数后停止执行。
与 Once Only Controller 一样,此设置会在父 Loop Controller 重新启动时重置。

这个控制器的名字很糟糕,因为它不控制吞吐量。有关可用于调整吞吐量的元素, 请参阅恒定吞吐量计时器。
吞吐量控制器控制面板的屏幕截图
吞吐量控制器控制面板的屏幕截图
当与其他控制器结合使用时,吞吐量控制器可以产生非常复杂的行为 - 特别是与交错或随机控制器作为父级(也非常有用)。

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
执行风格
控制器是以百分比执行还是总执行模式运行。
是的
吞吐量
一个号码。对于百分比执行模式,一个介于0100之间的数字,表示控制器将执行的次数百分比。“ 50 ”表示控制器将在测试计划的一半迭代中执行。对于总执行模式,数字表示控制器将执行的总次数。
是的
每个用户
如果选中,每个用户将导致控制器计算它是否应该在每个用户(每个线程)的基础上执行。如果未选中,则计算将对所有用户都是全局的。例如,如果使用总执行模式,并且取消选中“ per user ”,那么为吞吐量提供的数字将是执行的总数。如果选中“ per user ”,则执行的总数将是用户数乘以给定的吞吐量数。
^

运行时控制器

运行时控制器控制其子代运行多长时间。控制器将运行其子代,直到超过 配置的运行时间。

运行时控制器控制面板的屏幕截图
运行时控制器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
此控制器的描述性名称显示在树中,用于命名事务。
是的
运行时间(秒)
所需的运行时间(以秒为单位)。0 表示不运行。
是的
^

如果控制器

If 控制器允许用户控制它下面的测试元素(它的子元素)是否运行。

默认情况下,条件仅在初始输入时评估一次,但您可以选择为控制器中包含的每个可运行元素评估它。

最好的选项(默认选项)是检查将条件解释为变量表达式?,然后在条件字段中,您有 2 个选项:

  • 选项 1:使用包含truefalse的变量
    如果要测试最后一个示例是否成功,可以使用${JMeterThread.last_sample_ok}
    如果控制器使用变量
    如果控制器使用变量
  • 选项 2:使用函数(建议使用${__jexl3()})来评估必须返回truefalse的表达式
    如果控制器使用表达式
    如果控制器使用表达式
例如,以前可以使用条件: ${__jexl3(${VAR} == 23)}并且这将被评估为true / false,然后将结果传递给 JavaScript,然后返回true / false。如果选择了变量表达式选项,则表达式会被计算并与“”进行比较,而无需使用 JavaScript。

要测试变量是否未定义(或为空),请执行以下操作,假设 var 命名为myVar,表达式将为:
"${myVar}" == "\${myVar}"
或使用:
"${myVar}" != "\${myVar}"
测试变量是否已定义且不为空。
如果取消选中将条件解释为变量表达式?,如果 Controller将在内部使用 javascript 来评估具有可能非常大的性能损失并使您的测试可扩展性降低的条件。
如果控制器使用 javascript
如果控制器使用 javascript
If 控制器控制面板的屏幕截图
If 控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
条件(默认 JavaScript)
默认情况下,条件被解释为返回“ true ”或“ false ”的JavaScript代码,但这可以被覆盖(见下文)
是的
将条件解释为变量表达式?
如果选择此项,则条件必须是计算结果为“”的表达式(忽略大小写)。例如,${FOUND}${__jexl3(${VAR} > 100)}。与 JavaScript 案例不同,仅检查条件是否匹配“”(忽略大小写)。
建议检查这一点并在 Condition 中使用__jexl3__groovy函数以提高性能
是的
评估所有孩子
是否应该为所有儿童评估病情?如果未选中,则仅在输入时评估条件。
是的
示例 (JavaScript)
  • ${COUNT} < 10
  • "${VAR}" == "abcd"
如果解释代码时出错,则假定条件为false,并在jmeter.log中记录一条消息。
请注意,建议避免使用 JavaScript 模式来提高性能。

使用__groovy时注意不要在字符串中使用变量替换,否则如果使用更改脚本的变量,则无法缓存。而是使用以下方法获取变量:vars.get("myVar")。 请参阅下面的 Groovy 示例。
示例(变量表达式)
  • ${__groovy(vars.get("myVar") != "Invalid" )}(Groovy 检查 myVar 不等于 Invalid)
  • ${__groovy(vars.get("myInt").toInteger() <=4 )}(Groovy 检查 myInt 是否小于或等于 4)
  • ${__groovy(vars.get("myMissing") != null )}(Groovy 检查 myMissing 变量是否未设置)
  • ${__jexl3(${COUNT} < 10)}
  • ${结果}
  • ${JMeterThread.last_sample_ok}(检查最后一个样本是否成功)
^

而控制器

While 控制器运行它的子节点,直到条件为“”。

JMeter 会将循环索引公开为名为__jm__<Name of your element>__idx的变量。例如,如果您的 While 控制器名为 WC,那么您可以通过${__jm__WC__idx}访问循环索引。索引从 0 开始

可能的条件值:

  • 空白 - 当循环中的最后一个样本失败时退出循环
  • LAST - 当循环中的最后一个样本失败时退出循环。如果循环之前的最后一个样本失败,请不要进入循环。
  • 否则 - 当条件等于字符串“ false ”时退出(或不进入)循环
条件可以是最终计算结果为字符串“ false ”的任何变量或函数。这允许根据需要使用__jexl3__groovy函数、属性或变量。

请注意,条件会被评估两次,一次在开始采样子代之前,一次在子代采样结束时,因此将非幂等函数放入 Condition (如__counter)可能会引入问题。

例如:
  • ${VAR} - 其中VAR被其他一些测试元素设置为 false
  • ${__jexl3(${C}==10)}
  • ${__jexl3("${VAR2}"=="abcd")}
  • ${_P(property)} - 其他地方的属性设置为“ false
While 控制器控制面板的屏幕截图
While控制器控制面板截图

参数

属性
描述
必需的
姓名
此控制器的描述性名称显示在树中,用于命名事务。
健康)状况
空白、LAST或变量/函数
^

切换控制器

Switch 控制器的作用类似于Interleave 控制器 ,因为它在每次迭代时运行一个从属元素,但控制器不是按顺序运行它们,而是运行由 switch 值定义的元素。

开关值也可以是名称。

如果开关值超出范围,它将运行第零个元素,因此它作为数字情况的默认值。如果值为空字符串,它也会运行第零个元素。

如果该值为非数字(且非空),则 Switch Controller 将查找具有相同名称的元素(区分大小写)。如果没有一个名称匹配,则选择名为“ default ”(大小写不重要)的元素。如果没有默认值,则不选择任何元素,控制器不会运行任何东西。

开关控制器控制面板截图
开关控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
开关量
要调用的从属元素的编号(或名称)。元素从 0 开始编号。默认为 0
^

ForEach 控制器

ForEach 控制器循环通过一组相关变量的值。当您将采样器(或控制器)添加到 ForEach 控制器时,每个样本(或控制器)都会执行一次或多次,其中在每个循环期间变量都有一个新值。输入应该由几个变量组成,每个变量都用下划线和数字扩展。每个这样的变量都必须有一个值。因此,例如,当输入变量的名称为inputVar时,应定义以下变量:

  • inputVar_1 = 温迪
  • inputVar_2 = 查尔斯
  • inputVar_3 = 彼得
  • inputVar_4 = 约翰

注意:“ _ ”分隔符现在是可选的。

当返回变量为“ returnVar ”时,ForEach 控制器下的采样器和控制器的集合将连续执行4次,返回变量具有上述各自的值,然后可以在采样器中使用。

JMeter 会将循环索引公开为名为__jm__<Name of your element>__idx的变量。例如,如果您的循环控制器名为 FEC,那么您可以通过${__jm__FEC__idx}访问循环索引。索引从 0 开始

它特别适合与正则表达式后处理器一起运行。这可以从先前请求的结果数据中“创建”必要的输入变量。通过省略“ _ ”分隔符,ForEach 控制器可用于使用输入变量refName_g循环遍历组,也可以使用格式为 refName_${C的输入变量循环遍历所有匹配项中的所有组}_g,其中C是一个计数器变量。

如果inputVar_1null,则 ForEach 控制器不会运行任何样本。如果正则表达式没有返回匹配项,就会出现这种情况。
ForEach 控制器控制面板的屏幕截图
ForEach 控制器的控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
输入变量前缀
用作输入的变量名称的前缀。默认为空字符串作为前缀。
循环开始索引
循环变量的起始索引(不包括)(第一个元素位于起始索引 + 1)
循环结束索引
循环变量的结束索引(包括)
输出变量
可在循环中用于在采样器中替换的变量的名称。默认为空变量名,这很可能是不想要的。
使用分隔符
如果未选中,则省略“ _ ”分隔符。
是的
ForEach 示例

下载此示例(参见图 7)。在这个例子中,我们创建了一个测试计划,它只发送一次特定的 HTTP 请求,并向页面上可以找到的每个链接发送另一个 HTTP 请求。

图 7 - ForEach 控制器示例
图 7 - ForEach 控制器示例

我们为单个线程和循环计数值配置了线程组。您可以看到我们向线程组添加了一个 HTTP 请求,向 ForEach 控制器添加了另一个 HTTP 请求。

在第一个 HTTP 请求之后,添加了一个正则表达式提取器,它将所有 html 链接从返回页面中提取出来,并将它们放入inputVar变量中

在 ForEach 循环中,添加了一个 HTTP 采样器,它请求从第一个返回的 HTML 页面中提取的所有链接。

ForEach 示例

这是您可以下载的另一个示例。这有两个正则表达式和 ForEach 控制器。第一个 RE 匹配,但第二个不匹配,因此第二个 ForEach 控制器不运行任何样本

图 8 - ForEach 控制器示例 2
图 8 - ForEach 控制器示例 2

线程组有一个线程和两个循环计数。

示例 1 使用 JavaTest 采样器返回字符串“ abcd ”。

Regex Extractor 使用表达式(\w)\s匹配一个字母后跟一个空格,并返回该字母(而不是空格)。任何匹配都以字符串“ inputVar ”为前缀。

ForEach 控制器提取前缀为“ inputVar_ ”的所有变量,并执行其样本,传递变量“ returnVar ”中的值。在这种情况下,它将依次将变量设置为值“ a ”、“ b ”和“ c ”。

For 1采样器是另一个 Java 采样器,它使用返回变量“ returnVar 作为示例标签的一部分和采样器数据。

Sample 2Regex 2For 2几乎相同,只是 Regex 已更改为“ (\w)\sx ”,这显然不匹配。因此For 2 Sampler 将不会运行。

^

模块控制器

模块控制器提供了一种在运行时将测试计划片段替换为当前测试计划的机制。

测试计划片段由控制器和其中包含的所有测试元素(采样器等)组成。片段可以位于任何线程组中。如果片段位于线程组中,则可以禁用其控制器以防止片段在模块控制器之外运行。或者您可以将片段存储在虚拟线程组中,并禁用整个线程组。

可以有多个片段,每个片段下都有不同系列的采样器。然后,只需在其下拉框中选择适当的控制器,即可使用模块控制器轻松地在这些多个测试用例之间切换。这为快速轻松地运行许多替代测试计划提供了便利。

片段名称由控制器名称及其所有父名称组成。例如:

Test Plan / Protocol: JDBC / Control / Interleave Controller (Module1)

模块控制器使用的任何片段都必须具有唯一的名称,因为该名称用于在重新加载测试计划时查找目标控制器。出于这个原因,最好确保控制器名称从默认值更改 - 如上面的示例所示 - 否则在将新元素添加到测试计划时可能会意外创建重复项。

模块控制器控制面板截图
模块控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
要运行的模块
模块控制器提供加载到 gui 中的所有控制器的列表。选择您要在运行时替换的那个。
是的
^

包含控制器

包含控制器旨在使用外部 JMX 文件。要使用它,请在测试计划下创建一个测试片段,并在其下方添加任何所需的采样器、控制器等。然后保存测试计划。该文件现在可以作为其他测试计划的一部分包含在内。

为方便起见,也可以在外部 JMX 文件中添加线程组以进行调试。模块控制器可用于引用测试片段。在包含过程中 线程组将被忽略。

如果测试使用 Cookie 管理器或用户定义的变量,这些应该放在顶层测试计划中,而不是包含的文件中,否则不能保证它们工作。

此元素不支持文件名字段中的变量/函数。
但是,如果定义了属性includecontroller.prefix,则内容将用作路径名的前缀。
使用包含控制器并包含相同的 JMX 文件时,请确保以不同的方式命名包含控制器以避免遇到已知问题 Bug 50898

如果在prefix + Filename 给定的位置找不到文件,则控制器尝试打开相对于 JMX 启动目录 的Filename 。

包含控制器控制面板的屏幕截图
包含控制器控制面板的屏幕截图

参数

属性
描述
必需的
文件名
要包含的文件。
是的
^

事务控制器

事务控制器生成一个额外的样本,该样本测量执行嵌套测试元素所花费的总时间。

注意:当勾选“在生成的样本中包括定时器和前置处理器的持续时间”复选框时,时间包括控制器范围内的所有处理,而不仅仅是样本。

有两种操作模式:

  • 在嵌套样本之后添加额外的样本
  • 添加附加样本作为嵌套样本的父级

生成的采样时间包括嵌套采样器的所有时间,不包括默认情况下(自 2.11 起)定时器和前置/后置处理器的处理时间,除非选中复选框“在生成的样本中包含定时器和前置后置处理器的持续时间”。根据时钟分辨率,它可能比单个采样器加上定时器的总和稍长。时钟可能会在控制器记录开始时间之后但在第一个样本开始之前滴答作响。最后也一样。

生成的样本只有在其所有子样本都成功时才被认为是成功的。

在父模式下,仍然可以在 Tree View Listener 中看到各个样本,但在其他 Listener 中不再显示为单独的条目。此外,子样本不会出现在 CSV 日志文件中,但可以保存到 XML 文件中。

在父模式下,可以将断言(等)添加到事务控制器中。但是,默认情况下,它们将应用于单个样本和整个交易样本。要限制断言的范围,请使用简单控制器来包含样本,并将断言添加到简单控制器中。父模式控制器当前不能正确支持任一类型的嵌套事务控制器。
事务控制器控制面板的屏幕截图
事务控制器控制面板截图

参数

属性
描述
必需的
姓名
此控制器的描述性名称显示在树中,用于命名事务。
是的
生成父样本
如果选中,则生成该样本作为其他样本的父样本,否则生成该样本作为独立样本。
是的
在生成的样本中包括计时器和前置处理器的持续时间
是否在生成的样本中包含计时器、预处理和后处理延迟。默认为
是的
^

录音控制器

Recording Controller 是一个占位符,指示代理服务器应将样本记录到何处。在测试运行期间,它没有任何效果,类似于简单控制器。但是在使用HTTP(S) Test Script Recorder进行录制时,所有录制的样本将默认保存在录制控制器下。

录音控制器控制面板截图
录音控制器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此控制器的描述性名称。
^

临界区控制器

临界区控制器确保其子元素(采样器/控制器等)将仅由一个线程执行,因为在执行控制器的子元素之前将获取命名锁。

关键部分控制器控制面板的屏幕截图
关键部分控制器控制面板截图

下图显示了一个使用临界区控制器的例子,下图中的 2 个临界区控制器确保:

  • DS2-${__threadNum}一次只能由一个线程执行
  • DS4-${__threadNum}一次只能由一个线程执行
使用关键部分控制器的测试计划
使用关键部分控制器的测试计划

参数

属性
描述
必需的
锁名称
控制器将使用的锁,确保您对不相关的部分使用不同的锁名称
是的
临界区控制器仅在一个 JVM 中获取锁,因此如果使用分布式测试,请确保您的用例不依赖于所有 JVM 阻塞的所有线程。
^
^

18.3 监听器


大多数侦听器除了“侦听”测试结果外,还执行多种角色。它们还提供查看、保存和读取已保存测试结果的方法。

请注意,侦听器是在找到它们的范围的末尾处理的。

测试结果的保存和读取是通用的。各种侦听器都有一个面板,可以指定将结果写入(或从中读取)的文件。默认情况下,结果存储为 XML 文件,通常带有“ .jtl ”扩展名。存储为 CSV 是最有效的选项,但不如 XML(另一个可用选项)详细。

侦听器不会在 CLI 模式下处理示例数据,但如果配置了输出文件,则会保存原始数据。 为了分析 CLI 运行生成的数据,您需要将文件加载到适当的侦听器中。

要读取现有结果并显示它们,请使用文件面板的浏览按钮打开文件。

如果要在加载新文件之前清除任何当前数据,请在加载文件之前使用菜单项 Run  →  Clear ( Ctrl  +  Shift  +  E ) Run  →  Clear All ( Ctrl  +  E )

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

JMeter 编写的 XML 文件在标头中声明了 1.0 版本,而实际文件使用 1.1 规则进行序列化。(这样做是出于历史兼容性的原因;请参阅 错误 59973 错误 58679)这会导致严格的 XML 解析器失败。考虑使用非严格的 XML 解析器来读取 JTL 文件。

文件名可以包含函数和/或变量引用。但是,变量引用在客户端-服务器模式下不起作用(功能正常)。这是因为文件是在客户端创建的,客户端并没有在本地运行测试所以没有设置变量。

如果有很多样本,侦听器可以使用大量内存。 大多数听众目前在他们的范围内保留每个样本的副本,除了:

  • 简单数据写入器
  • BeanShell/JSR223 监听器
  • 邮件可视化器
  • 总结报告

以下侦听器不再需要保留每个样本的副本。相反,具有相同经过时间的样本会被聚合。现在需要更少的内存,特别是如果大多数样本最多只需要一两秒钟。

  • 汇总报告
  • 聚合图

要最小化所需的内存量,请使用简单数据写入器,并使用 CSV 格式。

JMeter 变量可以保存到输出文件中。这只能使用属性来指定。有关详细信息, 请参阅侦听器示例变量

有关设置要保存的默认项目的完整详细信息,请参阅侦听器默认配置文档。有关输出文件内容的详细信息,请参阅CSV 日志格式或XML 日志格式。

jmeter.properties中的条目用于定义默认值;这些可以通过使用配置按钮为单个侦听器覆盖,如下所示。jmeter.properties中的设置也适用于使用-l命令行标志添加的侦听器。

下图显示了结果文件配置面板的示例

结果文件配置面板
结果文件配置面板

参数

属性
描述
必需的
文件名
包含样本结果的文件的名称。可以使用相对路径名或绝对路径名来指定文件名。相对路径是相对于当前工作目录(默认为bin/目录)解析的。JMeter 还支持相对于包含当前测试计划(JMX 文件)的目录的路径。如果路径名以“ ~/ ”开头(或jmeter.save.saveservice.base_prefix JMeter 属性中的任何内容),则假定该路径是相对于 JMX 文件位置的。
浏览…
文件浏览按钮
错误
选择此项以写入/只读错误的结果
成功
选择此项可写入/读取无错误的结果。如果既没有选择错误也没有选择成功,则处理所有结果。
配置
配置按钮,见下文

示例结果保存配置

通过使用如下所示的配置弹出窗口,可以配置侦听器以将不同的项目保存到结果日志文件 (JTL)。默认值的定义如侦听器默认配置文档中所述。名称后带有(CSV)的项目仅适用于 CSV 格式;带有 ( XML ) 的项目仅适用于 XML 格式。CSV 格式目前不能用于保存任何包含换行符的项目。

请注意,cookie、方法和查询字符串保存为“采样器数据”选项的一部分。

示例结果保存配置控制面板的屏幕截图
示例结果保存配置控制面板的屏幕截图
^

图表结果

在负载测试期间不得使用图表结果,因为它会消耗大量资源(内存和 CPU)。仅将其用于功能测试或测试计划调试和验证期间。

Graph Results 侦听器生成一个简单的图形,绘制所有采样时间。沿着图表底部,当前样本(黑色)、所有样本的当前平均值(蓝色)、当前标准偏差(红​​色)和当前吞吐率(绿色)以毫秒为单位显示。

吞吐量数表示服务器处理的实际请求数/分钟。此计算包括您添加到测试中的任何延迟和 JMeter 自己的内部处理时间。像这样进行计算的好处是这个数字代表了一些真实的东西——你的服务器实际上每分钟处理那么多请求,你可以增加线程数和/或减少延迟来发现你的服务器的最大吞吐量。然而,如果您进行的计算排除了延迟和 JMeter 的处理,则不清楚您可以从该数字中得出什么结论。

图表结果控制面板的屏幕截图
图表结果控制面板的屏幕截图

下表简要描述了图表上的项目。有关统计术语的精确含义的更多详细信息可以在网络上找到 - 例如维基百科 - 或通过查阅有关统计的书籍。

  • 数据- 绘制实际数据值
  • 平均值- 绘制平均值
  • 中位数- 绘制中位数(中间值)
  • 偏差- 绘制标准偏差(变化的度量)
  • 吞吐量- 绘制每单位时间的样本数

显示屏底部的各个数字是当前值。“ Latest Sample ”是当前经过的采样时间,在图表上显示为“ Data ”。

图表左上角显示的值是响应时间的第 90个百分位的最大值。

^

断言结果

在负载测试期间不得使用断言结果,因为它会消耗大量资源(内存和 CPU)。仅将其用于功能测试或测试计划调试和验证期间。

Assertion Results 可视化工具显示每个样本的标签。它还报告作为测试计划一部分的任何断言的失败。

断言结果控制面板的屏幕截图
断言结果控制面板的屏幕截图
^

查看结果树

在负载测试期间不得使用查看结果树,因为它会消耗大量资源(内存和 CPU)。仅将其用于功能测试或测试计划调试和验证期间。
查看结果树显示所有样本响应的树,允许您查看任何样本的响应。除了显示响应之外,您还可以查看获得此响应所需的时间,以及一些响应代码。请注意,请求面板仅显示 JMeter 添加的标头。它不显示任何可能由 HTTP 协议实现添加的 标头(例如Host )。

有几种查看响应的方法,可以通过左侧面板底部的下拉框进行选择。

渲染器描述
CSS/JQuery 测试器 CSS/JQuery 测试器仅适用于文本响应。它在上面板中显示纯文本。“测试”按钮允许用户将 CSS/JQuery 应用到上面板,结果将显示在下面板中。
CSS/JQuery 表达式引擎可以是 JSoup 或 Jodd,这两种实现的语法略有不同。
例如,将属性href应用于当前 JMeter 函数页面 的 Selector a[class=sectionlink]给出以下输出:
Match count: 74
Match[1]=#functions
Match[2]=#what_can_do
Match[3]=#where
Match[4]=#how
Match[5]=#function_helper
Match[6]=#functions
Match[7]=#__regexFunction
Match[8]=#__regexFunction_parms
Match[9]=#__counter
… and so on …

文档 文档视图将显示从各种类型的文档中提取的文本,例如 Microsoft Office(Word、Excel、PowerPoint 97-2003、2007-2010 (openxml)、Apache OpenOffice(writer、calc、impress)、HTML、gzip、jar/ zip文件(内容列表),以及一些关于“多媒体”文件的元数据,如 mp3、mp4、flv 等。支持格式的完整列表可在Apache Tika 格式页面上找到。
Document 视图的一个要求是下载 Apache Tika 二进制包( tika-app-xxjar ) 并将其放在JMETER_HOME/lib目录中。
如果文档大于 10 MB,则不会显示。要更改此限制,请设置 JMeter 属性document.max_size(单位为字节)或设置为0以移除限制。
HTML HTML 视图尝试将响应呈现为 HTML。呈现的 HTML 可能与在任何 Web 浏览器中获得的视图相比很差;但是,它确实提供了有助于初始结果评估的快速近似值。
不下载图像、样式表等。
HTML(下载资源) 如果选择了HTML(下载资源)视图选项,则渲染器可以下载 HTML 代码引用的图像、样式表等。
格式化的 HTML 源代码 如果选择了HTML Source formatted view选项,渲染器将显示由Jsoup格式化和清理的 HTML 源代码。
JSON JSON 视图将以树形样式显示响应(也处理嵌入在 JavaScript 中的 JSON) 。
JSON路径测试器 JSON Path Tester 视图将让您测试您的 JSON-PATH 表达式并查看从特定响应中提取的数据。
JSON JMESPath 测试器 JSON JMESPath Tester 视图将让您测试JMESPath表达式并查看从特定响应中提取的数据。
正则表达式测试器 Regexp Tester 视图仅适用于文本响应。它在上面板中显示纯文本。“测试”按钮允许用户将正则表达式应用到上面板,结果将显示在下面板中。
正则表达式引擎与正则表达式提取器中使用的引擎相同。
例如,应用于当前 JMeter 主页 的 RE (JMeter\w*).*给出以下输出:
Match count: 26
Match[1][0]=JMeter - Apache JMeter</title>
Match[1][1]=JMeter
Match[2][0]=JMeter" title="JMeter" border="0"/></a>
Match[2][1]=JMeter
Match[3][0]=JMeterCommitters">Contributors</a>
Match[3][1]=JMeterCommitters
… and so on …

[]中 的第一个数字是匹配号;第二个数字是组。组[0]是与整个 RE 匹配的任何内容。组[1]是与第一个组匹配的任何内容,即( JMeter \w*)在这种情况下。参见图 9b(下)。
文本 默认文本视图显示响应中包含的所有文本。请注意,这仅在响应内容类型被视为文本时才有效。如果content-type以下列任何一种开头,则认为是二进制,否则认为是文本。
image/
audio/
video/

XML XML 视图将以树形样式显示响应。任何 DTD 节点或 Prolog 节点都不会出现在树中;但是,响应可能包含这些节点。您可以右键单击任何节点并展开或折叠其下方的所有节点。
XPath 测试器 XPath 测试器仅适用于文本响应。它在上面板中显示纯文本。“测试”按钮允许用户将 XPath 查询应用到上面板,结果将显示在下面板中。
边界提取器测试仪 边界提取器测试器仅适用于文本响应。它在上面板中显示纯文本。“测试”按钮允许用户将边界提取器查询应用到上面板,结果将显示在下面板中。

自动滚动?选项允许在树选择中显示最后一个节点

从版本 3.2 开始,视图中的条目数被限制为属性view.results.tree.max_results的值,默认为500个条目。可以通过将属性设置为0来恢复旧行为。请注意,这可能会消耗大量内存。

使用搜索选项,大多数视图还允许搜索显示的数据;搜索结果将在上面的显示中突出显示。例如,下面的控制面板屏幕截图显示了搜索“ Java ”的一个结果。请注意,搜索对可见文本进行操作,因此在搜索 Text 和 HTML 视图时可能会得到不同的结果。
注意:正则表达式使用 Java 引擎(不是 ORO 引擎,如正则表达式提取器或正则表达式测试器视图)。

如果没有提供内容类型,则内容将不会显示在任何响应数据面板中。在这种情况下,您可以使用将响应保存到文件来保存数据。请注意,响应数据在示例结果中仍然可用,因此仍然可以使用后处理器访问。

如果响应数据大于 200K,则不会显示。要更改此限制,请设置 JMeter 属性view.results.tree.max_size。您还可以使用 Save Responses to a file将整个响应保存到文件中。

可以创建其他渲染器。该类必须实现接口org.apache.jmeter.visualizers.ResultRenderer 和/或扩展抽象类org.apache.jmeter.visualizers.SamplerResultTab,并且编译后的代码必须对 JMeter 可用(例如,通过将其添加到lib/ ext目录)。

查看结果树控制面板的屏幕截图
查看结果树控制面板的屏幕截图

控制面板(上图)显示了一个 HTML 显示示例。
图 9(下)显示了一个 XML 显示示例。
图 9a(下)显示了 Regexp 测试器显示的示例。
图 9b(下)显示了文档显示的示例。

图 9 示例 XML 显示
图 9 示例 XML 显示
图 9a 示例 Regexp 测试显示
图 9a 示例 Regexp 测试显示
图 9b 示例文档(此处为 PDF)显示
图 9b 示例文档(此处为 PDF)显示
^

汇总报告

聚合报告为您的测试中的每个不同名称的请求创建一个表格行。对于每个请求,它汇总响应信息并提供请求计数、最小值、最大值、平均值、错误率、近似吞吐量(请求/秒)和每秒千字节吞吐量。一旦测试完成,吞吐量就是整个测试期间的实际通过量。

吞吐量是从采样器目标的角度计算的(例如,在 HTTP 样本的情况下是远程服务器)。JMeter 会考虑生成请求的总时间。如果其他采样器和定时器在同一个线程中,它们会增加总时间,从而降低吞吐量值。因此,两个具有不同名称的相同采样器的吞吐量将是两个具有相同名称的采样器的一半。正确选择采样器名称对于从聚合报告中获得最佳结果非常重要。

计算中位数和 90 % 线(第 90 百分位数)值需要额外的内存。JMeter 现在将具有相同经过时间的样本组合在一起,因此使用的内存更少。但是,对于耗时超过几秒的样本,有可能更少的样本具有相同的时间,在这种情况下将需要更多的内存。请注意,之后您可以使用此侦听器重新加载 CSV 或 XML 结果文件,这是避免性能影响的推荐方法。有关不存储单个样本并因此需要恒定内存的类似侦听器, 请参阅摘要报告。

从 JMeter 2.12 开始,您可以配置要计算的 3 个百分位值,这可以通过设置属性来完成:
  • 标签- 样本的标签。如果选择了“在标签中包含组名? ”,则添加线程组的名称作为前缀。这允许在需要时单独整理来自不同线程组的相同标签。
  • # Samples - 具有相同标签的样本数
  • 平均- 一组结果的平均时间
  • 中位数-中位数是一组结果中间的时间。50% 的样本不超过这个时间;其余的时间至少一样长。
  • 90% 线- 90% 的样本不超过这个时间。剩下的样本至少需要这个时间。(第 90 百分位
  • 95% 线- 95% 的样本不超过这个时间。剩下的样本至少需要这个时间。(第 95 百分位
  • 99% 线- 99% 的样本不超过这个时间。剩下的样本至少需要这个时间。(第 99 百分位
  • Min - 相同标签样本的最短时间
  • Max - 具有相同标签的样本的最长时间
  • 错误 % - 有错误的请求的百分比
  • 吞吐量-吞吐量以每秒/分钟/小时的请求数来衡量。选择时间单位以使显示的速率至少为 1.0。将吞吐量保存到 CSV 文件时,以请求/秒表示,即 30.0 请求/分钟保存为 0.5。
  • Received KB/sec - 以每秒接收千字节为单位测量的吞吐量
  • Sent KB/sec - 以每秒发送千字节为单位测量的吞吐量

时间以毫秒为单位。

汇总报告控制面板的屏幕截图
汇总报表控制面板截图

下图显示了选择“包括组名”复选框的示例。

样本 ”
示例“包括组名”显示
^

在表中查看结果

此可视化工具为每个样本结果创建一行。与View Results Tree一样,此可视化工具会占用大量内存。

默认情况下,它只显示主(父)样本;它不显示子样本(子样本)。JMeter 有一个“子样本? ”复选框。如果选择此选项,则显示子样本而不是主样本。

表格中查看结果的控制面板的屏幕截图
表格中查看结果的控制面板屏幕截图
^

简单数据写入器¶

此侦听器可以将结果记录到文件中,但不能记录到 UI。它旨在通过消除 GUI 开销来提供记录数据的有效方法。在 CLI 模式下运行时,-l标志可用于创建数据文件。要保存的字段由 JMeter 属性定义。有关详细信息,请参阅jmeter.properties文件。
简单数据写入器控制面板的屏幕截图
Simple Data Writer 控制面板截图
^

聚合图

聚合图类似于聚合报告。主要区别在于聚合图提供了一种简单的方法来生成条形图并将图保存为 PNG 文件。
聚合图控制面板的屏幕截图
聚合图控制面板的屏幕截图

下图显示了绘制此图的设置示例。

聚合图设置
聚合图设置
请注意:所有这些参数都不会保存在 JMeter JMX 脚本中。

参数

属性
描述
必需的
列设置
  • 要显示的列:选择要在图表中显示的列。
  • 矩形颜色:单击右侧颜色矩形打开一个弹出对话框,为列选择自定义颜色。
  • 前景色允许更改值文本颜色。
  • 值字体:允许为文本定义字体设置。
  • 画轮廓吧?在条形图上绘制或不绘制边界线
  • 显示号码分组?在 Y 轴标签中显示或不显示数字分组。
  • 价值标签垂直?更改值标签的方向。(默认为水平)
  • 列标签选择:按结果标签过滤。可以使用正则表达式,例如:.*Transaction.*
    在显示图表之前,单击Apply filter按钮以刷新内部数据。
是的
标题
在图表的头部定义图表的标题。空值是默认值:“ Aggregate Graph ”。Synchronize with name按钮用监听器的标签定义标题。并定义图形标题的字体设置
图表大小
根据当前 JMeter 的窗口大小,通过宽度和高度计算图形大小。使用宽度高度字段定义自定义尺寸。单位是像素。
X 轴设置
定义 X 轴标签的最大长度(以像素为单位)。
Y 轴设置
定义 Y 轴的自定义最大值。
传奇
定义图表图例的位置和字体设置
是的
^

响应时间图

响应时间图绘制了一个折线图,显示了测试期间每个标记请求的响应时间的演变。如果同一时间戳存在多个样本,则显示平均值。
响应时间图控制面板的屏幕截图
响应时间图控制面板的屏幕截图

下图显示了绘制此图的设置示例。

响应时间图表设置
响应时间图表设置
请注意:所有这些参数都保存在 JMeter .jmx文件中。

参数

属性
描述
必需的
间隔(毫秒)
X 轴间隔的时间(以毫秒为单位)。样本根据该值进行分组。在显示图表之前,单击应用间隔按钮以刷新内部数据。
是的
采样器标签选择
按结果标签过滤。可以使用正则表达式,例如。.*交易。* . 在显示图表之前,单击应用过滤器按钮以刷新内部数据。
标题
在图表的头部定义图表的标题。空值是默认值:“响应时间图”。Synchronize with name按钮用监听器的标签定义标题。并定义图形标题的字体设置
线路设置
定义线的宽度。定义每个值点的类型。选择none有一条没有标记的行
是的
图表大小
根据当前 JMeter 的窗口大小,通过宽度和高度计算图形大小。使用宽度高度字段定义自定义尺寸。单位是像素。
X 轴设置
自定义 X 轴标签的日期格式。语法是 Java SimpleDateFormat API
Y 轴设置
以毫秒为单位定义 Y 轴的自定义最大值。定义刻度的增量(以毫秒为单位) 在 Y 轴标签中显示或不显示数字分组。
传奇
定义图表图例的位置和字体设置
是的
^

邮件可视化器¶

如果测试运行从服务器接收到太多失败的响应,可以设置邮件可视化器发送电子邮件。

Mailer Visualizer 控制面板的屏幕截图
Mailer Visualizer 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
用于发送消息的电子邮件地址。
是的
收件人
将消息发送到的电子邮件地址,以逗号分隔。
是的
成功主题
成功消息的电子邮件主题行。
成功限制
一旦在先前达到失败限制后超过此成功响应数, 就会发送成功电子邮件。因此,邮件程序将仅以失败-成功-失败-成功等顺序发送消息。
是的
失败主题
失败消息的电子邮件主题行。
失效极限
一旦超过这个失败响应的数量,就会发送一封失败的电子邮件 - 即将计数设置为0以在第一次失败时发送一封电子邮件。
是的
主持人
SMTP 服务器(电子邮件重定向器)服务器的 IP 地址或主机名。
港口
SMTP 服务器的端口(默认为25)。
登录
用于身份验证的登录名。
密码
用于身份验证的密码。
连接安全
SMTP 身份验证的加密类型(SSL、TLS 或无)。
测试邮件
按此按钮发送测试邮件
失败
保持到目前为止收到的失败总数的字段。
^

BeanShell 监听器

BeanShell 侦听器允许使用 BeanShell 处理样本以进行保存等。

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 Listener +Groovy 以提高性能、支持新的 Java 功能以及对 BeanShell 库的有限维护。

测试元素支持ThreadListenerTestListener方法。这些应该在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell Listener 控制面板的屏幕截图
BeanShell Listener 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。名称存储在脚本变量 Label 中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。参数存储在以下变量中:
参数
包含作为单个变量的参数的字符串
bsh.args
包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName中
脚本
要运行的 BeanShell 脚本。返回值被忽略。
是(除非提供脚本文件)

在调用脚本之前,在 BeanShell 解释器中设置了一些变量:

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

如果定义了属性beanshell.listener.init,这将用于加载初始化文件,该文件可用于定义用于 BeanShell 脚本的方法等。

^

总结报告

摘要报告为您的测试中的每个不同名称的请求创建一个表格行。这类似于Aggregate Report,只是它使用的内存更少。

吞吐量是从采样器目标的角度计算的(例如,在 HTTP 样本的情况下是远程服务器)。JMeter 会考虑生成请求的总时间。如果其他采样器和定时器在同一个线程中,它们会增加总时间,从而降低吞吐量值。因此,两个具有不同名称的相同采样器的吞吐量将是两个具有相同名称的采样器的一半。正确选择采样器标签以从报告中获得最佳结果非常重要。

  • 标签- 样本的标签。如果选择了“在标签中包含组名? ”,则添加线程组的名称作为前缀。这允许在需要时单独整理来自不同线程组的相同标签。
  • # Samples - 具有相同标签的样本数
  • 平均- 一组结果的平均经过时间
  • Min - 具有相同标签的样本的最短经过时间
  • Max - 具有相同标签的样本的最长经过时间
  • 标准。开发。-样本经过时间的标准偏差
  • 错误 % - 有错误的请求的百分比
  • 吞吐量-吞吐量以每秒/分钟/小时的请求数来衡量。选择时间单位以使显示的速率至少为1.0。将吞吐量保存到 CSV 文件时,以请求/秒表示,即 30.0 请求/分钟保存为0.5
  • Received KB/sec - 以每秒千字节为单位测量的吞吐量
  • Sent KB/sec - 以每秒千字节为单位测量的吞吐量
  • 平均 字节- 样本响应的平均大小(以字节为单位)。

时间以毫秒为单位。

摘要报告控制面板的屏幕截图
摘要报告控制面板截图

下图显示了选择“包括组名”复选框的示例。

样本 ”
示例“包括组名”显示
^

将响应保存到文件

此测试元素可以放置在测试计划中的任何位置。对于其范围内的每个样本,它将创建一个响应数据文件。其主要用途是创建功能测试,但在响应太大而无法在 View Results Tree Listener 中显示时也很有用。文件名是从指定的前缀加上一个数字创建的(除非它被禁用,见下文)。文件扩展名是根据文档类型创建的(如果已知)。如果未知,则文件扩展名设置为“未知”'。如果禁用编号并且禁用添加后缀,则将文件前缀作为整个文件名。如果需要,这允许生成一个固定的文件名。生成的文件名存储在示例响应中,如果需要,可以保存在测试日志输出文件中。

当前样本首先被保存,然后是任何子样本(子样本)。如果提供了变量名,则文件名将按照子样本出现的顺序保存。见下文。

将响应保存到文件的控制面板的屏幕截图
将响应保存到文件的控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
文件名前缀(可以包括文件夹)
生成文件名的前缀;这可以包括目录名称。相对路径是相对于当前工作目录(默认为bin/目录)解析的。JMeter 还支持相对于包含当前测试计划(JMX 文件)的目录的路径。如果路径名以“ ~/ ”开头(或jmeter.save.saveservice.base_prefix JMeter 属性中的任何内容),则假定该路径是相对于 JMX 文件位置的。
如果前缀中的父文件夹不存在,JMeter 将创建它们并在失败时停止测试。
请注意,文件名前缀不能包含与线程相关的数据,因此请勿在此字段中使用任何变量( ${varName})或${__threadNum} 之类的函数
是的
包含保存文件名的变量名
保存生成文件名的变量的名称(以便稍后在测试计划中使用)。如果有子样本,则将数字后缀添加到变量名称中。例如,如果变量名为FILENAME,则父样本文件名保存在变量FILENAME中,子采样器的文件名保存在FILENAME1FILENAME2等 中。
序列号的最小长度
如果“不添加数字到前缀”没有被选中,那么添加到前缀的数字将被0填充,这样前缀的大小就是这个值。默认为0
仅保存失败的响应
如果选中,则仅保存失败的响应
是的
仅保存成功的响应
如果选中,则仅保存成功的响应
是的
不要在前缀中添加数字
如果选中,则不会向前缀添加数字。如果选择此选项,请确保前缀是唯一的,否则文件可能会被覆盖。
是的
不要添加内容类型后缀
如果选中,则不添加任何后缀。如果选择此选项,请确保前缀是唯一的,否则文件可能会被覆盖。
是的
添加时间戳
如果选中,则日期将包含在文件后缀中,格式为 yyyyMMdd-HHmm_
是的
不要保存事务控制器 SampleResult
如果选中,则 Transaction Controller 生成的 SamplerResult 将被忽略
是的
^

JSR223 监听器

JSR223 侦听器允许将 JSR223 脚本代码应用于示例结果。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
语言
要使用的 JSR223 语言
是的
参数
传递给脚本的参数。参数存储在以下变量中:
参数
包含作为单个变量的参数的字符串
参数
包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的脚本的文件,如果使用相对文件路径,则它将相对于“ user.dir ”系统属性引用的目录
脚本编译缓存
如果使用的语言支持Compilable接口(Groovy 是其中之一,java、beanshell 和 javascript 不支持) ,JMeter 将使用该测试计划中的唯一字符串来缓存脚本编译的结果。
如果您使用 Groovy 而不选中此选项,请参阅 JSR223 Sampler Java System 属性中的注释
脚本
要运行的脚本。
是(除非提供脚本文件)

在调用脚本之前,会设置一些变量。请注意,这些是 JSR223 变量 - 即它们可以直接在脚本中使用。

日志
( Logger ) - 可用于写入日志文件
标签
字符串标签
文件名
脚本文件名(如果有)
参数
参数(作为字符串)
参数
参数作为字符串数组(按空格分割)
ctx
( JMeterContext ) - 提供对上下文的访问
变量
( JMeterVariables ) - 提供对变量的读/写访问权限:
vars.get(key);
vars.put(key,val);
vars.putObject("OBJ1",new Object());
vars.getObject("OBJ2");
道具
(JMeterProperties - 类java.util.Properties ) - 例如props.get("START.HMS"); props.put("PROP1","1234");
样本结果,上一页
( SampleResult ) - 提供对 SampleResult 的访问权限
样本事件
( SampleEvent ) - 提供对 SampleEvent 的访问权限
采样器
采样器)- 可以访问最后一个采样器
出去
System.out - 例如OUT.println("message")

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

^

生成汇总结果

此测试元素可以放置在测试计划中的任何位置。为日志文件和/或标准输出生成到目前为止的测试运行摘要。显示了运行和差异总计。在适当的时间边界上每n秒(默认 30 秒)生成一次输出,以便同时运行多个测试。
由于仅在发出样本时才写入汇总/差异行,因此如果您的测试在间隔内没有生成样本,则可能不遵守生成间隔
summariser配置项 见jmeter.properties文件:
# Define the following property to automatically start a summariser with that name
# (applies to CLI mode only)
#summariser.name=summary
#
# interval between summaries (in seconds) default 3 minutes
#summariser.interval=30
#
# Write messages to log file
#summariser.log=true
#
# Write messages to System.out
#summariser.out=true
此元素主要用于批处理 (CLI) 运行。输出如下所示:
label +     16 in 0:00:12 =    1.3/s Avg:  1608 Min:  1163 Max:  2009 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label +     82 in 0:00:30 =    2.7/s Avg:  1518 Min:  1003 Max:  2020 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =     98 in 0:00:42 =    2.3/s Avg:  1533 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     85 in 0:00:30 =    2.8/s Avg:  1505 Min:  1008 Max:  2005 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    183 in 0:01:13 =    2.5/s Avg:  1520 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     79 in 0:00:30 =    2.7/s Avg:  1578 Min:  1089 Max:  2012 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    262 in 0:01:43 =    2.6/s Avg:  1538 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     80 in 0:00:30 =    2.7/s Avg:  1531 Min:  1013 Max:  2014 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    342 in 0:02:12 =    2.6/s Avg:  1536 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     83 in 0:00:31 =    2.7/s Avg:  1512 Min:  1003 Max:  1982 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    425 in 0:02:43 =    2.6/s Avg:  1531 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     83 in 0:00:29 =    2.8/s Avg:  1487 Min:  1023 Max:  2013 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    508 in 0:03:12 =    2.6/s Avg:  1524 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     78 in 0:00:30 =    2.6/s Avg:  1594 Min:  1013 Max:  2016 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    586 in 0:03:43 =    2.6/s Avg:  1533 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     80 in 0:00:30 =    2.7/s Avg:  1516 Min:  1013 Max:  2005 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    666 in 0:04:12 =    2.6/s Avg:  1531 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     86 in 0:00:30 =    2.9/s Avg:  1449 Min:  1004 Max:  2017 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
label =    752 in 0:04:43 =    2.7/s Avg:  1522 Min:  1003 Max:  2020 Err:     0 (0.00%)
label +     65 in 0:00:24 =    2.7/s Avg:  1579 Min:  1007 Max:  2003 Err:     0 (0.00%) Active: 0 Started: 5 Finished: 5
label =    817 in 0:05:07 =    2.7/s Avg:  1526 Min:  1003 Max:  2020 Err:     0 (0.00%)
标签”是元素的名称。“ +”表示这条线是一条增量线,即显示自上次输出以来的变化。
=”表示该行为合计行,即显示累计。
JMeter 日志文件中的条目还包括时间戳。示例“ 817 in 0:05:07 = 2.7/s ”表示在 5 分 7 秒内记录了 817 个样本,计算结果为每秒 2.7 个样本。Avg(平均)、
Min 最小)和Max(最大)时间以毫秒为单位。 “ Err ” 表示错误数(也显示为百分比)。

最后两行将出现在测试结束时。它们不会同步到适当的时间边界。请注意,初始和最终增量可能小于间隔(在上面的示例中为 30 秒)。第一个增量通常会较低,因为 JMeter 会同步到区间边界。最后一个增量会更低,因为测试通常不会在精确的区间边界上完成。

标签用于将样本结果分组在一起。因此,如果您有多个线程组并希望对它们进行汇总,请使用相同的标签 - 或将汇总器添加到测试计划(因此所有线程组都在范围内)。通过使用合适的标签并将汇总器添加到测试计划的适当部分,可以实现不同的汇总分组。

在 CLI 模式下,默认配置了一个名为“ summariser ”的 Generate Summary Results 侦听器,如果您已经在测试计划中添加了一个,请确保您以不同的方式命名,否则结果将在此标签 (summary) 下累积,导致错误结果 (sum总样本 + 位于 Generate Summary Results 监听器的父级下的样本)。
这不是错误,而是允许跨线程组进行汇总的设计选择。
生成汇总结果控制面板的屏幕截图
生成汇总结果控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。它在输出中显示为“标签”。具有相同标签的所有元素的详细信息将被添加在一起。
是的
^

比较断言可视化器¶

比较断言可视化器显示任何比较断言元素的结果。
比较断言可视化工具控制面板的屏幕截图
比较断言可视化工具控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
是的
^

后端监听器

后端侦听器是一个异步侦听器,使您能够插入BackendListenerClient的自定义实现。默认情况下,提供了 Graphite 实现。
后端侦听器控制面板的屏幕截图
后端侦听器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
是的
后端监听器实现
BackendListenerClient实现的类。
是的
异步队列大小
在异步处理 SampleResults 时保存它们的队列的大小。
是的
参数
BackendListenerClient实现的参数。
是的

以下参数适用于GraphiteBackendListenerClient实现:

参数

属性
描述
必需的
石墨指标发件人
org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSenderorg.apache.jmeter.visualizers.backend.graphite.PickleGraphiteMetricsSender
是的
石墨主机
Graphite 或 InfluxDB(启用 Graphite 插件)服务器主机
是的
石墨端口
Graphite 或 InfluxDB(启用 Graphite 插件)服务器端口,默认为2003。注意PickleGraphiteMetricsSender(端口2004)只能与 Graphite 服务器通信。
是的
rootMetricsPrefix
发送到后端的指标前缀。默认为“ jmeter ”。请注意,JMeter 不会在根前缀和 samplerName 之间添加分隔符,这就是当前需要尾随点的原因。
是的
仅摘要
只发送没有详细信息的摘要。默认为true
是的
采样器列表
定义要发送到后端的样本结果的名称(标签)。如果useRegexpForSamplersList=false这是一个分号分隔的名称列表。如果useRegexpForSamplersList=true这是一个正则表达式,它将与名称匹配。
是的
使用RegexpForSamplersList
将 samplersList 视为一个正则表达式,以选择要向后端报告指标的采样器。默认为false
是的
百分位数
您要发送到后端的百分位数。百分位数可能包含小数部分,例如12.5。(分隔符始终为“.”)列表必须用分号分隔。通常 3 或 4 个值就足够了。
是的

有关更多详细信息,另请参阅实时结果

Grafana 仪表板
Grafana 仪表板

从 JMeter 3.2 开始,一个允许直接在 InfluxDB 中使用自定义模式编写的实现。它被称为InfluxdbBackendListenerClient。以下参数适用于 InfluxdbBackendListenerClient实现:

参数

属性
描述
必需的
influxdbMetricsSender
org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
是的
流入数据库网址
涌入网址(例如:http://influxHost:8086/write?db=jmeter
是的
涌入数据库令牌
InfluxDB 2身份验证令牌(例如:HE9yIdAPzWJDspH_tCc2UvdKZpX==);从 5.2 开始。
应用
测试应用程序的名称。此值作为名为“应用程序”的标记存储在“事件”测量中
是的
测量
根据Influx Line Protocol Reference进行测量。默认为“ jmeter ”。
是的
仅摘要
只发送没有详细信息的摘要。默认为true
是的
采样器正则表达式
将与样本名称匹配并发送到后端的正则表达式。
是的
测试标题
测试名称。默认为测试名称。该值作为名为“文本”的字段存储在“事件”测量中。JMeter 在测试开始和结束时自动生成一个注释,该值以“started”和“ended”结尾
是的
事件标签
Grafana 允许为每个注释显示标签。你可以在这里填写。该值作为名为“ tags ”的标签存储在“ events ”测量中。
百分位数
您要发送到后端的百分位数。百分位数可能包含小数部分,例如12.5 (分隔符始终为“ . ”)。列表必须用分号分隔。通常三个或四个值就足够了。
是的
TAG_WhatEverYouWant
您可以根据需要添加任意数量的自定义标签。为它们中的每一个创建一个新行并在其名称前加上“ TAG_

有关更多详细信息,另请参阅Grafana 中的实时结果Influxdb 注释。还有一个关于为 InfluxDB v2 配置监听器的小节

从 JMeter 5.4 开始,将所有示例结果写入 InfluxDB 的实现。它被称为InfluxDBRawBackendListenerClient。值得注意的是, 由于数据和个人写入的增加,JMeter 和 InfluxDB 都将使用比InfluxdbBackendListenerClient更多的资源。以下参数适用于 InfluxDBRawBackendListenerClient 实现:

参数

属性
描述
必需的
influxdbMetricsSender
org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
是的
流入数据库网址
Influx URL(例如 http://influxHost:8086/write?db=jmeter 或者,对于云,https://eu-central-1-1.aws.cloud2.influxdata.com/api/v2/write?org =org-id&bucket=jmeter)
是的
涌入数据库令牌
InfluxDB 2身份验证令牌(例如 HE9yIdAPzWJDspH_tCc2UvdKZpX==)
测量
根据Influx Line Protocol Reference进行测量。默认为“ jmeter ”。
是的
^
^

18.4 配置元素


配置元素可用于设置默认值和变量以供采样器稍后使用。请注意,这些元素是在找到它们的范围的开始处处理的,即在同一范围内的任何采样器之前。

CSV 数据集配置

CSV Data Set Config 用于从文件中读取行,并将它们拆分为变量。它比__CSVRead()__StringFromFile()函数更易于使用。它非常适合处理大量变量,并且对于使用“随机”和唯一值进行测试也很有用。

在运行时生成唯一的随机值在 CPU 和内存方面是昂贵的,因此只需在测试之前创建数据。如有必要,文件中的“随机”数据可以与运行时参数一起使用,以从每次运行中创建不同的值集 - 例如使用连接 - 这比在运行时生成所有内容要便宜得多。

JMeter 允许引用值;这允许值包含分隔符。如果启用了“允许引用数据”,则可以将值括在双引号中。这些被删除。要在带引号的字段中包含双引号,请使用两个双引号。例如:

1,"2,3","4""5" =>
1
2,3
4"5

JMeter 支持 CSV 文件,该文件具有定义列名的标题行。要启用此功能,请将“变量名称”字段留空。必须提供正确的分隔符。

JMeter 支持带有包含换行符的引用数据的 CSV 文件。

默认情况下,文件只打开一次,每个线程将使用文件中不同的行。但是,将行传递给线程的顺序取决于它们的执行顺序,这可能在迭代之间有所不同。在每次测试迭代开始时读取行。文件名和模式在第一次迭代中被解析。

有关其他选项,请参阅下面的共享模式说明。如果您希望每个线程都有自己的一组值,那么您将需要创建一组文件,每个线程一个文件。例如test1.csv , test2.csv , ..., test n .csv。使用文件名 test${__threadNum}.csv并将“共享模式”设置为“当前线程”。

CSV 数据集变量在每次测试迭代开始时定义。由于这是在配置处理完成之后,它们不能用于在配置时处理其内容的某些配置项(例如 JDBC Config)(请参阅 错误 40394)但是变量在 HTTP Auth Manager 中确实有效,例如用户名等. 在运行时处理。

作为一种特殊情况,分隔符字段中的字符串“ \t ”(不带引号)被视为制表符。

当到达文件结尾(EOF)并且 recycle 选项为true时,读取从文件的第一行重新开始。

如果 recycle 选项为false,并且 stopThread 为false ,则当到达文件末尾时,所有变量都设置为<EOF> 。可以通过设置 JMeter 属性csvdataset.eofstring来更改此值。

如果 Recycle 选项为false且 Stop Thread 为true,则到达EOF将导致线程停止。

CSV 数据集配置控制面板的屏幕截图
CSV 数据集配置控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
文件名
要读取的文件的名称。 相对文件名根据活动测试计划的路径进行解析。 对于分布式测试,CSV 文件必须存储在 JMeter 服务器启动的正确相对目录中的服务器主机系统中。 也支持绝对文件名,但请注意它们不太可能在远程模式下工作,除非远程服务器具有相同的目录结构。如果以两种不同的方式引用相同的物理文件 - 例如csvdata.txt./csvdata.txt - 那么这些文件将被视为不同的文件。如果操作系统不区分大小写,csvData.TXT也会单独打开。
是的
文件编码
用于读取文件的编码,如果不是平台默认值。
变量名
变量名称列表。名称必须由分隔符分隔。它们可以用双引号引起来。JMeter 支持 CSV 标题行:如果变量名字段为空,则读取文件的第一行并将其解释为列名列表。
使用第一行作为变量名
忽略 CSV 文件的第一行,仅在变量名称不为空时使用,如果变量名称为空,则第一行必须包含标题。
分隔符
用于分割文件中记录的分隔符。如果行上的值少于变量,则剩余变量不会更新 - 因此它们将保留其先前的值(如果有)。
是的
允许引用数据?
CSV 文件是否允许引用值?如果启用,则可以将值括在" - 双引号中 - 允许值包含分隔符。
是的
在 EOF 上回收?
是否应该在到达EOF时从头开始重新读取文件?(默认为
是的
在 EOF 上停止线程?
如果 Recycle 为假,是否应该在EOF上停止线程?(默认为
是的
共享模式
  • 所有线程-(默认)文件在所有线程之间共享。
  • 当前线程组- 每个文件为元素出现的每个线程组打开一次
  • 当前线程- 为每个线程单独打开每个文件
  • 标识符- 共享相同标识符的所有线程共享同一个文件。因此,例如,如果您有 4 个线程组,您可以为两个或更多组使用一个公共 ID,以便在它们之间共享文件。或者您可以使用线程号在不同线程组中的相同线程号之间共享文件。
是的
^

FTP 请求默认值

FTP 请求默认值控制面板的屏幕截图
FTP 请求默认值控制面板的屏幕截图
^

DNS缓存管理器

当用户从不同的 IP 接收内容时,DNS 缓存管理器元素允许测试在负载平衡器(CDN 等)后面有多个服务器的应用程序。默认情况下,JMeter 使用 JVM DNS 缓存。这就是为什么集群中只有一台服务器接收负载的原因。DNS 缓存管理器在每次迭代中分别为每个线程解析名称,并将解析结果保存到其内部 DNS 缓存,该缓存独立于 JVM 和 OS DNS 缓存。

静态主机的映射可用于模拟/etc/hosts文件之类的内容。这些条目将优先于自定义解析器。如果要使用此映射,则必须启用 使用自定义 DNS 解析器。

静态主机表的使用

假设您有一个测试服务器,您想使用一个名称访问该服务器,但该名称尚未(尚未)设置在您的 DNS 服务器中。对于我们的示例,这将是www.example.com作为服务器名称,您希望通过服务器a123.another.example.org的 IP 访问该名称。

您可以更改您的工作站并向您的/etc/hosts文件添加一个条目 - 或您的操作系统的等效文件,或者向 DNS 缓存管理器的静态主机表添加一个条目。

您可以在第一列 ( Host ) 中输入www.example.com ,在第二列 ( Hostname or IP address ) 中输入 a123.another.example.org。正如第二列的名称所暗示的那样,您甚至可以在那里使用测试服务器的 IP 地址。

将使用自定义 DNS 解析器查找测试服务器的 IP 地址。如果没有给出,将使用系统 DNS 解析器。

现在您可以在您的 HTTPClient4 采样器中使用www.example.com,并且将针对 a123.another.example.org 发出请求,并将所有标头设置为www.example.com

DNS 缓存管理器控制面板的屏幕截图
DNS 缓存管理器控制面板的屏幕截图
DNS 缓存管理器设计用于线程组或测试计划的根。不要将其作为特定 HTTP 采样器的子元素
DNS 缓存管理器仅适用于使用 HTTPClient4 实现的 HTTP 请求。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
每次迭代清除缓存
如果选中,则每次开始新的迭代时都会清除每个线程的 DNS 缓存。
使用系统 DNS 解析器
将使用系统 DNS 解析器。为了正确的工作编辑 $JAVA_HOME/jre/lib/security/java.security并添加networkaddress.cache.ttl=0
不适用
使用自定义 DNS 解析器
将使用自定义 DNS 解析器(来自 dnsjava 库)。
不适用
主机名或 IP 地址
要使用的 DNS 服务器列表。如果为空,将使用网络配置 DNS。
添加按钮
向 DNS 服务器表中添加一个条目。
不适用
删除按钮
删除当前选定的表条目。
不适用
主机和主机名或 IP 地址
将主机名映射到将使用自定义 DNS 解析器解析的静态主机条目。
添加静态主机按钮
向静态主机表添加一个条目。
不适用
删除静态主机按钮
删除表中当前选中的静态主机。
不适用
^

HTTP 授权管理器

授权管理器允许您为使用服务器身份验证限制的网页指定一个或多个用户登录。当您使用浏览器访问受限页面时,您会看到这种类型的身份验证,并且您的浏览器会显示一个登录对话框。JMeter 在遇到此类页面时会传输登录信息。

授权标头可能不会显示在树视图侦听器“请求”选项卡中。Java 实现会进行抢先式身份验证,但在 JMeter 获取标头时它不会返回 Authorization 标头。自 3.2 起,HttpComponents (HC 4.5.X) 实现默认为抢占式,并且将显示标头。要禁用此功能,请按以下方式设置值,在这种情况下,将仅在响应质询时执行身份验证。

在文件jmeter.properties 中设置httpclient4.auth.preemptive=false

注意:以上设置仅适用于 HttpClient 采样器。
在查找与 URL 的匹配项时,JMeter 依次检查每个条目,并在找到第一个匹配项时停止。因此,最具体的 URL 应首先出现在列表中,然后是不太具体的 URL。重复的 URL 将被忽略。如果你想为不同的线程使用不同的用户名/密码,你可以使用变量。这些可以使用CSV 数据集配置元素进行设置(例如)。
HTTP 授权管理器控制面板的屏幕截图
HTTP授权管理器控制面板截图
如果在 Sampler 范围内有多个 Authorization Manager,则目前无法指定使用哪一个。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
每次迭代都清除身份验证?
由 Kerberos 身份验证使用。如果选中,验证将在主线程组循环的每次迭代中完成,即使它已经在前一个迭代中完成。如果每个主线程组迭代代表一个虚拟用户的行为,这通常很有用。
是的
基本网址
与一个或多个 HTTP 请求 URL 匹配的部分或完整 URL。例如,假设您指定了“ http://localhost/restricted/ ”的基本 URL,用户名为“ jmeter ”,密码为“ jmeter ”。如果您向 URL“ http://localhost/restricted/ant/myPage.html ”发送 HTTP 请求,授权管理器会发送名为“ jmeter ”的用户的登录信息。
是的
用户名
要授权的用户名。
是的
密码
用户的密码。(注意,这是在测试计划中未加密存储的)
是的
领域
用于 NTLM 的域。
领域
用于 NTLM 的领域。
机制
要执行的身份验证类型。JMeter 可以根据使用的 Http Samplers 执行不同类型的身份验证:
爪哇
基本的
HttpClient 4
基本摘要Kerberos
Realm 仅适用于 HttpClient 采样器。

Kerberos 配置:

要配置 Kerberos,您需要设置至少两个 JVM 系统属性:

  • -Djava.security.krb5.conf=krb5.conf
  • -Djava.security.auth.login.config=jaas.conf

您还可以在文件bin/system.properties中配置这两个属性。查看位于 JMeter bin文件夹中的两个示例配置文件( krb5.confjaas.conf )以获取更多文档的参考,并调整它们以匹配您的 Kerberos 配置。

SPNEGO 默认禁用凭证委派。如果要启用它,可以通过将属性kerberos.spnego.delegate_cred设置为true来实现。

为 Kerberos SPNEGO 身份验证生成 SPN 时,IE 和 Firefox 将省略 URL 中的端口号。如果端口号与标准端口号(80443 )不同, Chrome 有一个选项(--enable-auth-negotiate-port )来包含端口号。可以通过设置以下 JMeter 属性来模拟该行为,如下所示。

jmeter.propertiesuser.properties中,设置:

  • kerberos.spnego.strip_port=false

控制:
  • 添加按钮 - 将条目添加到授权表。
  • 删除按钮 - 删除当前选定的表格条目。
  • 加载按钮 - 加载以前保存的授权表并将条目添加到现有授权表条目中。
  • 另存为按钮 - 将当前授权表保存到文件中。
当您保存测试计划时,JMeter 会自动保存所有授权表条目——包括任何未加密的密码。
授权示例

下载这个例子。在此示例中,我们在本地服务器上创建了一个测试计划,该计划发送三个 HTTP 请求,其中两个需要登录,另一个对所有人开放。请参见图 10,了解我们的测试计划的构成。在我们的服务器上,我们有一个名为“ secret ”的受限目录,其中包含两个文件,“ index.html ”和“ index2.html ”。我们创建了一个名为“ kevin ”的登录 ID,其密码为“ spot ”。因此,在我们的授权管理器中,我们为受限目录以及用户名和密码创建了一个条目(参见图 11)。名为“ SecretPage1 ”和“ SecretPage2 ”的两个 HTTP 请求/secret/index.html ”和“ /secret/index2.html ”。另一个名为“ NoSecretPage ”的HTTP请求向“ /index.html ”发出请求。

图 10 - 测试计划
图 10 - 测试计划
图 11 - 授权管理器控制面板
图 11 - 授权管理器控制面板

当我们运行测试计划时,JMeter 在授权表中查找它所请求的 URL。如果 Base URL 与 URL 匹配,则 JMeter 将此信息与请求一起传递。

您可以下载测试计划,但由于它是作为我们本地服务器的测试而构建的,因此您将无法运行它。但是,您可以将其用作构建您自己的测试计划的参考。
^

HTTP缓存管理器

HTTP 缓存管理器用于在其范围内为 HTTP 请求添加缓存功能,以模拟浏览器缓存功能。每个虚拟用户线程都有自己的缓存。默认情况下,缓存管理器将使用 LRU 算法在每个虚拟用户线程的缓存中存储多达 5000 个项目。使用属性“ maxSize ”来修改这个值。请注意,该值增加得越多,HTTP 缓存管理器消耗的内存就越多,因此请务必相应地调整-Xmx JVM 选项。

如果样本成功(即具有响应代码2xx),则为 URL 保存Last-ModifiedEtag(以及Expired ,如果相关)值。在执行下一个示例之前,采样器会检查缓存中是否有条目,如果有,则为请求设置If-Last-ModifiedIf-None-Match条件标头。

此外,如果选择了“使用 Cache-Control/Expires 标头”选项,则会根据当前时间检查Cache-Control / Expires值。如果请求是GET请求,并且时间戳在将来,则采样器立即返回,而不向远程服务器请求 URL。这是为了模拟浏览器的行为。请注意,如果Cache-Control标头为“ no-cache ”,则响应将存储在缓存中作为预过期,因此将生成条件GET请求。如果Cache-Control有任何其他值,“ max-age" expiry 选项被处理以计算条目的生命周期,如果缺少则将使用 expire 标头,如果还缺少条目,将按照RFC 2616 第 13.2.4 节中的指定使用Last-Modified时间和响应日期进行缓存。

如果请求的文档自缓存后未更改,则响应正文将为空。同样,如果到期日期在将来。这可能会导致断言出现问题。
HTTP 缓存管理器控制面板的屏幕截图
HTTP 缓存管理器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
每次迭代清除缓存
如果选中,则在线程开始时清除缓存。
是的
处理 GET 请求时使用 Cache Control/Expires 标头
见上面的描述。
是的
缓存中的最大元素数
见上面的描述。
是的
^

Cookie Manager 元素有两个功能:
首先,它像 Web 浏览器一样存储和发送 cookie。如果您有一个 HTTP 请求并且响应包含一个 cookie,则 Cookie 管理器会自动存储该 cookie 并将其用于该特定网站的所有未来请求。每个 JMeter 线程都有自己的“cookie 存储区”。因此,如果您正在测试一个使用 cookie 存储会话信息的网站,则每个 JMeter 线程都会有自己的会话。请注意,此类 cookie 不会出现在 Cookie 管理器显示屏上,但可以使用查看结果树侦听器查看。

JMeter 检查接收到的 cookie 对于 URL 是否有效。这意味着不存储跨域 cookie。如果您有错误行为或希望使用跨域 cookie,请定义 JMeter 属性“ CookieManager.check.cookies=false ”。

接收到的 Cookie 可以存储为 JMeter 线程变量。要将 cookie 保存为变量,请定义属性“ CookieManager.save.cookies=true ”。此外,cookie 名称在存储之前以“ COOKIE_ ”为前缀(这避免了局部变量的意外损坏)要恢复到原始行为,请定义属性“ CookieManager.name.prefix= ”(一个或多个空格)。如果启用,名称为TEST的 cookie 的值可以称为${COOKIE_TEST}

其次,您可以手动将 cookie 添加到 Cookie 管理器。但是,如果您这样做,cookie 将由所有 JMeter 线程共享。

请注意,此类 Cookie 的过期时间是在很远的将来创建的

默认情况下会忽略具有空值的 Cookie 。这可以通过设置 JMeter 属性来更改:CookieManager.delete_null_cookies=false。请注意,这也适用于手动定义的 cookie - 任何此类 cookie 将在更新时从显示中删除。另请注意,cookie 名称必须是唯一的 - 如果使用相同名称定义了第二个 cookie,它将替换第一个。

HTTP Cookie 管理器控制面板的屏幕截图
HTTP Cookie 管理器控制面板的屏幕截图
如果一个 Sampler 范围内有多个 Cookie Manager,目前无法指定使用哪一个。此外,存储在一个 cookie 管理器中的 cookie 对任何其他管理器均不可用,因此请谨慎使用多个 Cookie 管理器。
属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
每次迭代清除 Cookie
如果选中,则每次执行主线程组循环时都会清除所有服务器定义的 cookie。GUI 中定义的任何 cookie 都不会被清除。
是的
Cookie 政策
将用于管理 cookie 的 cookie 策略。“标准”是自 3.0 以来的默认值,并且在大多数情况下应该可以工作。请参阅Cookie 规范CookieSpec 实现 [注意:“ ignoreCookies ”相当于省略 CookieManager。]
是的
执行
HC4CookieHandler (HttpClient 4.5.X API)。自 3.0 起 默认为HC4CookieHandler 。
[注意:如果您有一个网站要使用 IPv6 地址进行测试,请选择HC4CookieHandler (IPv6 compliant)]
是的
用户定义的 Cookie
这使您有机会使用在测试执行期间将由所有线程使用的硬编码 cookie。
”是服务器的主机名(没有http://);该端口当前被忽略。
不(气馁,除非你知道自己在做什么)
添加按钮
向 cookie 表添加一个条目。
不适用
删除按钮
删除当前选定的表条目。
不适用
加载按钮
加载以前保存的 cookie 表并将条目添加到现有 cookie 表条目中。
不适用
另存为按钮
将当前 cookie 表保存到文件中(不保存从 HTTP 响应中提取的任何 cookie)。
不适用
^

HTTP 请求默认值

此元素允许您设置 HTTP 请求控制器使用的默认值。例如,如果您正在创建一个包含 25 个 HTTP 请求控制器的测试计划,并且所有请求都发送到同一台服务器,您可以添加一个 HTTP 请求默认值元素,并填写“服务器名称或 IP ”字段。然后,当您添加 25 个 HTTP 请求控制器时,将“服务器名称或 IP ”字段留空。控制器将从 HTTP 请求默认值元素继承此字段值。

所有端口值都一视同仁;未指定端口的采样器将使用 HTTP 请求默认端口(如果提供)。
HTTP 请求默认值控制面板的屏幕截图
HTTP 请求默认值控制面板的屏幕截图
HTTP 请求高级配置字段
HTTP 请求高级配置字段

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
服务器
Web 服务器的域名或 IP 地址。例如www.example.com。[不包括http://前缀。
港口
Web 服务器正在侦听的端口。
连接超时
连接超时。等待连接打开的毫秒数。
响应超时
响应超时。等待响应的毫秒数。
执行
JavaHttpClient4。如果未指定默认值取决于 JMeter 属性 jmeter.httpsampler的值,则使用Java实现。
协议
HTTPHTTPS
内容编码
用于请求的编码。
小路
资源的路径(例如/servlets/myServlet)。如果资源需要查询字符串参数,请将它们添加到下方的“使用请求发送参数”部分。请注意,该路径是完整路径的默认路径,而不是应用于 HTTP 请求屏幕上指定的路径的前缀。
随请求发送参数
查询字符串将从您提供的参数列表中生成。每个参数都有一个名称。查询字符串将以正确的方式生成,具体取决于您选择的“方法”(即,如果您选择GET,查询字符串将附加到 URL,如果POST,则将单独发送)。此外,如果您使用多部分表单发送文件,则将使用多部分表单规范创建查询字符串。
服务器(代理)
执行请求的代理服务器的主机名或 IP 地址。[不包括http://前缀。]
港口
代理服务器正在侦听的端口。
否,除非指定了代理主机名
用户名
(可选)代理服务器的用户名。
密码
(可选)代理服务器的密码。(注意,这是在测试计划中未加密存储的)
从 HTML 文件中检索所有嵌入式资源
告诉 JMeter 解析 HTML 文件并为文件中引用的所有图像、Java 小程序、JavaScript 文件、CSS 等发送 HTTP/HTTPS 请求。
使用并发池
使用并发连接池来获取嵌入式资源。
尺寸
用于获取嵌入式资源的并发连接的池大小。
网址必须匹配:
如果存在,这必须是一个正则表达式,用于匹配找到的任何嵌入式 URL。因此,如果您只想从http://example.invalid/下载嵌入式资源,请使用表达式: http://example\.invalid/.*
URL 不能匹配:
如果存在,这必须是一个正则表达式,用于过滤掉找到的任何嵌入式 URL。因此,如果您不想从任何来源下载 PNG 或 SVG 文件,请使用表达式: .*\.(?i:svg|png)
注意:单选按钮只有两种状态——开或关。这使得无法一致地覆盖设置 - 关闭是否意味着关闭,或者是否意味着使用当前默认值?JMeter 使用后者(否则默认值根本不起作用)。因此,如果按钮关闭,则后面的元素可以将其设置为打开,但如果按钮打开,则后面的元素无法将其设置为关闭。
^

HTTP 头管理器

标头管理器允许您添加或覆盖 HTTP 请求标头。

JMeter 现在支持多个 Header Managers。合并标题条目以形成采样器的列表。如果要合并的条目与现有标题名称匹配,则它将替换先前的条目。这允许您设置一组默认标题,并将调整应用于特定的采样器。请注意,标头的空值不会删除现有标头,它只是替换其值。

HTTP 标头管理器控制面板的屏幕截图
HTTP Header Manager 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
名称(标题)
请求标头的名称。您可能想要尝试的两个常见请求标头是“ User-Agent ”和“ Referer ”。
否(您应该至少有一个,但是)
价值
请求标头值。
否(您应该至少有一个,但是)
添加按钮
向标题表添加一个条目。
不适用
删除按钮
删除当前选定的表条目。
不适用
加载按钮
加载以前保存的标题表并将条目添加到现有的标题表条目中。
不适用
另存为按钮
将当前头表保存到文件中。
不适用
标头管理器示例

下载这个例子。在此示例中,我们创建了一个测试计划,告诉 JMeter 覆盖默认的“ User-Agent ”请求标头并使用特定的 Internet Explorer 代理字符串。(见图 12 和 13)。

图 12 - 测试计划
图 12 - 测试计划
图 13 - Header Manager 控制面板
图 13 - Header Manager 控制面板
^

Java 请求默认值

Java Request Defaults 组件允许您为 Java 测试设置默认值。请参阅Java 请求

Java 请求默认值控制面板的屏幕截图
Java 请求默认值控制面板的屏幕截图
^

JDBC 连接配置

从提供的 JDBC 连接设置创建一个数据库连接(由JDBC 请求采样器使用)。可以选择在线程之间汇集连接。否则每个线程都有自己的连接。JDBC 采样器使用连接配置名称来选择适当的连接。使用的池是 DBCP,参见BasicDataSource 配置参数
JDBC 连接配置控制面板截图
JDBC 连接配置控制面板截图

参数

属性
描述
必需的
姓名
树中显示的连接配置的描述性名称。
创建的池的变量名称
连接所绑定的变量的名称。可以使用多个连接,每个连接都绑定到不同的变量,从而允许 JDBC 采样器选择适当的连接。
每个名称必须不同。如果有两个配置元素使用相同的名称,则只保存一个。如果检测到重复名称,JMeter 会记录一条消息。
是的
最大连接数
池中允许的最大连接数。在大多数情况下,将其设置为零 (0)。这意味着每个线程将获得自己的池,其中包含一个连接,即线程之间不共享连接。
如果您真的想使用共享池(为什么?),请将最大计数设置为与线程数相同,以确保线程不会相互等待。
是的
最大等待(毫秒)
如果在尝试检索连接的过程中超过超时时间,Pool 会抛出错误,请参阅BasicDataSource.html#getMaxWaitMillis
是的
驱逐运行之间的时间(毫秒)
空闲对象驱逐线程运行之间休眠的毫秒数。当为非肯定时,不会运行空闲的对象驱逐线程。(默认为“ 60000 ”,1 分钟)。请参阅BasicDataSource.html#getTimeBetweenEvictionRunsMillis
是的
自动提交
打开或关闭连接的自动提交。
是的
事务隔离
事务隔离级别
是的
预初始化池
连接池可以立即初始化。如果设置为False(默认),则使用此池的 JDBC 请求采样器可能会测量第一个查询的更高响应时间——因为包括整个池的连接建立时间。
以新行分隔的初始化 SQL 语句
首次创建物理连接时将用于初始化物理连接的 SQL 语句集合。这些语句只执行一次 - 当配置的连接工厂创建连接时。
空闲时测试
测试池的空闲连接,请参阅BasicDataSource.html#getTestWhileIdle。验证查询将用于测试它。
是的
Soft Min Evictable Idle Time(ms)
连接在有资格被空闲对象驱逐器驱逐之前在池中空闲的最短时间,附加条件是至少minIdle连接保留在池中。请参阅BasicDataSource.html#getSoftMinEvictableIdleTimeMillis。默认为 5000(5 秒)
是的
验证查询
用于确定数据库是否仍在响应的简单查询。这默认为 jdbc 驱动程序的“ isValid() ”方法,适用于许多数据库。然而,有些可能需要不同的查询;例如 Oracle 可以使用类似“ SELECT 1 FROM DUAL ”的东西。

验证查询列表可以使用jdbc.config.check.query属性进行配置,默认情况下为:

数据库
从 INFORMATION_SCHEMA.SYSTEM_USERS 中选择 1
甲骨文
从双选1
DB2
从 sysibm.sysdummy1 中选择 1
MySQL 或 MariaDB
选择 1
Microsoft SQL Server(MS JDBC 驱动程序)
选择 1
PostgreSQL
选择 1
安格尔
选择 1
德比
值 1
H2
选择 1
火鸟
从 rdb$database 中选择 1
Exasol
选择 1
请注意,此验证查询用于池创建以对其进行验证,即使“空闲时测试”建议查询仅用于空闲连接。这是 DBCP 行为。
数据库网址
数据库的 JDBC 连接字符串。
是的
JDBC驱动类
驱动程序类的完全限定名称。(必须在 JMeter 的类路径中 - 最容易将.jar文件复制到 JMeter 的/lib目录中)。

预配置的 jdbc 驱动程序类列表可以使用jdbc.config.jdbc.driver.class属性进行配置,默认情况下为:

数据库
org.hsqldb.jdbc.JDBCDriver
甲骨文
oracle.jdbc.OracleDriver
DB2
com.ibm.db2.jcc.DB2Driver
MySQL
com.mysql.jdbc.Driver
Microsoft SQL Server(MS JDBC 驱动程序)
com.microsoft.sqlserver.jdbc.SQLServerDriver 或 com.microsoft.jdbc.sqlserver.SQLServerDriver
PostgreSQL
org.postgresql.Driver
安格尔
com.ingres.jdbc.IngresDriver
德比
org.apache.derby.jdbc.ClientDriver
H2
org.h2.Driver
火鸟
org.firebirdsql.jdbc.FBDriver
Apache 德比
org.apache.derby.jdbc.ClientDriver
玛丽亚数据库
org.mariadb.jdbc.Driver
SQLite
org.sqlite.JDBC
赛贝斯 AES
net.sourceforge.jtds.jdbc.Driver
Exasol
com.exasol.jdbc.EXADriver
是的
用户名
要连接的用户的名称。
密码
连接密码。(注意,这是在测试计划中未加密存储的)
连接属性
建立连接时要设置的连接属性(例如Oracle 的internal_logon=sysdba )

不同的数据库和 JDBC 驱动程序需要不同的 JDBC 设置。Database URL 和 JDBC Driver 类由 JDBC 实现的提供者定义。

一些可能的设置如下所示。请查看 JDBC 驱动程序文档中的确切详细信息。

如果 JMeter 报告没有合适的驱动程序,那么这可能意味着:

  • 找不到驱动程序类。在这种情况下,会有一条日志消息,例如DataSourceElement: Could not load driver: {classname} java.lang.ClassNotFoundException: {classname}
  • 已找到驱动程序类,但该类不支持连接字符串。这可能是因为连接字符串中的语法错误,或者因为使用了错误的类名。

如果数据库服务器未运行或不可访问,则 JMeter 将报告java.net.ConnectException

下面给出了数据库及其参数的一些示例。

MySQL
驱动类
com.mysql.jdbc.Driver
数据库网址
jdbc:mysql://host[:port]/dbname
PostgreSQL
驱动类
org.postgresql.Driver
数据库网址
jdbc:postgresql:{dbname}
甲骨文
驱动类
oracle.jdbc.OracleDriver
数据库网址
jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no} ))(connect_data=(sid={sid})))
入口 (2006)
驱动类
ingres.jdbc.IngresDriver
数据库网址
jdbc:ingres://host:port/db[;attr=value]
Microsoft SQL Server(MS JDBC 驱动程序)
驱动类
com.microsoft.sqlserver.jdbc.SQLServerDriver
数据库网址
jdbc:sqlserver://host:port;DatabaseName=dbname
Apache 德比
驱动类
org.apache.derby.jdbc.ClientDriver
数据库网址
jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]
玛丽亚数据库
驱动类
org.mariadb.jdbc.Driver
数据库网址
jdbc:mariadb://host[:port]/dbname[;URLAttributes=value[;…]]
Exasol(另请参阅JDBC 驱动程序文档
驱动类
com.exasol.jdbc.EXADriver
数据库网址
jdbc:exa:host[:port][;schema=SCHEMA_NAME][;prop_x=value_x]
以上可能不正确 - 请查看相关的 JDBC 驱动程序文档。
^

密钥库配置

Keystore Config Element 允许您配置 Keystore 将如何加载以及它将使用哪些密钥。此组件通常用于 HTTPS 场景中,您不想在响应时间中考虑密钥库初始化。

要使用此元素,您需要首先使用要测试的客户端证书设置 Java 密钥库,以执行此操作:

  1. 使用 Java keytool实用程序或通过 PKI创建证书
  2. 如果由 PKI 创建,请将您的密钥转换为 JKS 可接受的格式,从而将您的密钥导入 Java Key Store
  3. 然后通过两个 JVM 属性引用 keystore 文件(或者在system.properties中添加):
    • -Djavax.net.ssl.keyStore=path_to_keystore
    • -Djavax.net.ssl.keyStorePassword=password_of_keystore

要将 PKCS11 用作存储的源,您需要将javax.net.ssl.keyStoreType设置为PKCS11 并将javax.net.ssl.keyStore设置为NONE

密钥库配置控制面板的屏幕截图
密钥库配置控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
预载
是否预加载 Keystore。将其设置为true通常是最佳选择。
是的
持有证书别名的变量名
将包含用于客户端证书身份验证的别名的变量名称。例如,变量值将从 CSV 数据集中填充。在屏幕截图中,“ certificat_ssl ”也将是 CSV 数据集中的一个变量。默认为clientCertAliasVarName
错误的
别名开始索引
在 Keystore 中使用的第一个键的索引,从 0 开始。
是的
别名结束索引
在 Keystore 中使用的最后一个键的索引,从 0 开始。使用“持有证书别名的变量名”时,请确保它足够大,以便在启动时加载所有密钥。默认为 -1,表示全部加载。
是的
要使 JMeter 使用多个证书,您需要确保:
  • https.use.cached.ssl.context=falsejmeter.propertiesuser.properties中设置
  • 您对 HTTP 请求使用 HTTPClient 4 实现
^

登录配置元素

登录配置元素允许您在使用用户名和密码作为设置的一部分的采样器中添加或覆盖用户名和密码设置。

登录配置元素控制面板的屏幕截图
登录配置元素控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
用户名
要使用的默认用户名。
密码
要使用的默认密码。(注意,这是在测试计划中未加密存储的)
^

LDAP 请求默认值

LDAP 请求默认值组件允许您为 LDAP 测试设置默认值。请参阅LDAP 请求

LDAP 请求默认值控制面板的屏幕截图
LDAP 请求默认值控制面板的屏幕截图
^

LDAP 扩展请求默认值

LDAP Extended Request Defaults 组件允许您为扩展的 LDAP 测试设置默认值。请参阅LDAP 扩展请求

LDAP 扩展请求默认值控制面板的屏幕截图
LDAP 扩展请求默认值控制面板的屏幕截图
^

TCP 采样器配置

TCP 采样器配置为 TCP 采样器提供默认数据

TCP 采样器配置控制面板的屏幕截图
TCP Sampler Config 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
TCPClient 类名
TCPClient 类的名称。默认为属性tcp.handler,失败TCPClientImpl
服务器名称或 IP
TCP 服务器的名称或 IP
端口号
使用的端口
重用连接
如果选中,则连接保持打开状态。否则在读取数据时关闭。
是的
关闭连接
如果选中,则连接将在运行采样器后关闭。
是的
SO_LINGER
创建套接字时,以秒为单位启用/禁用SO_LINGER指定的逗留时间。如果将“ SO_LINGER ”值设置为0,则可以防止大量套接字处于TIME_WAIT状态。
行尾(EOL)字节值
行尾的字节值,将其设置为-128+127范围之外的值以跳过 EOL 检查。您也可以在jmeter.properties文件中使用tcp.eolByte属性进行设置。如果同时在 TCP Sampler Config 和jmeter.properties文件中设置此项,将使用 TCP Sampler Config 中的设置值。
连接超时
连接超时(毫秒,0 禁用)。
响应超时
响应超时(毫秒,0 禁用)。
设置节点层
是否应该设置 nodelay 属性?
要发送的文本
要发送的文本
^

用户定义变量

用户定义变量元素允许您定义一组初始变量,就像在测试计划中一样。

请注意,测试计划中的所有 UDV 元素(无论它们位于何处)都在开始时进行处理。
因此,您不能引用定义为测试运行一部分的变量,例如在后处理器中。

UDV 不应与每次调用时生成不同结果的函数一起使用。只有第一个函数调用的结果会保存在变量中。 但是,UDV 可以与__P()等函数一起使用,例如:

HOST      ${__P(host,localhost)}

它将定义变量“ HOST ”以具有 JMeter 属性“ host ”的值,如果未定义 ,则默认为“ localhost ”。

如需在测试运行期间定义变量,请参阅用户参数。UDV 按照它们在计划中出现的顺序从上到下进行处理。

为简单起见,建议仅将 UDV 放置在线程组的开头(或者可能在测试计划本身下)。

处理完测试计划和所有 UDV 后,将生成的变量集复制到每个线程以提供初始变量集。

如果运行时元素(例如用户参数预处理器或正则表达式提取器)定义了一个与 UDV 变量之一同名的变量,那么这将替换初始值,并且线程中的所有其他测试元素将看到更新的价值。

用户定义变量控制面板的屏幕截图
用户定义变量控制面板的屏幕截图
如果您有多个线程组,请确保为不同的值使用不同的名称,因为 UDV 在线程组之间共享。此外,在处理完元素之前,这些变量不可用,因此您不能引用在同一元素中定义的变量。您可以引用在早期 UDV 或测试计划中定义的变量。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
用户定义的变量
变量名称/值对。“名称”列下的字符串是您需要放在${...}构造中的括号内的字符串,以便稍后使用变量。然后整个${...}将被“ Value ”列中的字符串替换。
^

随机变量

随机变量配置元素用于生成随机数字字符串并将它们存储在变量中以备后用。它比使用用户定义的变量和__Random()函数更简单。

使用随机数生成器构造输出变量,然后使用格式字符串对结果数进行格式化。该数字使用公式minimum+Random.nextInt(maximum-minimum+1)计算。 Random.nextInt()需要一个正整数。这意味着最大值 - 最小值- 即范围 - 必须小于2147483647,但是只要范围可以,最小值最大值可以是任何值。

由于在每次迭代开始时都会评估随机值,因此使用属性以外的变量作为最小值或最大值可能不是一个好主意。第一次迭代时它将为零。
随机变量控制面板的屏幕截图
随机变量控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
是的
变量的名称
存储随机字符串的变量的名称。
是的
格式化字符串
要使用的java.text.DecimalFormat格式字符串。例如,“ 000 ”将生成至少 3 位数的数字,或“ USER_000 ”将生成USER_nnn形式的输出。如果未指定,则默认使用Long.toString()生成数字
最小值
生成的随机数的最小值(long )。
是的
最大值
生成的随机数的最大值(long )。
是的
随机种子
随机数生成器的种子。如果您使用相同的种子值并将 Per Thread 设置为true ,您将根据Random类为每个 Thread 获得相同的值 。如果没有设置种子,将使用 Random 的默认构造函数。
每个线程(用户)?
如果为False,则生成器在线程组中的所有线程之间共享。如果为True,则每个线程都有自己的随机生成器。
是的
^

计数器

允许用户创建一个可以在线程组中的任何位置引用的计数器。计数器配置允许用户配置起点、最大值和增量。计数器将从开始循环到最大值,然后从开始重新开始,继续这样直到测试结束。

计数器使用 long 来存储值,因此范围从-2^632^63-1

计数器控制面板截图
计数器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
起始值
计数器的起始值。在第一次迭代期间,计数器将等于该值(默认为 0)。
增量
每次迭代后计数器增加多少(默认为 0,表示不增加)。
是的
最大值
如果计数器超过最大值,则将其重置为起始值。默认为Long.MAX_VALUE
格式
可选格式,例如000将格式化为001002等。这将传递给DecimalFormat,因此可以使用任何有效格式。如果解释格式有问题,则忽略它。[使用Long.toString()生成默认格式]
导出的变量名称
这将是计数器值可用的变量名称。如果将其命名为counterA ,则可以按照用户定义的值 中的说明使用${counterA}访问它(默认情况下,它会创建一个可以使用${}访问的空字符串变量,但强烈建议不要这样做)
为每个用户独立跟踪计数器
换句话说,这是一个全局计数器,还是每个用户都有自己的计数器?如果未选中,则计数器是全局的(即,用户#1 将获得值“ 1 ”,而用户#2 将在第一次迭代中获得值“ 2 ”)。如果选中,每个用户都有一个独立的计数器。
在每个线程组迭代上重置计数器
此选项仅在按用户跟踪计数器时可用,如果选中,计数器将在每次线程组迭代时重置为开始值。当 Counter 在循环控制器中时,这可能很有用。
^

简单配置元素

Simple Config Element 允许您在采样器中添加或覆盖任意值。您可以选择值的名称和值本身。尽管一些喜欢冒险的用户可能会发现此元素的用途,但它主要是为开发人员提供的,作为他们在开发新 JMeter 组件时可以使用的基本 GUI。

简单配置元素控制面板的屏幕截图
简单配置元素控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
是的
参数名称
每个参数的名称。这些值是 JMeter 工作的内部值,通常不会记录在案。只有熟悉代码的人才会知道这些值。
是的
参数值
应用于该参数的值。
是的
^

MongoDB 源配置(已弃用)

从提供的 Connection 设置创建一个 MongoDB 连接(由MongoDB Script Sampler 使用)。每个线程都有自己的连接。JDBC 采样器使用连接配置名称来选择适当的连接。

然后,您可以 使用此代码通过元素MongoDBHolder访问 Beanshell 或 JSR223 测试元素中的com.mongodb.DB对象

import com.mongodb.DB;
import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder;
DB db = MongoDBHolder.getDBFromSource("value of property MongoDB Source",
            "value of property Database Name");
…
    
MongoDB 源配置控制面板的屏幕截图(已弃用)
MongoDB 源配置控制面板的屏幕截图(已弃用)

参数

属性
描述
必需的
姓名
树中显示的连接配置的描述性名称。
服务器地址列表
Mongo 数据库服务器
是的
MongoDB 源代码
连接所绑定的变量的名称。
每个名称必须不同。如果有两个配置元素使用相同的名称,则只保存一个。
是的
继续尝试
如果为true,驱动程序将继续尝试连接到同一服务器,以防无法建立套接字。
持续重试的最长时间,默认为 15 秒。
这对于通过阻止操作来避免在服务器暂时关闭时引发一些异常很有用。
平滑过渡到新的主节点也很有用(以便在重试时间内选出新的主节点)。
请注意,使用此标志时
  • 对于副本集,驱动程序将尝试连接到旧的主节点,而不是立即故障转移到新的主节点
  • 这不会阻止在套接字上的读/写操作中引发异常,该异常必须由应用程序处理。
即使此标志为假,驱动程序也已经具有自动重新创建断开连接并重试读取操作的机制。
默认为false
每台主机的最大连接数
连接超时
连接超时(以毫秒为单位)。
仅在建立新连接时使用Socket.connect(java.net.SocketAddress, int)
默认为0,表示无超时。
最大重试时间
重试打开与同一服务器的连接所花费的最长时间(以毫秒为单位)。
默认为0,这意味着如果autoConnectRetry 开启,则使用默认的 15 秒。
最长等待时间
线程等待连接变为可用的最大等待时间(以毫秒为单位)。
默认值为120,000
套接字超时
套接字超时(毫秒) 用于 I/O 套接字读写操作Socket.setSoTimeout(int)
默认为0,表示无超时。
套接字保持活动状态
此标志控制通过防火墙保持连接活动的套接字保持活动功能Socket.setKeepAlive(boolean)
默认为false
ThreadsAllowedToBlockForConnectionMultiplier
这个乘数与connectionsPerHost 设置相乘,给出了可能正在等待连接从池中变为可用的最大线程数。
所有其他线程将立即获得异常。
例如,如果connectionsPerHost10并且threadsAllowedToBlockForConnectionMultiplier5,那么最多 50 个线程可以等待连接。
默认值为5
写关注:安全
如果为true,驱动程序将对所有操作使用WriteConcern.SAFEWriteConcern
如果指定了wwtimeoutfsyncj,则忽略此设置。
默认为false
写关注:Fsync
全局WriteConcernfsync值。 默认为false
写关注:等待日记
全局WriteConcernj值。 默认为false
写关注:等待服务器
全局WriteConcernw值。默认为0
写关注:等待超时
全局WriteConcernwtimeout值。默认为0
写关注:继续出错
如果在第一个错误之后应该继续批量插入
^
^

螺栓连接配置

从提供的 Connection 设置创建一个 Bolt 连接池(由Bolt Request Sampler 使用)。
螺栓连接配置控制面板的屏幕截图
螺栓连接配置控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此采样器的描述性名称。
评论
免费文本以获取更多详细信息。
螺栓 URI
数据库 URI。
是的
用户名
用户帐号。
密码
用户凭据。
^
^

18.5 断言

断言用于对采样器执行额外的检查,并 在同一范围内的每个采样器之后处理。为确保断言仅应用于特定采样器,请将其添加为采样器的子级。

注意:除非另有说明,否则断言不适用于子样本(子样本) - 仅适用于父样本。在 JSR223 和 BeanShell 断言的情况下,脚本可以使用返回 SampleResults 数组的prev.getSubResults()方法检索子样本 。如果没有,该数组将为空。

断言可以应用于主样本、子样本或两者。默认情况下仅将断言应用于主样本。如果断言支持此选项,那么 GUI 上将有一个条目,如下所示:

断言范围
断言范围
或以下
断言范围
断言范围

如果子采样器失败而主样本成功,则将主样本设置为失败状态并添加断言结果。如果使用 JMeter 变量选项,则假定它与主样本相关,并且任何失败都将仅应用于主样本。

在运行了采样器的所有断言之后 ,变量JMeterThread.last_sample_ok被更新为“ true ”或“ false ”。

响应断言

响应断言控制面板允许您添加要与请求或响应的各个字段进行比较的模式字符串。模式字符串是:

  • 包含匹配:Perl5 风格的正则表达式
  • Equals , Substring : 纯文本,区分大小写

可以在ORO Perl5 正则表达式中找到模式匹配字符的摘要。

您还可以选择是否期望字符串与整个响应匹配,或者是否期望响应仅包含模式。您可以将多个断言附加到任何控制器以获得额外的灵活性。

请注意,模式字符串不应包含封闭分隔符,即使用Price: \d+而不是/Price: \d+/

默认情况下,模式是多行模式,这意味着“ . ”元字符不匹配换行符。在多行模式中,“ ^ ”和“ $ ”匹配字符串中任何位置的任何行的开始或结束 - 而不仅仅是整个字符串的开始和结束。请注意,\s确实匹配换行符。案例也很重要。要覆盖这些设置,可以使用扩展的正则表达式语法。例如:

(?一世)
忽略大小写
(?s)
将目标视为单行,即“ . ”匹配换行符
(?是)
以上两者
这些可以在表达式中的任何地方使用,并且在被覆盖之前一直有效。例如
(?i)苹果(?-i)馅饼
匹配“ Apple Pie ”,但不匹配“ AppPLe pIe
(?s)Apple.+?Pie
匹配Apple后跟Pie,可能在后续行。
苹果(?s).+?Pie
与上面相同,但在开始时使用(?s)可能更清楚。
响应断言控制面板的屏幕截图
响应断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 断言将应用于命名变量的内容
是的
测试场
指示 JMeter 测试请求或响应的哪个字段。
  • 文本响应- 来自服务器的响应文本,即正文,不包括任何 HTTP 标头。
  • 请求数据- 发送到服务器的请求文本,即正文,不包括任何 HTTP 标头。
  • 响应代码- 例如200
  • 响应消息- 例如OK
  • 响应标头,包括 Set-Cookie 标头(如果有)
  • 请求标头
  • 网址抽样
  • 文档(文本) - 通过 Apache Tika 从各种类型的文档中提取文本(请参阅查看结果树文档视图部分)。
是的
忽略状态
指示 JMeter 最初将状态设置为成功。

样本的整体成功是通过将断言的结果与现有的响应状态相结合来确定的。When the Ignore Status checkbox is selected, the Response status is forced to successful before evaluating the Assertion.

状态在4xx5xx范围内的 HTTP 响应通常被视为不成功。“忽略状态”复选框可用于在执行进一步检查之前将状态设置为成功。请注意,这将具有清除任何先前断言失败的效果,因此请确保仅在第一个断言上设置它。
是的
模式匹配规则
指示如何根据模式检查正在测试的文本。
  • 包含- 如果文本包含正则表达式模式,则为 true
  • Matches - 如果整个文本与正则表达式模式匹配,则为 true
  • Equals - 如果整个文本等于模式字符串则为真(区分大小写)
  • Substring - 如果文本包含模式字符串,则为 true(区分大小写)
EqualsSubstring模式是纯字符串,而不是正则表达式。 也可以选择NOT来反转检查的结果。 OR应用 OR 组合中的每个断言(如果 1 个模式来测试匹配,则断言将是好的)而不是 AND(所有模式必须匹配,以便断言是好的)。
是的
要测试的模式
要测试的模式列表。每个模式都单独测试。如果模式失败,则不检查进一步的模式。设置一个具有多个模式的断言与设置多个断言每个具有一个模式没有区别(假设其他选项相同)。
然而,当Ignore Status复选框被选中时,这具有取消任何先前断言失败的效果 - 因此请确保Ignore Status复选框仅用于第一个断言。
是的
自定义失败消息
让您定义将替换生成的失败消息

该模式是 Perl5 风格的正则表达式,但没有括号。

断言示例
图 14 - 测试计划
图 14 - 测试计划
图 15 - 带有模式的断言控制面板
图 15 - 带有模式的断言控制面板
图 16 - 断言侦听器结果(通过)
图 16 - 断言侦听器结果(通过)
图 17 - 断言侦听器结果(失败)
图 17 - 断言侦听器结果(失败)
^

持续时间断言

持续时间断言测试每个响应是否在给定的时间内收到。任何花费超过给定毫秒数(由用户指定)的响应都被标记为失败响应。

持续时间断言控制面板的屏幕截图
持续时间断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
持续时间(以毫秒为单位)
每个响应在被标记为失败之前允许的最大毫秒数。
是的
^

尺寸断言

Size Assertion 测试每个响应是否包含正确的字节数。您可以指定大小等于、大于、小于或不等于给定的字节数。

空响应被视为 0 字节,而不是报告为错误。
大小断言控制面板的屏幕截图
尺寸断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主样本- 断言仅适用于主样本
  • 仅子样本- 断言仅适用于子样本
  • 主样本和子样本- 断言适用于两者。
  • 要使用的 JMeter 变量名称- 断言将应用于命名变量的内容
是的
字节大小
用于测试响应大小(或 JMeter 变量的值)的字节数。
是的
比较类型
是否测试响应是否等于、大于、小于或不等于指定的字节数。
是的
^

XML 断言

XML 断言测试响应数据是否包含正式正确的 XML 文档。它不会基于 DTD 或模式验证 XML,也不会进行任何进一步的验证。

XML 断言控制面板的屏幕截图
XML 断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
^

BeanShell 断言

BeanShell 断言允许用户使用 BeanShell 脚本执行断言检查。

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 Assertion +Groovy 以提高性能、支持新的 Java 功能以及对 BeanShell 库的有限维护。

请注意,不同的解释器用于测试脚本中每个线程中断言的每次独立出现,但相同的解释器用于后续调用。这意味着变量在对断言的调用中持续存在。

所有断言都是从与采样器相同的线程调用的。

如果定义了属性“ beanshell.assertion.init ”,它将作为源文件的名称传递给解释器。这可用于定义常用方法和变量。在bin目录中有一个示例 init 文件:BeanShellAssertion.bshrc

测试元素支持ThreadListenerTestListener方法。这些应该在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell 断言控制面板的屏幕截图
BeanShell 断言控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。名称存储在脚本变量Label中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • bsh.args - 包含参数的字符串数组,在空白处分割
脚本文件
包含要运行的 BeanShell 脚本的文件。这会覆盖脚本。文件名存储在脚本变量FileName中
脚本
要运行的 BeanShell 脚本。返回值被忽略。
是(除非提供脚本文件)

您可以尝试一个示例脚本。

在调用脚本之前,在 BeanShell 解释器中设置了一些变量。除非另有说明,否则这些都是字符串:

  • log -记录器对象。(例如) log.warn("Message"[,Throwable])
  • SampleResult , prev - SampleResult对象;读写
  • Response - 响应对象;读写
  • 失败- 布尔值;读写;用于设置断言状态
  • 失败消息- 字符串;读写;用于设置断言消息
  • ResponseData - 响应正文(字节 [])
  • 响应代码- 例如200
  • ResponseMessage - 例如确定
  • ResponseHeaders - 包含 HTTP 标头
  • RequestHeaders - 包含发送到服务器的 HTTP 标头
  • 样品标签
  • SamplerData - 发送到服务器的数据
  • ctx - JMeterContext
  • vars - JMeterVariables - 例如
    vars.get("VAR1");
    vars.put("VAR2","value");
    vars.putObject("OBJ1",new Object());
  • 道具- JMeterProperties(类java.util.Properties) - 例如
    props.get("START.HMS");
    props.put("PROP1","1234");

Response 对象的以下方法可能有用:

  • setStopThread(布尔值)
  • setStopTest(布尔值)
  • 字符串 getSampleLabel()
  • setSampleLabel(字符串)
^

MD5Hex 断言

MD5Hex 断言允许用户检查响应数据的 MD5 哈希。

MD5Hex 断言控制面板截图
MD5Hex Assertion 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
MD5总和
代表 MD5 哈希的 32 个十六进制数字(大小写不重要)
是的
^

HTML 断言

HTML 断言允许用户使用 JTidy 检查响应数据的 HTML 语法。

HTML 断言控制面板的屏幕截图
HTML 断言控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
文档类型
省略自动严格松散
是的
格式
HTML , XHTMLXML
是的
仅错误
只注意错误?
是的
错误阈值
在将响应归类为失败之前允许的错误数
是的
警告阈值
在将响应归类为失败之前允许的警告数
是的
文件名
写入报告的文件名
^

XPath 断言

XPath 断言测试文档的格式是否正确,可以选择根据 DTD 进行验证,或者将文档放入 JTidy 并测试 XPath。如果该 XPath 存在,则断言为真。使用“ / ”将匹配任何格式正确的文档,并且是默认的 XPath 表达式。该断言还支持布尔表达式,例如“ count(//*error)=2 ”。有关 XPath 的更多信息,请参见http://www.w3.org/TR/xpath

一些示例表达式:
  • //title[text()='Text to match'] - 匹配响应中任意位置的<title>Text to match</title>
  • /title[text()='Text to match'] - 匹配响应中根级别的<title>Text to match</title>
XPath 断言控制面板的屏幕截图
XPath 断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
使用 Tidy(容错解析器)
使用 Tidy,即容忍 XML/HTML 错误
是的
安静的
设置整洁安静标志
如果选择整洁
报告错误
如果发生 Tidy 错误,则相应地设置 Assertion
如果选择整洁
显示警告
设置 Tidy showWarnings 选项
如果选择整洁
使用命名空间
应该尊重命名空间吗?(见下面关于命名空间的注释)
如果没有选择整洁
验证 XML
根据其架构检查文档。
如果没有选择整洁
忽略空格
忽略元素空白。
如果没有选择整洁
获取外部 DTD
如果选中,则获取外部 DTD。
如果没有选择整洁
XPath 断言
要在文档中匹配的 XPath。
是的
反转断言(如果满足上述条件将失败)
如果 XPath 表达式不匹配或返回 false,则为 True
非容忍解析器可能非常慢,因为它可能需要下载 DTD 等。
NAMESPACES
作为 Xalan XPath 解析器(JMeter 所基于的实现)的命名空间限制的解决方法,您需要:
  • 提供一个包含命名空间前缀映射 的属性文件(例如,如果您的文件名为namespaces.properties ):
    prefix1=http\://foo.apache.org
    prefix2=http\://toto.apache.org
    …
    
  • 使用属性 在user.properties文件中引用此文件:
    xpath.namespace.config=namespaces.properties
^

XPath2 断言

XPath2 断言测试文档的格式是否正确。使用“ / ”将匹配任何格式正确的文档,并且是默认的 XPath2 表达式。该断言还支持布尔表达式,例如“ count(//*error)=2 ”。

一些示例表达式:
  • //title[text()='Text to match'] - 匹配响应中任意位置的<title>Text to match</title>
  • /title[text()='Text to match'] - 匹配响应中根级别的<title>Text to match</title>
XPath2 断言控制面板的屏幕截图
XPath2 断言控制面板的屏幕截图

参数

属性
描述
必需的
命名空间别名列表
要用于解析文档的命名空间别名列表,每个声明一行。您必须按如下方式指定它们:prefix=namespace。与旧的 XPathExtractor 版本相比,此实现更容易使用名称空间。
XPath2 断言
要在文档中匹配的 XPath。
是的
反转断言
如果 xpath 表达式返回 true 或匹配,将失败,否则成功
命名空间别名列表
命名空间别名列表前缀=完整命名空间(每行一个)
^

XML 模式断言

XML Schema Assertion 允许用户根据 XML Schema 验证响应。

XML Schema Assertion 控制面板的屏幕截图
XML Schema Assertion 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
文件名
指定 XML 架构文件名
是的
^

JSR223 断言

JSR223 断言允许使用 JSR223 脚本代码检查上一个示例的状态。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
语言
要使用的 JSR223 语言
是的
参数
传递给脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • args - 包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的脚本的文件,如果使用相对文件路径,则它将相对于“ user.dir ”系统属性引用的目录
脚本编译缓存
如果使用的语言支持Compilable接口(Groovy 是其中之一,java、BeanShell 和 JavaScript 不是) ,JMeter 将使用该测试计划中的唯一字符串来缓存脚本编译的结果
如果您使用 Groovy 而不选中此选项,请参阅 JSR223 Sampler Java System 属性中的注释
脚本
要运行的脚本。
是(除非提供脚本文件)

设置了以下变量以供脚本使用:

  • log - ( Logger ) - 可用于写入日志文件
  • 标签- 字符串标签
  • Filename - 脚本文件名(如果有)
  • 参数- 参数(作为字符串)
  • args - 作为字符串数组的参数(按空格分割)
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
    vars.getObject("OBJ2");
    
  • 道具- (JMeterProperties - 类java.util.Properties) - 例如
    props.get("START.HMS");
    props.put("PROP1","1234");
    
  • SampleResult , prev - ( SampleResult ) - 可以访问之前的 SampleResult (如果有的话)
  • sampler - ( Sampler ) - 提供对当前采样器的访问权限
  • OUT - System.out - 例如OUT.println("message")
  • AssertionResult - ( AssertionResult ) - 断言结果

该脚本可以检查SampleResult 的各个方面。如果检测到错误,脚本应使用AssertionResult.setFailureMessage("message")AssertionResult.setFailure(true)

有关上述每个变量可用的所有方法的更多详细信息,请查看 Javadoc

^

比较断言

在负载测试期间不得使用 比较断言,因为它会消耗大量资源(内存和 CPU)。仅将其用于功能测试或测试计划调试和验证期间。
比较断言可用于比较其范围内的样本结果。可以比较内容或经过的时间,并且可以在比较之前过滤内容。断言比较可以在比较断言可视化器中看到。
比较断言控制面板的屏幕截图
Compare Assertion 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
比较内容
是否比较内容(响应数据)
是的
比较时间
如果该值≥0,则检查响应时间差是否不大于该值。即,如果值为0,则响应时间必须完全相等。
是的
比较过滤器
过滤器可用于从内容比较中删除字符串。例如,如果页面有时间戳,它可能会匹配:“时间:\d\d:\d\d:\d\d ”并替换为虚拟固定时间“时间:HH:MM: SS ”。
^

SMIME 断言

SMIME 断言可用于评估来自 Mail Reader Sampler 的样本结果。此断言验证 mime 消息的正文是否已签名。签名也可以根据特定的签名者证书进行验证。由于这是大多数用户不一定需要的功能,因此需要下载其他 jar 并将其添加到JMETER_HOME/lib
  • bcmail-xxx.jar (BouncyCastle SMIME/CMS)
  • bcprov-xxx.jar(BouncyCastle 提供者)
这些需要从 BouncyCastle 下载。

如果使用Mail Reader Sampler,请确保选择“使用 MIME (raw) 存储邮件”,否则断言将无法正确处理邮件。

SMIME 断言控制面板的屏幕截图
SMIME 断言控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
验证签名
如果选中,断言将根据签名者证书框中定义的参数验证它是否是有效签名。
是的
消息未签名
是否期望消息中的签名
是的
签名者证书
No Check ”表示不进行签名验证。“检查值”用于根据提供的输入验证签名。而“证书文件”将针对特定的证书文件进行验证。
是的
留言位置
邮件采样器可以在单个样本中检索多条消息。使用此字段指定要检查的消息。消息从0开始编号,因此0表示第一条消息。负数从 LAST 消息开始计算;-1表示最后一个,-2表示倒数第二个等等。
是的
^

JSON 断言

该组件允许您执行 JSON 文档的验证。首先,如果数据不是 JSON,它将解析 JSON 并失败。其次,它将使用Jayway JsonPath 1.2.0中的语法搜索指定的路径。如果找不到路径,它将失败。第三,如果在文档中找到 JSON 路径,并且请求对预期值进行验证,它将执行验证。对于值,GUI 中有一个特殊的复选框。请注意,如果路径将返回数组对象,则会对其进行迭代,如果找到预期值,则断言将成功。要验证空数组,请使用[]细绳。另外,如果 patch 将返回字典对象,它会在比较之前转换为字符串。

JSON 断言控制面板的屏幕截图
JSON Assertion 控制面板截图

参数

属性
描述
必需的
断言 JSON 路径存在
断言的 JSON 元素的路径。
是的
另外断言值
如果要使用某个值进行断言,请选中复选框
匹配为正则表达式
如果要使用正则表达式,请选中复选框
期望值
断言的值或匹配的正则表达式
期望为空
如果您希望为空,请选择复选框
反转断言(如果满足上述条件将失败)
反转断言(如果满足上述条件将失败)
^

JSON JMESPath 断言

该组件允许您使用JMESPath 对 JSON 文档内容执行断言。首先,如果数据不是 JSON,它将解析 JSON 并失败。
其次,它将使用 JMESPath 语法搜索指定的路径。
如果找不到路径,它将失败。
第三,如果在文档中找到 JMES 路径,并且请求对预期值进行验证,它将执行此附加检查。如果要检查是否为 null,请使用Expect null复选框。
请注意,路径不能为空,因为表达式 JMESPath 不会被编译并且会发生错误。即使您期望一个空或空响应,您也必须放置一个有效的 JMESPath 表达式。

JSON JMESPath 断言控制面板的屏幕截图
JSON JMESPath 断言的控制面板截图

参数

属性
描述
必需的
断言 JMESPath 存在
检查 JMESPath 到 JSON 元素是否存在
是的
另外断言值
如果您根据预期检查提取的 JMESPath,请选中复选框
匹配为正则表达式
如果要使用正则表达式进行匹配,请选中复选框
期望值
如果选中匹配作为正则表达式,则用于精确匹配或正则表达式的值
期望为空
如果您希望值为空,请选中复选框
反转断言(如果满足上述条件将失败)
反转断言(如果满足上述条件将失败)
^
^

18.6 定时器

从 3.1 版开始,实现了一个新功能(从 JMeter 3.1 开始处于 Beta 模式,可能会发生变化),它提供了以下功能。您可以通过设置属性timer.factor=float number
对 Random 计时器计算的睡眠延迟应用乘法因子,其中浮点数是十进制正数。 JMeter 会将此因子乘以计算出的睡眠延迟。此功能可用于:
请注意,计时器在找到它们的范围内的每个采样器之前处理;如果同一范围内有多个定时器,则所有定时器都将在每个采样器之前处理。
定时器仅与采样器一起处理。与采样器不在同一范围内的计时器根本不会被处理。
要将计时器应用于单个采样器,请将计时器添加为采样器的子元素。计时器将在采样器执行之前应用。要在采样器之后应用计时器,请将其添加到下一个采样器,或将其添加为流控制动作采样器的子级。

常量定时器

如果您想让每个线程在请求​​之间暂停相同的时间,请使用此计时器。

定时器控制面板截图
定时器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称。
线程延迟
暂停的毫秒数。
是的
^

高斯随机定时器

此计时器将每个线程请求暂停一段时间,其中大部分时间间隔发生在特定值附近。总延迟是高斯分布值(平均值为0.0和标准差为1.0)乘以您指定的偏差值和偏移值的总和。另一种解释方式是,在高斯随机定时器中,围绕恒定偏移的变化具有高斯曲线分布。

高斯随机定时器控制面板截图
高斯随机定时器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称
偏差
以毫秒为单位的偏差。
是的
恒定延迟偏移
除了随机延迟之外要暂停的毫秒数。
是的
^

统一随机定时器

此计时器将每个线程请求暂停一段时间,每个时间间隔具有相同的发生概率。总延迟是随机值和偏移值之和。

Uniform Random Timer 控制面板截图
Uniform Random Timer 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称。
随机延迟最大值
暂停的最大随机毫秒数。
是的
恒定延迟偏移
除了随机延迟之外要暂停的毫秒数。
是的
^

恒定吞吐量定时器

此计时器引入了可变暂停,计算以使总吞吐量(以每分钟的样本数计)尽可能接近给定数字。当然,如果服务器无法处理它,或者如果其他计时器或耗时的测试元素阻止它,吞吐量将会降低。

NB 虽然 Timer 被称为 Constant Throughput 定时器,但吞吐量值不需要是恒定的。它可以根据变量或函数调用来定义,并且可以在测试期间更改值。该值可以通过多种方式更改:

  • 使用计数器变量
  • 使用__jexl3__groovy函数来提供变化的值
  • 使用远程 BeanShell 服务器更改 JMeter 属性

有关详细信息,请参阅最佳实践

请注意,在测试期间不应过于频繁地更改吞吐量值 - 新值需要一段时间才能生效。

恒定吞吐量计时器控制面板的屏幕截图
恒定吞吐量计时器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称。
目标吞吐量
我们希望计时器尝试生成的吞吐量。
是的
计算吞吐量基于
  • 仅此线程- 每个线程将尝试保持目标吞吐量。总吞吐量将与活动线程的数量成正比。
  • 当前线程组中的所有活动线程 - 目标吞吐量在组中的所有活动线程中分配。每个线程将根据需要延迟,基于它上次运行的时间。
  • 所有活动线程- 目标吞吐量在所有线程组中的所有活动线程中分配。每个线程将根据需要延迟,基于它上次运行的时间。在这种情况下,每个其他线程组都需要一个具有相同设置的恒定吞吐量计时器。
  • 当前线程组中的所有活动线程(共享) - 如上所述,但每个线程都会根据组中任何线程上次运行的时间而延迟。
  • 所有活动线程(共享) - 如上所述;每个线程都会根据任何线程上次运行的时间而延迟。
是的

共享和非共享算法都旨在产生所需的吞吐量,并将产生相似的结果。
共享算法应生成更准确的整体交易率。
非共享算法应该在线程之间产生更均匀的事务分布。

^

精确的吞吐量定时器

该计时器引入了可变暂停,计算以使总吞吐量(例如,每分钟的样本数)尽可能接近给定数字。当然,如果服务器无法处理它,或者其他计时器,或者没有足够的线程,或者耗时的测试元素阻止它,吞吐量将会降低。

尽管计时器被称为精确吞吐量计时器,但它的目标并不是在测试期间在一秒的时间间隔内产生完全相同数量的样本。

计时器最适用于 36000 次请求/小时以下的速率,但是您的里程可能会有所不同(如果您的目标大不相同,请参阅下面的监控部分)。

精确吞吐量计时器在测试计划中的最佳位置

您可能知道,计时器由所有兄弟元素及其子元素继承。这就是为什么精确吞吐量计时器的最佳位置之一 是在测试循环的第一个元素下。例如,您可以在开头添加一个虚拟采样器,然后将计时器放在该虚拟采样器下方

制作时间表

精确的吞吐量计时器模型泊松到达时间表。该计划经常发生在现实生活中,因此将其用于负载测试是有意义的。例如,它自然可能会生成靠近在一起的样本,因此它可能会揭示并发问题。即使您设法使用Poisson Random Timer生成泊松到达,它也容易受到下面列出的问题的影响。例如,真正的泊松到达可能有无限长的停顿,这对于负载测试是不切实际的。例如,每秒 1 个速率的“常规”泊松到达可能会在 60 秒长的测试中得到 50 个样本。

恒定吞吐量计时器收敛到指定的速率,但它倾向于以均匀的间隔产生样本。

加速和启动峰值

您可能会使用“加速”或类似方法来避免测试开始时出现尖峰。例如,如果您将Thread Group配置为具有 100 个线程,并将Ramp-up Period设置为0(或较小的数字),那么所有线程将同时启动,并且会产生不必要的负载峰值. 最重要的是,如果您将Ramp-up Period设置得太高,可能会导致一开始可用的线程“太少”,无法达到所需的负载。

Precise Throughput Timer以随机方式调度执行,因此可用于生成恒定负载,建议将 Ramp-up PeriodDelay都设置为0

多个线程组同时启动

当Test Plan包含多个Thread Group时,可能会出现Ramp-up问题的变体。为了缓解这个问题,通常会为每个线程组添加“随机”延迟,以便线程在不同时间启动。

Precise Throughput Timer避免了这个问题,因为它以随机方式安排执行。您不需要添加额外的随机延迟来减轻启动峰值

每小时迭代次数

基本要求之一是每 M 分钟发出 N 个样本。让它每小时迭代 60 次。如果您报告 57 次执行的负载测试结果“仅仅因为随机是随机的”,企业客户将无法理解。为了每小时生成 60 次迭代,您需要进行如下配置(其他参数可以保留其默认值)

  • 目标吞吐量(样本):60
  • 吞吐周期(秒):3600
  • 测试持续时间(秒):3600

前两个选项设置吞吐量。尽管 60/3600、30/1800 和 120/7200 代表完全相同的负载水平,但请选择更能代表业务需求的那个。例如,如果要求测试“每小时 60 个样本”,则设置为 60/3600。如果要求测试“每分钟 1 个样本”,则设置为 1/60。

测试持续时间(秒)在那里,因此计时器可确保给定测试持续时间的准确样本数。Precise Throughput Timer在测试启动时为样本创建一个时间表。例如,如果您希望以每小时 60 次吞吐量执行 5 分钟测试,您可以将测试持续时间(秒)设置为 300。这可以以一种业务友好的方式配置吞吐量。注意:测试持续时间(秒)限制测试持续时间。这只是对计时器的提示。

线程数和思考时间

常见的陷阱之一是调整线程数量和思考时间,以便最终获得所需的吞吐量。即使它可能有效,但这种方法会导致在测试运行上花费大量时间。当新的应用程序版本到来时,可能需要再次调整线程和延迟。

精确的吞吐量计时器可以设置吞吐量目标并实现它,无论应用程序执行得多么好。为了做到这一点,Precise Throughput Timer 在测试启动时创建一个计划,然后它使用该计划来释放线程。思考时间和线程数量的主要驱动力应该是业务需求,而不是以某种方式匹配吞吐量的愿望。

例如,如果您的应用程序被呼叫中心的支持工程师使用。假设呼叫中心有 2 名工程师,目标吞吐量为每分钟 1 人。假设工程师阅读和审查网页需要 4 分钟。对于这种情况,您应该在组中设置 2 个线程,使用 4 分钟作为思考时间延迟,并在Precise Throughput Timer中指定每分钟 1 个。当然,它会导致大约 2samples/4minutes=0.5 每分钟,并且这样的测试结果意味着“您需要更多的呼叫中心支持工程师”或“您需要减少工程师完成任务所需的时间”。

测试低速率和可重复测试

以低速率(例如每小时 60 次)进行测试需要了解所需的测试配置文件。例如,如果您需要以均匀的间隔(例如 60 秒之间)注入负载,那么您最好使用Constant Throughput Timer。但是,如果您需要随机调度(例如,为执行报告的真实用户建模),那么Precise Throughput Timer是您的朋友。

在比较多个负载测试的结果时,能够重复完全相同的测试配置文件很有用。例如,如果在测试开始 5 分钟后调用操作 X(例如“利润报告”),那么最好复制该模式以用于后续测试执行。复制相同的负载模式可以简化对测试结果的分析(例如 CPU% 图表)。

随机种子(从 0 变为随机)可以控制精确吞吐量计时器使用的种子值。默认情况下,它初始化为0,这意味着每次测试执行都使用随机种子。如果您需要具有可重复的负载模式,请更改 随机种子以便一些随机值。一般建议是使用非零种子,“默认为 0”是实现限制。

注意:当使用具有相同吞吐率和相同非零种子的多个线程组时,可能会导致不必要的同时触发样本。

测试高速率和/或长测试持续时间

精确吞吐量计时器生成计划并将其保存在内存中。在大多数情况下,这应该不是问题,但是请记住,您可能希望将时间表保持在 1'000'000 个样本以内。为 1'000'000 个样本生成一个计划大约需要 200 毫秒,并且该计划在堆中消耗 8 兆字节。构建 1000 万个条目的计划需要 1-2 秒,并且在堆中消耗 80 兆字节。

例如,如果您想以每小时 5'000 个的速率执行为期 2 周的测试,那么您可能希望每小时恰好有 5'000 个样本。您可以将计时器的计时器的测试持续时间(秒)属性设置为1小时。然后计时器会为一个小时创建一个包含 5'000 个样本的计划,当计划用完时,计时器将生成下一小时的计划。

同时,您可以将测试持续时间(秒)设置为 2 周,计时器将生成一个包含 168'000 个样本 = 2 周 * 5'000 个样本/小时 = 2*7*24*500的时间表。生成时间表大约需要 30 毫秒,并且会消耗超过 1 兆字节。

突发负载

在某些情况下,所有样本都应该成对、三组等出现。某些情况可以通过Synchronizing Timer解决,但是 Precise Throughput Timer具有以包形式发出请求的本机方式。默认情况下禁用此行为,并通过“批量出发”设置进行控制

  • 批处理中的线程数(线程)。指定批次中的样本数。请注意,样本总数仍将符合目标吞吐量
  • 批处理中线程之间的延迟(毫秒)。例如,如果设置为 42,批量大小为 3,那么线程将在 x、x+42ms、x+84ms 离开

可变负载率

尽管可以通过表达式定义属性值(例如吞吐量),但建议通过测试保持该值或多或少相同,因为重新计算新计划以适应新值需要时间。

监控

生成下一个计划时,精确吞吐量计时器会向jmeter.log记录一条消息: 2018-01-04 17:34:03,635 信息 oajtConstantPoissonProcessGenerator:生成 21 个计时(... 20 需要,速率 1.0,持续时间 20,精确 lim 20000, i21) 在 0 毫秒内。First 15 events will be fired at: 1.1869653574244292 (+1.1869653574244292), 1.4691340403043207 (+0.2821686828798915), 3.638151706179226 (+2.169017665874905), 3.836357090410566 (+0.19820538423134026), 4.709330071408575 (+0.8729729809980085), 5.61330076999953 (+0.903970698590955), ... 这表明调度生成花费了 0 毫秒,并以秒为单位显示绝对时间戳。在上述情况下,速率设置为每秒 1,实际时间戳变为 1.2 秒、1.5 秒、3.6 秒、3.8 秒、4.7 秒等。

精确吞吐量计时器控制面板的屏幕截图
精确吞吐量计时器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称
目标吞吐量(以每个“吞吐量周期”的样本为单位)
您希望从所有受影响的采样器中获得的每个“吞吐量周期”的最大样本数,包括组中的所有线程。
是的
吞吐量周期(秒)
吞吐量周期。例如,如果“吞吐量”设置为 42,“吞吐量周期”设置为 21 秒,那么每秒将获得 2 个样本。
是的
测试持续时间(秒)
这用于确保您在“测试持续时间”时间范围内获得吞吐量*持续时间样本。
是的
批处理中的线程数(线程)
如果该值超过 1,则多个线程同时离开计时器。平均吞吐量仍然符合“吞吐量”值。
是的
批处理中线程之间的延迟(毫秒)
例如,如果设置为 42,批量大小为 3,那么线程将在 x、x+42ms、x+84ms 处离开。
是的
随机种子(从 0 变为随机)
注意:不同的定时器最好有不同的种子值。恒定种子确保计时器在每次测试开始时产生相同的延迟。“0”的值意味着计时器是真正随机的(从一次执行到另一次执行不可重复)..
是的
^

同步定时器

SyncTimer 的目的是阻塞线程,直到 X 个线程被阻塞,然后它们立即被释放。因此,SyncTimer 可以在测试计划的各个点创建大量即时负载。

同步定时器控制面板截图
同步定时器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称。
同时分组的用户数
一次释放的线程数。将其设置为0相当于将其设置为线程组中的线程数。
是的
以毫秒为单位的超时
如果设置为0,Timer 将等待线程数达到“同时分组的用户数”中的值。如果优于0,则计时器将在最大“超时(以毫秒为单位)”处等待线程数。如果在超时间隔后未达到等待的用户数,定时器将停止等待。默认为0
如果以毫秒为单位的超时设置为0并且线程数从未达到“同时分组的用户数”,则测试将无限暂停。只有强制停止才能阻止它。在这种情况下,可以考虑以毫秒为单位设置超时。
仅在一个 JVM 内同步计时器块,因此如果使用分布式测试,请确保您永远不会将“同时分组的用户数”设置为高于其包含线程组的用户数的值,仅考虑 1 个注入器。
^

豆壳定时器

BeanShell Timer 可用于产生延迟。

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 Timer +Groovy 以提高性能、支持新的 Java 功能以及对 BeanShell 库的有限维护。

测试元素支持ThreadListenerTestListener方法。这些应该在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell 定时器控制面板截图
BeanShell Timer 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。名称存储在脚本变量Label中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • bsh.args - 包含参数的字符串数组,在空白处分割
脚本文件
包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName 中,返回值用作等待的毫秒数。
脚本
BeanShell 脚本。返回值用作等待的毫秒数。
是(除非提供脚本文件)

在调用脚本之前,在 BeanShell 解释器中设置了一些变量:

  • log - ( Logger ) - 可用于写入日志文件
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
    
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - 提供对前一个SampleResult的访问权限(如果有)

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

如果定义了属性beanshell.timer.init,这将用于加载初始化文件,该文件可用于定义用于 BeanShell 脚本的方法等。

^

JSR223 定时器

JSR223 Timer 可用于使用 JSR223 脚本语言生成延迟,

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
脚本语言
要使用的脚本语言。
是的
参数
传递给脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • args - 包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的脚本的文件,如果使用相对文件路径,则将相对于“ user.dir ”系统属性引用的目录返回值转换为长整数并用作等待的毫秒数.
脚本编译缓存
如果使用的语言支持Compilable接口,JMeter 将使用跨测试计划的唯一字符串来缓存脚本编译的结果(Groovy 是其中之一,java、beanshell 和 javascript 不是)
如果您使用 Groovy 而不选中此选项,请参阅 JSR223 Sampler Java System 属性中的注释
脚本
剧本。返回值用作等待的毫秒数。
是(除非提供脚本文件)

在调用脚本之前,在脚本解释器中设置了一些变量:

  • log - ( Logger ) - 可用于写入日志文件
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • sampler - ( Sampler ) - 当前的 Sampler
  • 标签- 定时器的名称
  • FileName - 文件名(如果有)
  • OUT - System.out

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

^

泊松随机定时器

此计时器将每个线程请求暂停一段时间,其中大部分时间间隔发生在特定值附近。总延迟是泊松分布值和偏移值之和。

注意:如果要模拟泊松到达,请考虑使用精确吞吐量计时器

泊松随机定时器控制面板截图
泊松随机定时器控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称
拉姆达
以毫秒为单位的 Lambda 值。
是的
恒定延迟偏移
除了随机延迟之外要暂停的毫秒数。
是的
^
^

18.7 预处理器


预处理器用于修改其范围内的采样器。

此修饰符解析来自服务器的 HTML 响应并提取链接和表单。将检查通过此修饰符的 URL 测试样本,看它是否“匹配”从前一个响应中提取的任何链接或表单。然后它将用匹配链接或表单中的适当值替换 URL 测试样本中的值。Perl 类型的正则表达式用于查找匹配项。

HTML 链接解析器控制面板的屏幕截图
HTML 链接解析器控制面板的屏幕截图
使用协议主机路径参数名称执行匹配。目标采样器不能包含不在响应链接中的参数。
如果使用分布式测试,请确保切换模式(请参阅jmeter.properties),以免它不是剥离模式,请参阅 错误 56376
爬虫示例

考虑一个简单的示例:假设您希望 JMeter 通过您的站点“蜘蛛”,从您的服务器返回的 HTML 解析链接后点击链接(这实际上不是最有用的事情,但它是一个很好的例子) . 您将创建一个Simple Controller,并向其中添加“HTML Link Parser”。然后,创建一个 HTTP 请求,并将域设置为“ .* ”,路径也一样。这将使您的测试样本与返回页面上的任何链接相匹配。如果您想将爬取限制到特定域,则将域值更改为您想要的值。然后,将只跟踪指向该域的链接。

投票示例

一个更有用的示例:给定一个 Web 投票应用程序,您可能有一个页面,其中包含多个投票选项作为单选按钮供用户选择。假设轮询选项的值是非常动态的——可能是用户生成的。如果您希望 JMeter 测试投票,您可以创建选择硬编码值的测试样本,或者您可以让 HTML Link Parser 解析表单,并将随机投票选项插入到您的 URL 测试样本中。为此,请按照上面的示例进行操作,除了在配置 Web 测试控制器的 URL 选项时,请务必选择“ POST ”作为方法。为domainpath和任何其他表单参数输入硬编码值。然后,对于实际的单选按钮参数,输入名称(假设它'poll_choice "),然后是 " .* " 作为该参数的值。当修饰符检查这个 URL 测试样本时,它会发现它“匹配”投票表单(并且它不应该匹配任何其他表单,因为您已经指定了 URL 测试示例的所有其他方面),它会将您的表单参数替换为表单中的匹配参数。由于正则表达式“ .* ”将匹配任何内容,修饰符可能会有一个列表可供选择的单选按钮。它将随机选择,并替换您的 URL 测试示例中的值。每次通过测试,都会选择一个新的随机值。

图 18 - 在线投票示例
图 18 - 在线投票示例
要记住的一件重要事情是,您必须立即创建一个测试样本,该样本将返回一个 HTML 页面,其中包含与您的动态测试样本相关的链接和表单。
^

HTTP URL 重写修饰符

此修饰符的工作方式与 HTML Link Parser 类似,不同之处在于它有一个特定用途,它比 HTML Link Parser 更易于使用且更高效。对于使用 URL 重写来存储会话 id 而不是 cookie 的 Web 应用程序,可以在 ThreadGroup 级别附加此元素,就像HTTP Cookie 管理器一样。只需给它会话 id 参数的名称,它就会在页面上找到它并将参数添加到该 ThreadGroup 的每个请求中。

或者,可以将此修饰符附加到选择请求,它只会修改它们。聪明的用户甚至会确定这个修饰符可以用来抓取 HTML Link Parser无法解析的值。

HTTP URL 重写修饰符控制面板的屏幕截图
HTTP URL 重写修饰符的控制面板截图

参数

属性
描述
必需的
姓名
在测试树中为该元素指定的描述性名称。
会话参数名称
要从先前响应中获取的参数的名称。此修饰符将在页面上的任何位置找到参数,并获取分配给它的值,无论它是在 HREF 中还是在表单中。
是的
路径扩展
一些 Web 应用程序通过附加分号和会话 id 参数来重写 URL。如果是这样,请选中此框。
不要在路径扩展中使用等于
某些 Web 应用程序会在参数名称和值之间不使用“ = ”符号来重写 URL(例如 Intershop Enfinity)。
不要在路径扩展中使用问号
防止查询字符串以路径扩展名结尾(例如 Intershop Enfinity)。
缓存会话 ID?
当会话 ID 不存在时,是否应该保存会话 ID 的值以供以后使用?
是的
网址编码
写入参数时的 URL 编码值
如果使用分布式测试,请确保您切换模式(请参阅jmeter.properties)以使其不是剥离模式,请参阅 错误 56376
^

用户参数

允许用户为特定于单个线程的用户变量指定值。

用户变量也可以在测试计划中指定,但不特定于单个线程。此面板允许您为任何用户变量指定一系列值。对于每个线程,将按顺序为变量分配系列中的一个值。如果线程数多于值,则重新使用这些值。例如,这可用于分配一个不同的用户 ID,供每个线程使用。用户变量可以在任何 JMeter 组件的任何字段中引用。

通过单击面板底部的添加变量按钮并在“名称: ”列中填写变量名称来指定变量。要向系列添加新值,请单击“添加用户”按钮并在新添加的列中填写所需的值。

可以使用函数语法在同一线程组中的任何测试组件中访问值:${variable}

另见CSV Data Set Config元素,它更适合大量参数

用户参数控制面板截图
用户参数控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
每次迭代更新一次
一个标志,用于指示用户参数元素是否应在每次迭代时仅更新其变量一次。如果您将函数嵌入到 UP 中,那么您可能需要更好地控制变量值的更新频率。保持选中此框以确保每次通过 UP 的父控制器更新值。取消选中该框,UP 将更新其范围内发出的每个示例请求的参数。
是的
^

BeanShell 预处理器

BeanShell PreProcessor 允许在采样之前应用任意代码。

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 PreProcessor +Groovy 以提高性能、支持新的 Java 功能以及对 BeanShell 库的有限维护。

测试元素支持ThreadListenerTestListener方法。这些应该在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell PreProcessor 控制面板的屏幕截图
BeanShell PreProcessor 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。名称存储在脚本变量Label中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • bsh.args - 包含参数的字符串数组,在空白处分割
脚本文件
包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName中
脚本
BeanShell 脚本。返回值被忽略。
是(除非提供脚本文件)

在调用脚本之前,在 BeanShell 解释器中设置了一些变量:

  • log - ( Logger ) - 可用于写入日志文件
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - 提供对前一个 SampleResult 的访问权限(如果有)
  • sampler - ( Sampler )- 提供对当前采样器的访问权限

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

如果定义了beanshell.preprocessor.init属性,则用于加载初始化文件,该文件可用于定义方法等,以在 BeanShell 脚本中使用。

^

JSR223 预处理器

JSR223 PreProcessor 允许在采样之前应用 JSR223 脚本代码。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
语言
要使用的 JSR223 语言
是的
参数
传递给脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • args - 包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的脚本的文件,如果使用相对文件路径,则它将相对于“ user.dir ”系统属性引用的目录
脚本编译缓存
如果使用的语言支持Compilable接口,JMeter 将使用跨测试计划的唯一字符串来缓存脚本编译的结果(Groovy 是其中之一,java、beanshell 和 javascript 不是)
如果您使用 Groovy 而不选中此选项,请参阅 JSR223 Sampler Java System 属性中的注释
脚本
要运行的脚本。
是(除非提供脚本文件)

设置了以下 JSR223 变量以供脚本使用:

  • log - ( Logger ) - 可用于写入日志文件
  • 标签- 字符串标签
  • FileName - 脚本文件名(如果有)
  • 参数- 参数(作为字符串)
  • args - 作为字符串数组的参数(按空格分割)
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
    vars.getObject("OBJ2");
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • sampler - ( Sampler )- 提供对当前采样器的访问权限
  • OUT - System.out - 例如OUT.println("message")

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

^

JDBC 预处理器

JDBC PreProcessor 使您能够在示例运行之前运行一些 SQL 语句。如果您的 JDBC 示例需要一些数据位于数据库中并且您无法在设置线程组中计算这些数据,这将很有用。有关详细信息,请参阅JDBC 请求

请参阅以下测试计划:

在链接的测试计划中,“ Create Price Cut-Off ” JDBC PreProcessor 调用一个存储过程在数据库中创建一个Price Cut-Off,这个将被“ Calculate Price cut off ”使用。

创建价格截止预处理器
创建价格截止预处理器
^

正则表达式用户参数

允许使用正则表达式为从另一个 HTTP 请求中提取的 HTTP 参数指定动态值。RegEx 用户参数特定于各个线程。

此组件允许您指定提取 HTTP 请求参数的名称和值的正则表达式的引用名称。必须为参数名称和参数值指定正则表达式组编号。仅对使用此 RegEx 用户参数且名称匹配的采样器中的参数进行替换

RegEx 用户参数控制面板的屏幕截图
RegEx 用户参数控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
正则表达式参考名称
对正则表达式的引用的名称
是的
参数名称 regexp 组号
用于提取参数名称的正则表达式的组数
是的
参数值正则表达式组号
用于提取参数值的正则表达式的组数
是的
正则表达式示例

假设我们有一个请求,它返回一个带有 3 个输入参数的表单,我们想要提取其中 2 个参数的值以将它们注入到下一个请求中

  1. 为第一个 HTTP 请求创建后处理器正则表达式
    • refName - 设置正则表达式 Expression ( listParams )的名称
    • 正则表达式- 将提取输入名称和输入值属性的表达式
      例如:input name="([^"]+?)" value="([^"]+?)"
    • 模板- 将为空
    • match nr - -1(为了遍历所有可能的匹配)
  2. 为第二个 HTTP 请求创建预处理器 RegEx 用户参数
    • refName - 设置正则表达式的相同引用名称,在我们的示例中为listParams
    • 参数名称组号- 参数名称正则表达式的组号,在我们的示例中为1
    • 参数值组号- 参数值正则表达式的组号,在我们的示例中为2

另请参见正则表达式提取器元素,该元素用于提取参数名称和值

^

采样超时

如果样本完成时间过长,此预处理器会安排一个定时器任务来中断样本。如果超时为零或负数,则忽略超时。为此,采样器必须实现可中断。已知以下采样器会这样做:
AJP、BeanShell、FTP、HTTP、Soap、AccessLog、MailReader、JMS Subscriber、TCPSampler、TestAction、JavaSampler

测试元素适用于连接超时或响应超时等单个超时不足的情况,或者采样器不支持超时的情况。超时时间应设置得足够长,以便在正常测试中不会触发,但要足够短,以中断被卡住的样本。

[默认情况下,JMeter 使用 Callable 来中断采样器。这与定时器在同一个线程中执行,因此如果中断需要很长时间,它可能会延迟后续超时的处理。预计这不会成为问题,但如有必要,可以将属性InterruptTimer.useRunnable 设置为true以使用单独的 Runnable 线程而不是 Callable。]

采样超时控制面板的屏幕截图
采样超时控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此计时器的描述性名称。
采样超时
如果样本需要更长的时间才能完成,它将被中断。
是的
^
^

18.8 后处理器

顾名思义,后处理器是在采样器之后应用的。请注意,它们应用于同一范围内的所有采样器,因此为确保后处理器仅应用于特定采样器,请将其添加为采样器的子级。

注意:除非另有说明,后处理器不适用于子样本(子样本) - 仅适用于父样本。对于 JSR223 和 BeanShell 后处理器,脚本可以使用返回 SampleResults 数组的prev.getSubResults()方法检索子样本 。如果没有,该数组将为空。

后处理器在断言之前运行,因此它们无法访问任何断言结果,样本状态也不会反映任何断言的结果。如果您需要访问断言结果,请尝试改用侦听器。另请注意,在运行所有断言之后 ,变量JMeterThread.last_sample_ok设置为“ true ”或“ false ”。

正则表达式提取器

允许用户使用 Perl 类型的正则表达式从服务器响应中提取值。作为后处理器,该元素将在其范围内的每个 Sample 请求之后执行,应用正则表达式,提取请求的值,生成模板字符串,并将结果存储到给定的变量名中。

正则表达式提取器控制面板的屏幕截图
正则表达式提取器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 提取将应用于命名变量的内容
匹配依次应用于所有符合条件的样本。例如,如果有一个主样本和 3 个子样本,每个子样本都包含一个正则表达式匹配项(即总共 4 个匹配项)。对于 match number = 3,仅子样本,提取器将匹配第 3个子样本。对于匹配数 = 3,主样本和子样本,提取器将匹配第二个子样本(一个匹配是主样本)。对于匹配数 = 0或负数,将处理所有符合条件的样本。对于匹配号 > 0,一旦找到足够的匹配项,匹配就会停止。
是的
要检查的字段
可以检查以下字段:
  • 正文- 响应的正文,例如网页的内容(不包括标题)
  • 正文(未转义) - 响应的正文,替换了所有 Html 转义码。请注意,处理 Html 转义时不考虑上下文,因此可能会进行一些不正确的替换。
    请注意,此选项会极大地影响性能,因此仅在绝对必要时使用它并注意其影响
  • Body as a Document - 通过 Apache Tika 从各种类型的文档中提取文本(请参阅查看结果树文档视图部分)。
    请注意,作为文档的正文选项会影响性能,因此请确保它适合您的测试
  • 请求标头- 非 HTTP 示例可能不存在
  • 响应标头- 非 HTTP 样本可能不存在
  • 网址
  • 响应代码- 例如200
  • 响应消息- 例如OK
标头对 HTTP 示例很有用;对于其他样本类型,它可能不存在。
是的
创建变量的名称
存储结果的 JMeter 变量的名称。另请注意,每个组都存储为[refname]_g#,其中[refname]是您作为参考名称输入的字符串,#是组号,其中组0是整个匹配项,组1是来自第一组括号等
是的
正则表达式
用于解析响应数据的正则表达式。这必须包含至少一组括号“ () ”来捕获字符串的一部分,除非使用组$0$。不要将表达式括在/ / - 中,除非您当然也想匹配这些字符。
是的
模板
用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:' $1$ ' 引用组1,' $2$ ' 引用组2,等等。$0$引用整个表达式匹配的任何内容。
是的
比赛编号(0 表示随机)
指示要使用的匹配项。正则表达式可能匹配多次。
  • 使用零值表示 JMeter 应该随机选择一个匹配项。
  • 正数 N 表示选择第 n匹配项。
  • 负数与ForEach 控制器一起使用- 见下文。
是的
默认值
如果正则表达式不匹配,那么引用变量将被设置为默认值。这对于调试测试特别有用。如果没有提供默认值,那么很难判断正则表达式是否不匹配,或者 RE 元素没有被处理,或者可能使用了错误的变量。

但是,如果您有多个设置相同变量的测试元素,您可能希望在表达式不匹配时保持变量不变。在这种情况下,调试完成后删除默认值。

不,但推荐
使用空的默认值
如果复选框被选中并且默认值为空,那么 JMeter 会将变量设置为空字符串,而不是不设置它。因此,例如,当您在测试计划中使用${var}(如果参考名称为 var)时,如果未找到提取的值,则 ${var}将等于空字符串而不是包含${var},这可能如果提取的值是可选的,则很有用。

如果匹配数设置为非负数,并且发生匹配,则变量设置如下:

  • refName - 模板的值
  • refName_g n,其中n = 0 , 1 , 2 - 匹配的组
  • refName_g - 正则表达式中的组数(不包括0

如果不匹配,则refName变量设置为默认值(除非不存在)。此外,还删除了以下变量:

  • refName_g0
  • refName_g1
  • refName_g

如果匹配数设置为负数,则处理采样器数据中的所有可能匹配。变量设置如下:

  • refName_matchNr - 找到的匹配数;可能是0
  • refName_ n,其中n = 123等 - 由模板生成的字符串
  • refName_ n _g m,其中m = 0 , 1 , 2 - 匹配n的组
  • refName - 始终设置为默认值
  • refName_g n - 未设置

请注意,在这种情况下, refName变量始终设置为默认值,并且未设置关联的组变量。

有关如何指定修饰符的一些示例,以及有关 JMeter 正则表达式的更多信息,另请参阅响应断言。

^

CSS 选择器提取器 (原为:CSS/JQuery 提取器)

允许用户使用 CSS 选择器语法从服务器 HTML 响应中提取值。作为后处理器,此元素将在其范围内的每个 Sample 请求之后执行,应用 CSS/JQuery 表达式,提取请求的节点,将节点提取为文本或属性值并将结果存储到给定的变量名中。

CSS 选择器提取器控制面板的屏幕截图
CSS Selector Extractor 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 提取将应用于命名变量的内容
匹配依次应用于所有符合条件的样本。例如,如果有一个主样本和 3 个子样本,每个子样本都包含一个正则表达式匹配项(即总共 4 个匹配项)。对于 match number = 3,仅子样本,提取器将匹配第 3个子样本。对于匹配数 = 3,主样本和子样本,提取器将匹配第二个子样本(一个匹配是主样本)。对于匹配数 = 0或负数,将处理所有符合条件的样本。对于匹配号 > 0,一旦找到足够的匹配项,匹配就会停止。
是的
CSS 选择器实现
2 支持基于 CSS/JQuery 的语法的实现: 如果选择器设置为空,将使用默认实现(JSoup)。
错误的
创建变量的名称
存储结果的 JMeter 变量的名称。
是的
CSS/JQuery 表达式
CSS/JQuery 选择器用于从响应数据中选择节点。支持选择器、选择器组合和伪选择器,示例:
  • E[foo] - 具有“ foo ”属性的E元素
  • 祖先子元素 - 来自祖先的子元素,例如.body p在具有类“ body ”的块下的任何位置找到p元素
  • :lt(n) - 查找兄弟索引(即它在 DOM 树中相对于其父级的位置)小于n的元素;例如td:lt(3)
  • :contains(text) - 查找包含给定文本的元素。搜索不区分大小写;例如p:contains(jsoup)
有关语法的更多详细信息,请参阅:
是的
属性
要从匹配选择器的节点中提取的属性名称(根据 HTML 语法)。如果为空,则返回此元素及其所有子元素的组合文本。
如果设置了属性,则这是 JSoup 的等效Element#attr(name)函数。
具有属性值集的 CSS 提取器
具有属性值集的 CSS 提取器

如果为空,则等效于 JSoup 的Element#text()函数,如果未为属性设置值。
没有设置属性的 CSS 提取器
没有设置属性的 CSS 提取器
错误的
比赛编号(0 表示随机)
指示要使用的匹配项。CSS/JQuery 选择器可能匹配多次。
  • 使用零值表示 JMeter 应该随机选择一个匹配项。
  • 正数N表示选择第 n匹配项。
  • 负数与ForEach 控制器一起使用- 见下文。
是的
默认值
如果表达式不匹配,则引用变量将设置为默认值。这对于调试测试特别有用。如果没有提供默认值,那么很难判断表达式是否不匹配,或者 CSS/JQuery 元素没有被处理,或者是否使用了错误的变量。

但是,如果您有多个设置相同变量的测试元素,您可能希望在表达式不匹配时保持变量不变。在这种情况下,调试完成后删除默认值。

不,但推荐
使用空的默认值
如果复选框被选中并且默认值为空,那么 JMeter 会将变量设置为空字符串,而不是不设置它。因此,例如,当您在测试计划中使用${var}(如果参考名称为 var)时,如果未找到提取的值,则 ${var}将等于空字符串而不是包含${var},这可能如果提取的值是可选的,则很有用。

如果匹配数设置为非负数,并且发生匹配,则变量设置如下:

  • refName - 模板的值

如果不匹配,则refName变量设置为默认值(除非不存在)。

如果匹配数设置为负数,则处理采样器数据中的所有可能匹配。变量设置如下:

  • refName_matchNr - 找到的匹配数;可能是0
  • refName_n,其中n = 123等 - 由模板生成的字符串
  • refName - 始终设置为默认值

请注意,在这种情况下, refName变量始终设置为默认值。

^

XPath2 提取器

此测试元素允许用户使用 XPath2 查询语言从结构化响应(XML 或 (X)HTML)中提取值。
XPath2 Extractor 控制面板的屏幕截图
XPath2 Extractor 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 提取将应用于命名变量的内容
XPath 匹配依次应用于所有符合条件的样本,并返回所有匹配结果。
是的
返回整个 XPath 片段而不是文本内容?
如果选中,将返回片段而不是文本内容。
例如//title将返回“ <title>Apache JMeter</title> ”而不是“ Apache JMeter ”。
在这种情况下,//title/text()将返回“ Apache JMeter ”。
是的
创建变量的名称
存储结果的 JMeter 变量的名称。
是的
XPath 查询
XPath 2.0 语言中的元素查询。可以返回多个匹配项。
是的
比赛编号(0 表示随机)
如果 XPath Path 查询导致许多结果,您可以选择将哪些结果提取为变量:
  • 0:表示随机(默认值)
  • -1表示提取所有结果,它们将被命名为<variable name> _N(其中N从 1 到 Number of results)
  • X:表示提取第 X结果。如果此 X th大于匹配数,则不返回任何内容。将使用默认值
默认值
未找到匹配项时返回默认值。如果节点没有值并且没有选择片段选项,它也会返回。
是的
命名空间别名列表
要用于解析文档的命名空间别名列表,每个声明一行。您必须按如下方式指定它们:prefix=namespace。与旧的 XPathExtractor 版本相比,此实现更容易使用名称空间。

为了允许在ForEach Controller中使用,它的工作原理与上面的 XPath Extractor 完全相同

XPath2 Extractor 提供了一些有趣的工具,例如改进的语法和比第一个版本更多的功能。

以下是一些示例:

绝对(/书/页[2])
从书中提取页面的第二个绝对值
平均(/图书馆/书/页)
从图书馆的所有书籍中提取平均页数
比较(/book[1]/page[2],/book[2]/page[2])
如果第一本书的第 2页等于第 2 本书的第2则返回等于 0 的整数值,否则返回 -1。

要查看有关这些函数的更多信息,请查看xPath2 函数

^

XPath 提取器

此测试元素允许用户使用 XPath 查询语言从结构化响应(XML 或 (X)HTML)中提取值。
从 JMeter 5.0 开始,您应该使用XPath2 Extractor,因为它提供了更好、更轻松的命名空间管理、更好的性能以及对 XPath 2.0 的支持
XPath Extractor 控制面板的屏幕截图
XPath Extractor 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 提取将应用于命名变量的内容
XPath 匹配依次应用于所有符合条件的样本,并返回所有匹配结果。
是的
使用 Tidy(容错解析器)
如果选中,则使用 Tidy 将 HTML 响应解析为 XHTML。
  • 应检查 HTML 响应的“使用整洁”。使用 Tidy 将此类响应转换为有效的 XHTML(与 XML 兼容的 HTML)
  • 对于 XHTML 或 XML 响应(例如 RSS),应取消选中“ Use Tidy ”
对于 HTML,CSS Selector Extractor 是正确且高效的解决方案。不要将 XPath 用于 HTML 提取。
是的
安静的
设置整洁安静标志
如果选择整洁
报告错误
如果发生 Tidy 错误,则相应地设置 Assertion
如果选择整洁
显示警告
设置 Tidy showWarnings 选项
如果选择整洁
使用命名空间
如果选中,则 XML 解析器将使用名称空间解析。(请参阅下面关于 NAMESPACES 的注释)请注意,当前只有在根元素上声明的名称空间才会被识别。有关其他工作区名称的用户定义,请参见下文。
如果没有选择整洁
验证 XML
根据其架构检查文档。
如果没有选择整洁
忽略空格
忽略元素空白。
如果没有选择整洁
获取外部 DTD
如果选中,则获取外部 DTD。
如果没有选择整洁
返回整个 XPath 片段而不是文本内容?
如果选中,将返回片段而不是文本内容。
例如//title将返回“ <title>Apache JMeter</title> ”而不是“ Apache JMeter ”。
在这种情况下,//title/text()将返回“ Apache JMeter ”。
是的
创建变量的名称
存储结果的 JMeter 变量的名称。
是的
XPath 查询
XPath 语言中的元素查询。可以返回多个匹配项。
是的
比赛编号(0 表示随机)
如果 XPath Path 查询导致许多结果,您可以选择将哪些结果提取为变量:
  • 0:表示随机
  • -1表示提取所有结果(默认值),它们将被命名为<variable name> _N(其中N从 1 到 Number of results)
  • X:表示提取第 X结果。如果此 X th大于匹配数,则不返回任何内容。将使用默认值
默认值
未找到匹配项时返回默认值。如果节点没有值并且没有选择片段选项,它也会返回。

为了允许在ForEach Controller中使用,在返回时设置了以下变量:

  • refName - 设置为第一个(或唯一)匹配;如果不匹配,则设置为默认值
  • refName_matchNr - 设置为匹配数(可能是0
  • refName_n - n = 1 , 2 , 3等。设置为 1 st , 2 nd 3 rd等。
注意:下一个refName_n变量设置为null - 例如,如果有 2 个匹配项,则refName_3设置为null,如果没有匹配项,则refName_1设置为null

XPath 是主要针对 XSLT 转换的查询语言。但是,它也可用作结构化数据的通用查询语言。有关详细信息,请参阅 XPath 参考XPath 规范。这里有几个例子:

/html/head/标题
从 HTML 响应中提取标题元素
/书/页[2]
从书中提取第二页
/书/页
从书中提取所有页面
//form[@name='countryForm']//select[@name='country']/option[text()='Czech Republic'])/@value
在名称属性为“ country ”的选择元素内提取与文本“ Czech Republic ”匹配的选项元素的值属性,在名称属性为“ countryForm ”的表单内
当“使用整洁”被选中时——生成的 XML 文档可能与原始 HTML 响应略有不同:
  • 所有元素和属性名称都转换为小写
  • Tidy 尝试纠正不正确的嵌套元素。例如 - 原始(不正确)ul/font/li变为正确ul/li/font
有关详细信息,请参阅整洁的主页
NAMESPACES
作为 Xalan XPath 解析器(JMeter 所基于的实现)的命名空间限制的解决方法,您需要:
  • 提供一个包含命名空间前缀映射 的属性文件(例如,如果您的文件名为namespaces.properties ):
    prefix1=http\://foo.apache.org
    prefix2=http\://toto.apache.org
    …
    
  • 使用属性 在user.properties文件中引用此文件:
    xpath.namespace.config=namespaces.properties

//mynamespace:tagname
//*[local-name()='tagname' and namespace-uri()='uri-for-namespace']
uri-for-namespace mynamespace
^

JSON JMESPath 提取器

此测试元素允许用户使用 JMESPath 查询语言从结构化响应(XML 或 (X)HTML)中提取值。
JSON JMESPath 提取器控制面板的屏幕截图
JSON JMESPath Extractor 控制面板的屏幕截图
在 XPATH Extractor 中,我们支持同时提取多个 xpath,但在 JMES Extractor 中,一次只能输入一个 JMES 表达式。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 提取将应用于命名变量的内容
是的
创建变量的名称
存储结果的 JMeter 变量的名称。
是的
JMESPath 表达式
JMESPath 查询语言中的元素查询。可以返回匹配的结果。
是的
比赛编号(0 表示随机)
如果 JMESPath 查询导致许多结果,您可以选择提取哪些作为变量:
  • 0:表示随机
  • -1表示提取所有结果(默认值),它们将被命名为<variable name> _N(其中N从 1 到 Number of results)
  • X:表示提取第 X结果。如果此 X th大于匹配数,则不返回任何内容。将使用默认值
默认值
未找到匹配项时返回默认值。如果节点没有值并且没有选择片段选项,它也会返回。

JMESPath 是一种 JSON 查询语言。它以具有完整规范的 ABNF 语法进行描述。这可确保精确定义语言语法。有关详细信息,请参阅JMESPath 参考。这里还有一些例子JMESPath Example

^

结果状态动作处理器

如果相关采样器失败,此测试元素允许用户停止线程或整个测试。
结果状态操作处理程序控制面板的屏幕截图
结果状态操作处理程序控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
采样器错误后要采取的措施
确定如果发生采样器错误(因为样本本身失败或断言失败)会发生什么。可能的选择是:
  • 继续- 忽略错误并继续测试
  • 启动下一个线程循环- 在当前迭代错误的采样器之后不执行采样器,并在下一次迭代中重新启动循环
  • 停止线程- 当前线程退出
  • 停止测试- 整个测试在任何当前样本结束时停止。
  • 立即停止测试- 整个测试突然停止。如果可能,任何当前的采样器都会被中断。
^

BeanShell 后处理器

BeanShell PreProcessor 允许在采样后应用任意代码。

BeanShell 后处理器不再忽略具有零长度结果数据的样本

有关使用 BeanShell 的完整详细信息,请参阅BeanShell 网站。

强烈建议迁移到JSR223 PostProcessor +Groovy 以提高性能、支持新的 Java 特性以及对 BeanShell 库的有限维护。

测试元素支持ThreadListenerTestListener方法。这些应该在初始化文件中定义。有关示例定义,请参见文件BeanShellListeners.bshrc

BeanShell PostProcessor 控制面板的屏幕截图
BeanShell PostProcessor 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。名称存储在脚本变量Label中
在每次调用之前重置 bsh.Interpreter
如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的。有关详细信息,请参阅最佳实践 - BeanShell 脚本
是的
参数
传递给 BeanShell 脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • bsh.args - 包含参数的字符串数组,在空白处分割
脚本文件
包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName中
脚本
BeanShell 脚本。返回值被忽略。
是(除非提供脚本文件)

设置了以下 BeanShell 变量以供脚本使用:

  • log - ( Logger ) - 可用于写入日志文件
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - 可以访问上一个 SampleResult
  • data - (byte [])- 提供对当前样本数据的访问

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

如果定义了属性beanshell.postprocessor.init,这将用于加载初始化文件,该文件可用于定义方法等,以在 BeanShell 脚本中使用。

^

JSR223 后处理器

JSR223 PostProcessor 允许在采样后应用 JSR223 脚本代码。

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
语言
要使用的 JSR223 语言
是的
参数
传递给脚本的参数。参数存储在以下变量中:
  • 参数- 包含作为单个变量的参数的字符串
  • args - 包含参数的字符串数组,在空白处拆分
脚本文件
包含要运行的脚本的文件,如果使用相对文件路径,则它将相对于“ user.dir ”系统属性引用的目录
脚本编译缓存
如果使用的语言支持Compilable接口,JMeter 将使用跨测试计划的唯一字符串来缓存脚本编译的结果(Groovy 是其中之一,java、beanshell 和 javascript 不是)
如果您使用 Groovy 而不选中此选项,请参阅 JSR223 Sampler Java System 属性中的注释
脚本
要运行的脚本。
是(除非提供脚本文件)

在调用脚本之前,会设置一些变量。请注意,这些是 JSR223 变量 - 即它们可以直接在脚本中使用。

  • log - ( Logger ) - 可用于写入日志文件
  • 标签- 字符串标签
  • FileName - 脚本文件名(如果有)
  • 参数- 参数(作为字符串)
  • args - 作为字符串数组的参数(按空格分割)
  • ctx - ( JMeterContext ) - 提供对上下文的访问
  • vars - ( JMeterVariables ) - 提供对变量的读/写访问权限:
    vars.get(key);
    vars.put(key,val);
    vars.putObject("OBJ1",new Object());
    vars.getObject("OBJ2");
  • props - (JMeterProperties - class java.util.Properties) - 例如props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - 提供对前一个 SampleResult 的访问权限(如果有)
  • sampler - ( Sampler )- 提供对当前采样器的访问权限
  • OUT - System.out - 例如OUT.println("message")

有关上述每个变量可用的所有方法的详细信息,请查看 Javadoc

^

JDBC 后处理器

JDBC PostProcessor 使您能够在示例运行后立即运行一些 SQL 语句。如果您的 JDBC 示例更改了一些数据并且您希望将状态重置为 JDBC 示例运行之前的状态,这将很有用。

在链接的测试计划中,“ JDBC PostProcessor ” JDBC PostProcessor 调用存储过程从数据库中删除由 PreProcessor 创建的 Price Cut-Off。

JDBC 后处理器
JDBC 后处理器
^

JSON 提取器

JSON PostProcessor 使您能够使用 JSON-PATH 语法从 JSON 响应中提取数据。这个后处理器与正则表达式提取器非常相似。它必须作为 HTTP 采样器或任何其他具有响应的采样器的子级放置。它将允许您以非常简单的方式提取文本内容,请参阅JSON 路径语法

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
创建变量的名称
将包含 JSON-PATH 表达式结果的变量的分号分隔名称(必须匹配 JSON-PATH 表达式的数量)
是的
JSON 路径表达式
分号分隔的 JSON-PATH 表达式(必须匹配变量数)
是的
默认值
如果 JSON-PATH 表达式不返回任何结果,则以分号分隔的默认值(必须匹配变量数)
比赛编号(0 表示随机)
如果 JSON 路径查询导致许多结果,您可以选择提取哪些作为变量:
  • 0:表示随机(默认值)
  • -1表示提取所有结果,它们将被命名为<variable name> _N(其中N从 1 到 Number of results)
  • X:表示提取第 X结果。如果此 X th大于匹配数,则不返回任何内容。将使用默认值
计算连接变量
如果找到许多结果,插件将使用 ' , ' 分隔符连接它们并将其存储在名为<variable name> _ALL的 var 中
JSON 后处理器
JSON 后处理器
^

边界提取器

允许用户使用左右边界从服务器响应中提取值。作为后处理器,该元素将在其范围内的每个 Sample 请求之后执行,测试边界,提取请求的值,生成模板字符串,并将结果存储到给定的变量名称中。

边界提取器控制面板的屏幕截图
边界提取器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
适用于:
这适用于可以生成子样本的采样器,例如具有嵌入式资源的 HTTP 采样器、邮件阅读器或事务控制器生成的示例。
  • 仅主要样本- 仅适用于主要样本
  • 仅子样本- 仅适用于子样本
  • 主样本和子样本- 适用于两者。
  • 要使用的 JMeter 变量名称- 断言将应用于命名变量的内容
匹配依次应用于所有符合条件的样本。例如,如果有一个主样本和 3 个子样本,每个子样本都包含一个匹配测试(即总共 4 个匹配)。对于 match number = 3,仅子样本,提取器将匹配第 3个子样本。对于匹配数 = 3,主样本和子样本,提取器将匹配第二个子样本(一个匹配是主样本)。对于匹配数 = 0或负数,将处理所有符合条件的样本。对于匹配号 > 0,一旦找到足够的匹配项,匹配就会停止。
是的
要检查的字段
可以检查以下字段:
  • 正文- 响应的正文,例如网页的内容(不包括标题)
  • 正文(未转义) - 响应的正文,替换了所有 Html 转义码。请注意,处理 Html 转义时不考虑上下文,因此可能会进行一些不正确的替换。
    请注意,此选项会极大地影响性能,因此仅在绝对必要时使用它并注意其影响
  • Body as a Document - 通过 Apache Tika 从各种类型的文档中提取文本(请参阅查看结果树文档视图部分)。
    请注意,作为文档的正文选项会影响性能,因此请确保它适合您的测试
  • 请求标头- 非 HTTP 示例可能不存在
  • 响应标头- 非 HTTP 样本可能不存在
  • 网址
  • 响应代码- 例如200
  • 响应消息- 例如OK
标头对 HTTP 示例很有用;对于其他样本类型,它可能不存在。
是的
创建变量的名称
存储结果的 JMeter 变量的名称。另请注意,每个组都存储为[refname]_g#,其中[refname]是您作为参考名称输入的字符串,#是组号,其中组0是整个匹配项,组1是来自第一组括号等
是的
左边界
要查找的值的左边界
右边界
要找到的值的右边界
比赛编号(0 表示随机)
指示要使用的匹配项。边界可能匹配多次。
  • 使用零值表示 JMeter 应该随机选择一个匹配项。
  • 正数 N 表示选择第 n匹配项。
  • 负数与ForEach 控制器一起使用- 见下文。
是的
默认值
如果边界不匹配,则参考变量将设置为默认值。这对于调试测试特别有用。如果没有提供默认值,则很难判断边界是否不匹配,或者是否使用了错误的变量。

但是,如果您有多个设置相同变量的测试元素,您可能希望在表达式不匹配时保持变量不变。在这种情况下,调试完成后删除默认值。

不,但推荐

如果匹配数设置为非负数,并且发生匹配,则变量设置如下:

  • refName - 提取的值

如果不匹配,则refName变量设置为默认值(除非不存在)。

如果匹配数设置为负数,则处理采样器数据中的所有可能匹配。变量设置如下:

  • refName_matchNr - 找到的匹配数;可能是0
  • refName_ n,其中n = 123等 - 由模板生成的字符串
  • refName_ n _g m,其中m = 0 , 1 , 2 - 匹配n的组
  • refName - 始终设置为默认值

请注意,在这种情况下, refName变量始终设置为默认值,并且未设置关联的组变量。

如果左右边界都为null,则返回范围内选择的整个数据
^

18.9 其他特性


测试计划

测试计划是指定测试的整体设置的地方。

可以为在整个测试中重复的值定义静态变量,例如服务器名称。例如,变量SERVER可以定义为www.example.com,测试计划的其余部分可以将其称为${SERVER}。这简化了以后更改名称的过程。

如果在多个 用户定义变量配置元素之一上重复使用相同的变量名称,则该值设置为测试计划中的最后一个定义(从上到下读取)。此类变量应用于在测试运行之间可能发生变化但在测试运行期间保持不变的项目。

请注意,测试计划不能引用它定义的变量。
如果您需要从测试计划变量构造其他变量,请使用用户定义变量测试元素。

选择功能测试指示 JMeter 将附加样本信息 - 响应数据和采样器数据 - 保存到所有结果文件。这增加了运行测试所需的资源,并可能对 JMeter 性能产生不利影响。如果仅特定采样器需要更多数据,则向其添加侦听器,并根据需要配置字段。

该选项不影响当前无法存储此类信息的 CSV 结果文件。

此外,这里还有一个选项来指示 JMeter串行而​​不是并行运行线程组。

在主线程关闭后运行 tearDown 线程组:如果选中,则在主线程正常关闭后运行 tearDown 组(如果有)。如果强制停止测试,则不会运行 tearDown 线程。

测试计划现在提供了一种将类路径设置添加到特定测试计划的简单方法。该功能是附加的,这意味着您可以添加 jar 文件或目录,但删除条目需要重新启动 JMeter。

请注意,这不能用于添加 JMeter GUI 插件,因为它们是较早处理的。
但是,它对于 JDBC 驱动程序等实用程序 jar 很有用。jar 只添加到 JMeter 加载器的搜索路径中,而不是系统类加载器的搜索路径中。

JMeter 属性还提供了一个用于加载其他类路径的条目。在jmeter.properties中,编辑“ user.classpath ”或“ plugin_dependency_paths ”以包含其他库。有关详细信息,请参阅JMeter 的类路径配置 JMeter

测试计划控制面板的屏幕截图
测试计划控制面板的屏幕截图
^

线程组

线程组定义了将针对您的服务器执行特定测试用例的用户池。在线程组 GUI 中,您可以控制模拟的用户数(线程数)、加速时间(启动所有线程所需的时间)、执行测试的次数,以及可选的启动并停止测试时间。

另请参见tearDown Thread GroupsetUp Thread Group

使用调度程序时,JMeter 运行线程组,直到达到循环数或达到持续时间/结束时间 - 以先发生者为准。请注意,仅在样本之间检查条件;当达到结束条件时,该线程将停止。JMeter 不会中断正在等待响应的采样器,因此可以任意延迟结束时间。

线程组控制面板截图
线程组控制面板截图

从 JMeter 3.0 开始,您可以通过选择线程组并右键单击来运行它们的选择。将出现一个弹出菜单:

弹出菜单开始选择线程组
弹出菜单开始选择线程组

请注意,您有三个选项来运行线程组的选择:
开始
仅启动选定的线程组
开始没有停顿
仅启动选定的线程组,但不运行计时器
证实
仅使用验证模式启动选定的线程组。默认情况下,这会在验证模式下运行线程组(见下文)
验证模式:
此模式通过在一个线程、一次迭代、无计时器和无启动延迟设置为0的情况下运行线程组来实现对线程组的快速验证。通过在user.properties中设置,可以使用某些属性修改行为:
testplan_validation.nb_threads_per_thread_group
用于验证线程组的线程数,默认为1
testplan_validation.ignore_timers
验证plan的线程组时忽略定时器,默认1
testplan_validation.number_iterations
用于验证线程组的迭代次数
testplan_validation.tpc_force_100_pct
是否强制吞吐量控制器以百分比模式运行,就好像百分比为 100 %。默认为

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
采样器错误后要采取的措施
确定如果发生采样器错误(因为样本本身失败或断言失败)会发生什么。可能的选择是:
  • 继续- 忽略错误并继续测试
  • 开始下一个线程循环- 忽略错误,开始下一个循环并继续测试
  • 停止线程- 当前线程退出
  • 停止测试- 整个测试在任何当前样本结束时停止。
  • 立即停止测试- 整个测试突然停止。如果可能,任何当前的采样器都会被中断。
线程数
要模拟的用户数。
是的
加速期
JMeter 需要多长时间才能启动所有线程。如果有 10 个线程和 100 秒的加速时间,则每个线程将在前一个线程启动后 10 秒开始,总共 100 秒的时间使测试完全加快速度。
第一个线程将始终直接启动,因此如果您配置了一个线程,则加速时间实际上为零。同理,上例中的第十个线程实际上会在 90 秒后启动,而不是 100 秒。
是的
循环计数
执行测试用例的次数。或者,可以选择“无限”,导致测试运行,直到手动停止或达到线程生命周期结束。
是的,除非选择了无限
延迟线程创建直到需要
如果选中,则仅在经过适当比例的加速时间后才创建线程。这最适用于启动时间明显长于执行单个线程的时间的测试。即较早的线程在以后的线程开始之前完成。
如果未选中,则在测试开始时创建所有线程(然后它们会暂停适当比例的加速时间)。这是最初的默认值,适用于在大部分测试中线程都处于活动状态的测试。
是的
指定线程生命周期
如果选中,则将线程操作时间限制在给定的范围内
是的
持续时间(秒)
如果选择了调度程序复选框,则可以选择相对结束时间。JMeter 将使用它来计算结束时间。
启动延迟(秒)
如果选择了调度程序复选框,则可以选择相对启动延迟。JMeter 将使用它来计算开始时间。
^

工作台

^

SSL 管理器

SSL 管理器是一种选择客户端证书的方法,以便您可以测试使用公钥基础设施 (PKI) 的应用程序。仅当您尚未设置适当的系统属性时才需要它。

如果要测试客户端证书身份验证,请参阅Keystore 配置
选择客户端证书

您可以使用 Java 密钥库 (JKS) 格式的密钥库或公钥证书标准 #12 (PKCS12) 文件作为客户端证书。JSSE 库的一个特性要求您的密钥上至少有六个字符的密码(至少对于 JDK 附带的 keytool 实用程序而言)。

要选择客户端证书,请从菜单栏中选择选项 →  SSL 管理器。您将看到默认情况下查找 PKCS12 文件的文件查找器。您的 PKCS12 文件必须具有扩展名“ .p12 ”,以便 SSL 管理器将其识别为 PKCS12 文件。任何其他文件都将被视为普通的 JKS 密钥存储。如果正确安装了 JSSE,系统将提示您输入密码。文本框不会隐藏您此时键入的字符——因此请确保没有人在看您的肩膀。当前实现假定密钥库的密码也是您要进行身份验证的客户端的私钥的密码。

或者您可以设置适当的系统属性 - 请参阅system.properties文件。

下次运行测试时,SSL 管理器将检查您的密钥库,看它是否至少有一个可用的密钥。如果只有一个密钥,SSL Manager 将为您选择它。如果有多个键,则当前选择第一个键。目前无法选择密钥库中的其他条目,因此所需的密钥必须是第一个。

需要注意的事项

如果您的证书颁发机构 (CA) 证书未由 JDK 随附的五个 CA 证书之一签名,则您必须正确安装证书颁发机构 (CA) 证书。安装它的一种方法是将您的 CA 证书导入 JKS 文件,并将 JKS 文件命名为“ jssecacerts ”。将文件放在 JRE 的 lib/security文件夹中。该文件将在同一目录中的“ cacerts ”文件之前读取。请记住,只要“ jssecacerts ”文件存在,安装在“ cacerts ”中的证书就不会被使用。这可能会给您带来问题。如果您不介意将 CA 证书导入“ cacerts ”" 文件,然后您可以针对所有已安装的 CA 证书进行身份验证。

^

HTTP(S) 测试脚本记录器 (原为:HTTP 代理服务器)

HTTP(S) 测试脚本记录器允许 JMeter 在您使用普通浏览器浏览 Web 应用程序时拦截并记录您的操作。JMeter 将创建测试样本对象并将它们直接存储到您的测试计划中(因此您可以在制作样本时交互式地查看样本)。
确保您阅读此wiki 页面以正确设置 JMeter。

要使用记录器,请添加HTTP(S) 测试脚本记录器元素。右键单击 Test Plan 元素以获取 Add 菜单:(Add  →  Non-Test Elements  →  HTTP(S) Test Script Recorder )。

记录器实现为 HTTP(S) 代理服务器。您需要为所有 HTTP 和 HTTPS 请求设置您的浏览器使用代理。

不要将 JMeter 用作任何其他请求类型(FTP 等)的代理,因为 JMeter 无法处理它们。

记录会话时最好使用隐私浏览模式。这应该确保浏览器启动时没有存储 cookie,并防止保存某些更改。例如,Firefox 不允许永久保存证书覆盖。

HTTPS 记录和证书

HTTPS 连接使用证书来验证浏览器和 Web 服务器之间的连接。通过 HTTPS 连接时,服务器将证书提供给浏览器。为了验证证书,浏览器会检查服务器证书是否由证书颁发机构 (CA) 签名,该证书颁发机构 (CA) 链接到其内置的根 CA 之一。

浏览器还会检查证书是否适用于正确的主机或域,以及它是否有效且未过期。
如果任何浏览器检查失败,它将提示用户,然后用户可以决定是否允许连接继续进行。

JMeter 需要使用自己的证书才能拦截来自浏览器的 HTTPS 连接。实际上,JMeter 必须伪装成目标服务器。

JMeter 将生成自己的证书。这些是使用属性proxy.cert.validity定义的有效期、默认 7 天和随机密码生成的。如果 JMeter 检测到它在 Java 8 或更高版本下运行,它将根据需要(动态模式)为每个目标服务器生成证书,除非定义了以下属性:proxy.cert.dynamic_keys=false. 使用动态模式时,证书将用于正确的主机名,并由 JMeter 生成的 CA 证书签名。默认情况下,浏览器不会信任此 CA 证书,但可以将其安装为受信任的证书。完成后,生成的服务器证书将被浏览器接受。这样做的好处是,即使是嵌入的 HTTPS 资源也可以被拦截,并且无需为每个新服务器覆盖浏览器检查。

浏览器不会提示嵌入资源。因此,对于早期版本,嵌入式资源只会为浏览器已经“已知”的服务器下载

除非提供了密钥库(并且您定义了属性proxy.cert.alias),否则 JMeter 需要使用 keytool 应用程序来创建密钥库条目。JMeter 包含通过查看各种标准位置来检查 keytool 是否可用的代码。如果 JMeter 找不到 keytool 应用程序,会报错。如有必要,可以使用系统属性keytool.directory告诉 JMeter 在哪里可以找到 keytool。这应该在文件system.properties中定义。

按下Start按钮 时会生成 JMeter 证书(如有必要) 。

证书生成可能需要一段时间,在此期间 GUI 将无响应。
发生这种情况时,光标变为沙漏。证书生成完成后,GUI 将显示一个弹出对话框,其中包含根 CA 证书的详细信息。浏览器需要安装此证书才能接受JMeter生成的主机证书;详情见下文

如有必要,您可以通过从 JMeter 目录中 删除密钥库文件proxyserver.jks 来强制 JMeter 重新生成密钥库(以及导出的证书 - ApacheJMeterTemporaryRootCA[.usr|.crt] )。

此证书不是浏览器通常信任的证书之一,并且不会用于正确的主机。
作为结果:

  • 浏览器应显示一个对话框,询问您是否要接受证书。例如:
    1) The server's name "www.example.com" does not match the certificate's name
       "_ JMeter Root CA for recording (INSTALL ONLY IF IT S YOURS)". Somebody may be trying to eavesdrop on you.
    2) The certificate for "_ JMeter Root CA for recording (INSTALL ONLY IF IT S YOURS)" is signed by the unknown Certificate Authority
       "_ JMeter Root CA for recording (INSTALL ONLY IF IT S YOURS)". It is not possible to verify that this is a valid certificate.
    
    您将需要接受证书以允许 JMeter 代理拦截 SSL 流量以记录它。但是,不要永久接受此证书;它应该只被暂时接受。浏览器只会提示主 URL 证书的对话,而不是页面中加载的资源,例如托管在安全外部 CDN 上的图像、CSS 或 JavaScript 文件。如果您有这样的资源(例如 gmail 有),您必须首先手动浏览到这些其他域才能接受 JMeter 的证书。签入jmeter.log以获取您需要为其注册证书的安全域。
  • 如果浏览器已经为此域注册了一个经过验证的证书,浏览器会将 JMeter 检测为安全漏洞并拒绝加载该页面。如果是这样,您必须从浏览器的密钥库中删除受信任的证书。

从 2.10 开始的 JMeter 版本仍然支持此方法,如果您定义以下属性,将继续这样做: proxy.cert.alias 以下属性可用于更改使用的证书:

  • proxy.cert.directory - 查找证书的目录(默认 = JMeter bin/
  • proxy.cert.file - 密钥库文件的名称(默认“ proxyserver.jks ”)
  • proxy.cert.keystorepass - 密钥库密码(默认“密码”)[如果使用 JMeter 证书则忽略]
  • proxy.cert.keypassword - 证书密钥密码(默认“密码”)[如果使用 JMeter 证书则忽略]
  • proxy.cert.type - 证书类型(默认“ JKS ”)[如果使用 JMeter 证书则忽略]
  • proxy.cert.factory - 工厂(默认“ SunX509 ”)[如果使用 JMeter 证书则忽略]
  • proxy.cert.alias - 要使用的密钥的别名。如果已定义,JMeter 不会尝试生成自己的证书。
  • proxy.ssl.protocol - 要使用的协议(默认“ SSLv3 ”)
如果您的浏览器当前使用代理(例如,公司内部网可能通过代理路由所有外部请求),那么您需要在启动 JMeter 之前使用命令行选项-H-P告诉 JMeter 使用该代理。运行生成的测试计划时也需要此设置。

为 HTTPS 录制安装 JMeter CA 证书

如上所述,当在 Java 8 下运行时,JMeter 可以为每个服务器生成证书。为了顺利进行,JMeter 使用的根 CA 签名证书需要被浏览器信任。第一次启动记录器时,它会在必要时生成证书。根 CA 证书将导出到当前启动目录中名为ApacheJMeterTemporaryRootCA的文件中。设置证书后,JMeter 将显示一个包含当前证书详细信息的对话框。此时,可以按照以下说明将证书导入浏览器。

请注意,一旦根 CA 证书被安装为受信任的 CA,浏览器将信任任何由它签名的证书。在证书过期或从浏览器中删除证书之前,它不会警告用户该证书被依赖。因此,任何可以获取密钥库和密码的人都可以使用该证书生成证书,任何信任 JMeter 根 CA 证书的浏览器都将接受该证书。因此,密钥库和私钥的密码是随机生成的,并且使用的有效期很短。密码存储在本地首选项区域中。请确保只有受信任的用户才能访问具有密钥库的主机。

启动 Recorder 后显示的弹出窗口是一个信息性弹出窗口:
记录器安装证书弹出窗口
记录器安装证书弹出窗口
只需单击确定并继续。
在 Firefox 中安装证书

选择以下选项:

  • 工具/选项
  • 高级/证书
  • 查看证书
  • 当局
  • 进口 …
  • 浏览到 JMeter 启动目录,然后单击文件ApacheJMeterTemporaryRootCA.crt,按Open
  • 单击查看并检查证书详细信息是否与 JMeter 测试脚本记录器显示的一致
  • 如果确定,请选择“信任此 CA 以识别网站”,然后按确定
  • 必要时按OK关闭对话框
在 Chrome 或 Internet Explorer 中安装证书

Chrome 和 Internet Explorer 都对证书使用相同的信任库。

  • 浏览到 JMeter 启动目录,然后单击文件ApacheJMeterTemporaryRootCA.crt并打开它
  • 单击“详细信息”选项卡并检查证书详细信息是否与 JMeter 测试脚本记录器显示的一致
  • 如果确定,请返回“常规”选项卡,然后单击“安装证书... ”并按照向导提示进行操作
在 Opera 中安装证书
  • 工具/首选项/高级/安全
  • 管理证书……
  • 选择“ Intermediate ”选项卡,单击“ Import ...
  • 浏览到 JMeter 启动目录,然后单击文件ApacheJMeterTemporaryRootCA.usr,然后打开它
HTTP(S) 测试脚本记录器控制面板的屏幕截图
HTTP(S) 测试脚本记录器控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
港口
HTTP(S) 测试脚本记录器侦听的端口。 8888是默认值,但您可以更改它。
是的
HTTPS 域
HTTPS 的域名(或主机)名称列表。使用它为您希望记录的所有服务器预先生成证书。
例如,*.example.com,*.subdomain.example.com
请注意,通配符域仅适用于一级,即abc.subdomain.example.com匹配*.subdomain.example.com但不匹配*.example.com
目标控制器
代理将存储生成的样本的控制器。默认情况下,它将寻找一个记录控制器并将它们存储在那里。
是的
分组
是否对来自单个“点击”的请求(接收到的请求没有明显的时间间隔)进行分组,以及如何在记录中表示该分组:
  • 不要对采样器进行分组 - 按顺序存储所有记录的采样器,无需任何分组。
  • 在组之间添加分隔符- 添加一个名为“ -------------- ”的控制器以在组之间创建视觉分隔。否则,采样器都按顺序存储。
  • 将每个组放入一个新控制器中- 为每个组创建一个新的简单控制器,并将该组的所有采样器存储在其中。
  • 仅存储每组的第一个采样器- 仅记录每组中的第一个请求。“ Follow Redirects ”和“ Retrieve All Embedded Resources ... ”标志将在这些采样器中打开。
  • 将每个组放在一个新的事务控制器中- 创建一个新的事务控制器,并将该组的所有采样器存储在其中。
属性proxy.pause确定 JMeter 需要在请求之间将它们视为单独的“点击”的最小间隔。默认值为5000(毫秒),即 5 秒。如果您使用分组,请确保在点击之间留出所需的间隔。
是的
捕获 HTTP 标头
是否应该将标题添加到计划中?如果指定,将向每个 HTTP 采样器添加一个标头管理器。代理服务器总是从生成的标头管理器中删除 Cookie 和授权标头。默认情况下,它还会删除If-Modified-SinceIf-None-Match标头。这些用于确定浏览器缓存项是否是最新的;录制时通常想要下载所有内容。要更改删除哪些附加标头,请将 JMeter 属性proxy.headers.remove定义 为以逗号分隔的标头列表。
是的
添加断言
为每个采样器添加一个空白断言?
是的
正则表达式匹配
替换变量时使用正则表达式匹配?如果选中替换将使用单词边界,即它只会替换变量的单词匹配值,而不是单词的一部分。单词边界遵循 Perl5 定义,相当于\b。以下段落中有关“用户定义的变量替换”的更多信息。
是的
前缀/事务名称
在录制过程中为采样器名称添加前缀(前缀模式)。或用用户选择的名称(交易名称)替换采样器名称
命名方案
在录制期间选择采样器名称的命名方案。默认为事务名称
命名格式
如果选择使用格式字符串作为命名方案,可以给出自由式格式。交易名称、路径和计数器的占位符可以由#{name}#{path}#{counter} 给出。一个简单的格式可以是“ #{name}-#{counter} ”,它等同于编号的默认命名方案。对于更复杂的格式,可以使用 MessageFormat 的 Java 格式,如“ #{counter,number,000}: #{name}-#{path} ”,它将打印最多填充三个零的计数器。默认为空字符串。
计数器起始值
可用于将计数器重置为给定值。请注意,下一个样本将首先增加然后使用该值。如果第一个采样器应该从1开始,请将计数器重置为0
请求后创建新事务(毫秒)
两个请求之间的不活动时间需要在两个单独的组中考虑它们。
类型
要生成哪种类型的采样器(HTTPClient 默认或 Java)
是的
自动重定向
在生成的采样器中自动设置重定向?
是的
跟随重定向
在生成的采样器中设置跟随重定向?
注意:有关重要信息,请参阅下面的“录制和重定向”部分。
是的
使用保活
在生成的采样器中设置 Use Keep-Alive?
是的
检索所有嵌入式资源
在生成的采样器中设置检索所有嵌入式资源?
是的
内容类型过滤器
根据内容类型过滤请求- 例如“ text/html [;charset=utf-8 ] ”。这些字段是正则表达式,检查它们是否包含在content-type中。[不必匹配整个字段]。首先检查包含过滤器,然后检查排除过滤器。被过滤掉的样本将不会被存储。
注意:此过滤适用于响应的内容类型
要包含的模式
与采样的完整 URL 匹配的正则表达式。允许过滤记录的请求。所有请求都通过,但仅记录满足包含/排除字段要求的请求。如果IncludeExclude都留空,则记录所有内容(这可能导致为每个页面记录数十个样本,例如记录图像、样式表等)。
如果Include字段中至少有一个条目,则仅记录匹配一个或多个Include模式的请求
.
要排除的模式
与采样的 URL 匹配的正则表达式。
任何匹配一个或多个排除模式的请求都不会被记录
.
通知过滤采样器的子侦听器
通知过滤采样器的子侦听器
匹配一个或多个排除模式的任何响应都不会传递给子侦听器(查看结果树)
.
开始按钮
启动代理服务器。一旦代理服务器启动并准备好接受请求,JMeter 将向控制台写入以下消息:“代理启动并运行! ”。
不适用
停止按钮
停止代理服务器。
不适用
重启按钮
停止并重新启动代理服务器。这在您更改/添加/删除包含/排除过滤器表达式时很有用。
不适用

录制和重定向

在录制期间,浏览器将遵循重定向响应并生成附加请求。代理将记录原始请求和重定向请求(取决于配置的任何排除项)。生成的样本默认选择了“ Follow Redirects ”,因为这通常更好。

重定向可能取决于原始请求,因此重复最初记录的样本可能并不总是有效。

现在如果 JMeter 设置为在重放期间跟随重定向,它将发出原始请求,然后重放记录的重定向请求。为了避免这种重复重播,JMeter 尝试检测样本何时是先前重定向的结果。如果当前响应是重定向,JMeter 将保存重定向 URL。当接收到下一个请求时,会将其与保存的重定向 URL 进行比较,如果匹配,JMeter 将禁用生成的示例。它还向重定向链添加注释。这假设重定向链中的所有请求将相互跟随,而没有任何干预请求。要禁用重定向检测,请设置属性proxy.redirect.disabling=false

包括和排除

包含和排除模式被视为正则表达式(使用 Jakarta ORO)。它们将与每个浏览器请求的主机名、端口(实际或隐含)、路径和查询(如果有)进行匹配。如果您正在浏览的 URL 是
http://localhost/jmeter/index.html?username=xxxx ”,
那么将针对字符串测试正则表达式:
localhost:80/jmeter/index.html?username=xxxx ”。
因此,如果您想包含所有.html文件,您的正则表达式可能看起来像:
.*\.html(\?.*)? ” - 或“ .*\.html 如果您知道没有查询字符串或者您只想要没有查询字符串的 html 页面。

如果有任何包含模式,则 URL必须至少匹配其中一种模式,否则不会被记录。如果有任何排除模式,则 URL不能匹配任何模式,否则不会被记录。使用包含和排除的组合,您应该能够记录您感兴趣的内容并跳过您不感兴趣的内容。

注意正则表达式匹配的字符串必须与整个主机+路径字符串相同。
因此“ \.html ”将匹配localhost:80/index.html

捕获二进制 POST 数据

JMeter 能够捕获二进制 POST 数据。要配置哪些内容类型被视为二进制,请更新 JMeter 属性proxy.binary.types。默认设置如下:

# These content-types will be handled by saving the request in a file:
proxy.binary.types=application/x-amf,application/x-java-serialized-object
# The files will be saved in this directory:
proxy.binary.directory=user.dir
# The files will be created with this file filesuffix:
proxy.binary.filesuffix=.binary

添加计时器

也可以让代理将计时器添加到录制的脚本中。为此,请直接在 HTTP(S) 测试脚本记录器组件中创建一个计时器。代理会将此计时器的副本放入它记录的每个样本中,或者如果您使用分组,则将其放入每个组的第一个样本中。然后将扫描此副本以查找其属性中变量${T}的出现,并且任何此类出现都将替换为与先前记录的采样器的时间间隔(以毫秒为单位)。

当你准备好开始时,点击“开始”。

您将需要编辑浏览器的代理设置以指向适当的服务器和端口,其中服务器是运行 JMeter 的机器,端口 # 来自上面显示的代理控制面板。

样本在哪里记录?

JMeter 将记录的样本放置在您选择的目标控制器中。如果您选择默认选项“使用录制控制器”,它们将存储在测试对象树中找到的第一个录制控制器中(因此请务必在开始录制之前添加录制控制器)。

如果代理似乎没有记录任何样本,这可能是因为浏览器实际上并未使用代理。要检查是否是这种情况,请尝试停止代理。如果浏览器仍然下载页面,那么它没有通过代理发送请求。仔细检查浏览器选项。如果您尝试从运行在同一主机上的服务器进行录制,请检查浏览器是否设置为“绕过本地地址的代理服务器”(此示例来自 IE7,但其他浏览器会有类似的选项)。如果 JMeter 没有记录浏览器 URL,例如http://localhost/http://127.0.0.1/,请尝试使用非环回主机名或 IP 地址,例如http://myhost/http://192.168。 0.2/ .

处理 HTTP 请求默认值

如果 HTTP(S) 测试脚本记录器直接在存储样本的控制器中或直接在其任何父控制器中找到启用的HTTP 请求默认值,则记录的样本将包含您指定的默认值的空字段。您可以通过直接在 HTTP(S) 测试脚本记录器中放置 HTTP 请求默认值元素来进一步控制此行为,其非空白值将覆盖其他 HTTP 请求默认值中的值。有关详细信息,请参阅HTTP(S) 测试脚本记录器的最佳实践

用户定义变量替换

同样,如果 HTTP(S) 测试脚本记录器直接在存储样本的控制器内或直接在其任何父控制器内找到用户定义变量(UDV),则记录的样本将出现这些变量的任何值替换为相应的变量。同样,您可以将用户定义的变量直接放在 HTTP(S) 测试脚本记录器中以覆盖要替换的值。有关详细信息,请参阅 测试脚本记录器的最佳实践

请注意,匹配区分大小写。

变量替换:默认情况下,代理服务器会查找所有出现的 UDV 值。例如,如果您使用值www定义变量WEB ,那么无论在哪里找到字符串www都会被${WEB}替换。为避免这种情况在任何地方发生,请设置“正则表达式匹配”复选框。这告诉代理服务器将值视为正则表达式(使用 ORO 提供的 perl5 兼容正则表达式匹配器)。

如果选择“正则表达式匹配”,每个变量都将被编译为包含在 \b()\b中的 perl 兼容正则表达式。这样每个匹配都将在单词边界开始和结束。

请注意,边界字符不是匹配组的一部分,例如n.*以匹配name out of You can call me 'name'

如果您不希望您的正则表达式包含在这些边界匹配器中,则必须将您的正则表达式括在括号内,例如('.*?')以匹配'name'中的You can call me 'name'

变量将按随机顺序检查。因此,请确保潜在的匹配不会重叠。重叠的匹配器将是.*(匹配任何内容)和www(仅匹配www)。不重叠的匹配器将是a+(匹配 a 的序列b+(匹配b的序列)。

如果您只想匹配整个字符串,请将其括在(^$)中,例如(^thus$)。括号是必要的,因为通常添加的边界字符会阻止^$匹配。

如果您只想匹配字符串开头的/images ,请使用值(^/images)。Jakarta ORO 还支持零宽度前瞻,因此可以匹配/images/...但使用(^/images(?=/))在输出中 保留尾随/

请注意,Jakarta ORO 的当前版本不支持后视 - 即(?<=...)(?<!...)

注意重叠的匹配器。例如,值.*作为名为 regex的变量中的正则表达式将部分匹配先前替换的变量,这将导致类似 ${{regex}的结果,这很可能不是所需的结果。

如果将任何变量解释为模式时有任何问题,这些问题会在jmeter.log中报告,因此如果 UDV 未按预期工作,请务必检查这一点。

完成记录测试样本后,停止代理服务器(点击“停止”按钮)。请记住重置浏览器的代理设置。现在,您可能想要对测试脚本进行排序和重新排序,添加计时器、侦听器、cookie 管理器等。

我怎样才能记录服务器的响应呢?

只需将View Results Tree侦听器作为 HTTP(S) 测试脚本记录器的子级,就会显示响应。您还可以将保存响应添加到文件后处理器,它将保存响应到文件。

将请求与响应相关联

如果您定义属性proxy.number.requests=true J​​Meter 将为每个采样器和每个响应添加一个数字。请注意,如果使用了排除或包含,则可能会有比采样器更多的响应。已排除的响应将带有[] 中的标签,例如[23 /favicon.ico]

饼干管理器

如果您正在测试的服务器使用 cookie,请记住在完成记录后将HTTP Cookie 管理器添加到测试计划中。在录制期间,浏览器会处理任何 cookie,但 JMeter 需要 Cookie 管理器在测试运行期间进行 cookie 处理。JMeter 代理服务器在记录期间传递浏览器发送的所有 cookie,但不会将它们保存到测试计划中,因为它们可能会在运行之间发生变化。

授权经理

HTTP(S) 测试脚本记录器获取“身份验证”标头,尝试计算身份验证策略。如果手动将授权管理器添加到目标控制器,HTTP(S) 测试脚本记录器将找到它并添加授权(匹配的将被删除)。否则,授权管理器将被添加到具有授权对象的目标控制器中。您可能必须在记录后修复自动计算的值。

上传文件

某些浏览器(例如 Firefox 和 Opera)在上传文件时不包含文件的全名。这可能会导致 JMeter 代理服务器失败。一种解决方案是确保要上传的任何文件都在 JMeter 工作目录中,方法是复制那里的文件或在包含文件的目录中启动 JMeter。

记录 JMeter 本身不可用的基于 HTTP 的非文本协议

您可能必须记录 JMeter 默认不处理的 HTTP 协议(​​自定义二进制协议、Adobe Flex、Microsoft Silverlight 等)。尽管 JMeter 没有提供本地代理实现来记录这些协议,但您可以通过实现自定义SamplerCreator来记录这些协议。此 Sampler Creator 会将二进制格式转换为HTTPSamplerBase子类,该子类可以添加到 JMeter 测试用例中。有关更多详细信息,请参阅“扩展 JMeter”。

^

HTTP 镜像服务器

HTTP 镜像服务器是一个非常简单的 HTTP 服务器——它只是镜像发送给它的数据。这对于检查 HTTP 请求的内容很有用。

它使用默认端口8081

HTTP 镜像服务器控制面板截图
HTTP 镜像服务器控制面板截图

参数

属性
描述
必需的
港口
镜像服务器监听的端口,默认为8081
是的
最大线程数
如果设置为值 > 0,则服务请求的线程数将限制为配置的数量,如果设置为值 ≤ 0 ,将创建一个新线程来服务每个传入请求。默认为0
最大队列大小
线程池执行前用于保存任务的队列大小,当超过线程池时,传入的请求将保留在该队列中,当该队列满时丢弃。仅当 Max Number of Threads 大于0时才使用此参数。默认为25
请注意,您可以通过添加具有以下名称/值对的 HTTP 标头管理器来更好地控制响应:

参数

属性
描述
必需的
X-睡眠
发送响应前的休眠时间(毫秒)
X-SetCookie
响应时设置的 Cookie
X-响应状态
响应状态,请参阅HTTP 状态响应,例如 200 OK、500 Internal Server Error,...。
X-响应长度
响应的大小,如果小于总大小,这会将响应修剪为请求的大小
X-SetHeaders
管道分隔的标题列表,例如:
headerA: valueA|headerB: valueB会将 headerA 设置valueA headerB设置为valueB

您还可以使用以下查询参数:

参数

属性
描述
必需的
重定向
使用提供的位置生成 302(临时重定向),例如?redirect=/path
地位
覆盖默认状态返回,例如?status=404 Not Found
v
详细标志,将一些详细信息写入标准输出,例如第一行和重定向位置(如果指定)
^

属性显示

属性显示显示 System 或 JMeter 属性的值。可以通过在值列中输入新文本来更改值。

属性显示控制面板截图
属性显示控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
^

调试采样器

Debug Sampler 生成一个包含所有 JMeter 变量和/或属性值的样本。

这些值可以在View Results Tree Listener Response Data 窗格中看到。

Debug Sampler 控制面板的屏幕截图
Debug Sampler 控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
JMeter 属性
包括 JMeter 属性?
是的
JMeter 变量
包括 JMeter 变量?
是的
系统属性
包括系统属性?
是的
^

调试后处理器

Debug PostProcessor 使用先前的 Sampler 属性、JMeter 变量、属性和/或系统属性的详细信息创建一个 subSample。

这些值可以在View Results Tree Listener Response Data 窗格中看到。

Debug PostProcessor 控制面板的屏幕截图
Debug PostProcessor 控制面板的屏幕截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
JMeter 属性
是否显示 JMeter 属性(默认false)。
是的
JMeter 变量
是否显示 JMeter 变量(默认false)。
是的
采样器属性
是否显示采样器属性(默认为true)。
是的
系统属性
是否显示系统属性(默认false)。
是的
^

测试片段

测试片段与Include ControllerModule Controller一起使用。

测试片段控制面板截图
测试片段控制面板截图

参数

属性
描述
必需的
姓名
树中显示的此元素的描述性名称。
是的
将 Test Fragment 与Module Controller一起使用时,请确保禁用 Test Fragment 以避免执行 Test Fragment 本身。这是自 JMeter 2.13 以来默认完成的。
^

设置线程组

一种特殊类型的线程组,可用于执行预测试操作。这些线程的行为与普通的线程组元素完全一样。不同之处在于这些类型的线程在测试继续执行常规线程组之前执行。

设置线程组控制面板的屏幕截图
设置线程组的控制面板截图
^

拆线线程组

一种特殊类型的 ThreadGroup,可用于执行测试后操作。这些线程的行为与普通的线程组元素完全一样。不同之处在于这些类型的线程在测试完成执行其常规线程组之后执行。

tearDown 线程组的控制面板截图
tearDown Thread Group 控制面板截图
请注意,默认情况下,如果 Test 正常关闭,它将不会运行,如果您想让它在这种情况下运行,请确保在测试计划元素上选中“在主线程关闭后运行 tearDown 线程组”选项。如果停止测试计划,即使选中选项,tearDown 也不会运行。
图 1 - 关闭主线程后运行 tearDown Thread Groups
图 1 - 关闭主线程后运行 tearDown Thread Groups
^
^
Go to top