JMeter 组件详解-Samplers 采样器

Metadata

title: JMeter 组件详解-Samplers 采样器
date: 2022-12-13 13:20
tags: 
  - 行动阶段/完成
  - 主题场景/工具
  - 笔记空间/KnowladgeSpace/ToolSpace
  - 细化主题/JMeter
  - 细化主题/组件
  - 细化主题/采样器
categories:
  - JMeter
keywords:
  - JMeter
  - 组件
  - 采样器
description: 采样器执行JMeter的实际工作。每个采样器(流量控制动作除外)产生一个或多个采样结果。示例结果具有各种属性(成功/失败、运行时间、数据大小等),可以在各种侦听器中查看。

Samplers 采样器

采样器执行JMeter的实际工作。每个采样器(流量控制动作除外)产生一个或多个采样结果。示例结果具有各种属性(成功/失败、运行时间、数据大小等),可以在各种侦听器中查看。

FTP Request | FTP请求

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

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

界面

参数说明

Attribute Description Required
Name 树中显示的这个采样器的描述性名称。 No
Server Name or IP FTP服务器的域名或IP地址。 Yes
Port 端口使用。如果是>0,则使用这个特定的端口,否则JMeter使用默认的FTP端口。 No
Remote File: 要检索的文件或要上传的目标文件的名称。 Yes
Local File: 要上传的文件或下载的目标文件(默认为远程文件名)。 "Yes, if uploading (*)"
Local File Contents: 提供上传的内容,重写"本地文件"属性。 "Yes, if uploading (*)"
get(RETR) / put(STOR) 是否检索或上传文件。 Yes
Use Binary mode? 检查此选项以使用二进制模式(默认ASCII) Yes
Save File in Response? 是否在响应数据中存储检索到的文件的内容。如果模式是ASCII,则内容将在视图结果树中可见。 "Yes, if downloading"
Username FTP帐户的用户名。 Usually
Password FTP帐户密码。注意:这将在测试计划中可见。 Usually

HTTP Request | HTTP请求

这个示例程序允许您向web服务器发送HTTP/HTTPS请求。它还允许您控制JMeter是否解析图像和其他嵌入资源的HTML文件,并发送HTTP请求来检索它们。可以检索以下类型的嵌入式资源:

  • 图片
  • 小应用程序
  • 样式表(CSS)和从这些文件引用的资源
  • 外部脚本
  • 框架,iframes
  • 背景图片(主体,表,TD, TR)
  • 背景声音

默认的解析器是 org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser。这可以通过使用 htmlparser.className 属性来改变。-参见jmeter.properties 的细节。

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

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

界面

Screenshot of Control-Panel of HTTP Request

HTTP Request Advanced config fields

参数说明

Attribute Description Required
Name 树中显示的这个采样器的描述性名称。 No
Server web服务器的域名或IP地址,如 www.example.com 。不包含http://前缀。注意:如果"Host"头是在header Manager中定义的,那么它将被用作虚拟主机名。 No
Port web服务器正在监听的端口。默认值:80 No
Connect Timeout 连接超时。等待连接打开的毫秒数。 No
Response Timeout 响应超时。等待响应的毫秒数。注意,这适用于每次等待响应。如果服务器响应是在几个块中发送的,那么总的运行时间可能会比超时时间长。</br> 持续时间断言可用于检测需要太长时间才能完成的响应。 No
Server (proxy) 执行请求的代理服务器的主机名或IP地址。不包含http://前缀。 No
Port (proxy) 代理服务器正在监听的端口。 No, unless proxy hostname is specified
Username 代理服务器的用户名(可选)。 No
Password 代理服务器密码(可选)。(注意,此数据未加密存储在测试计划中) No
Implementation Java, HttpClient4。如果没有指定(也没有由HTTP请求默认值定义),默认值取决于JMeter属性JMeter的值。httpsampler,如果失败,就使用HttpClient4实现。 No
Protocol HTTP, HTTPS或文件。默认值:HTTP No
Method GET, POST, HEAD, TRACE, OPTIONS, PUT, DELETE, PATCH (JAVA实现不支持)。使用HttpClient4,以下与WebDav相关的方法也被允许:COPY, LOCK, MKCOL, MOVE, PROPFIND, PROPPATCH, UNLOCK, REPORT, MKCALENDAR, SEARCH。 </br> 通过使用JMeter属性httpsampler.user_defined_methods,可以为HttpClient4预定义更多方法。 Yes
Content Encoding 要使用的内容编码(用于POST、PUT、PATCH和FILE)。这是要使用的字符编码,与内容编码HTTP报头无关。 No
Redirect Automatically 将底层http协议处理程序设置为自动遵循重定向,因此它们不会被JMeter看到,因此不会显示为示例。应该只用于GET和HEAD请求。HttpClient采样器将拒绝将其用于POST或PUT的尝试。 No
Follow Redirects 这只有在"自动重定向"未启用的情况下才有效。如果设置了,JMeter采样器将检查响应是否是重定向,如果是,则跟踪它。初始重定向和进一步的响应将作为额外的样本显示。父样例的URL和数据字段将取自最终样例(未重定向),但父样例的字节计数和运行时间包括所有样例。延迟是从初始响应中提取的。注意HttpClient采样器可能会记录以下消息: </br> "Redirect requested but followRedirects is disabled" No
Use KeepAlive JMeter设置Connection: keep-alive头。这在默认HTTP实现中不能正常工作,因为连接重用不在用户控制之下。它与Apache HttpComponents HttpClient实现一起工作。 No
Use multipart/form-data for HTTP POST 使用multipart/form-data或application/x-www-form-urlencoded post请求 No
Browser-compatible headers 当使用multipart/form-data时,这会抑制Content-Type和Content-Transfer-Encoding头;只发送Content-Disposition头部。 No
Path 资源的路径(例如/servlets/myServlet)。如果资源需要查询字符串参数,在下面的"发送请求参数"部分添加它们。 </br> 在这种情况下,服务器、端口和协议字段被忽略;参数对于GET和DELETE方法也会被忽略。另外请注意,该路径没有被编码——除了用%20替换空格之外——因此可能需要对不安全字符进行编码,以避免出现URISyntaxException等错误。 No
Send Parameters With the Request 查询字符串将从您提供的参数列表中生成。每个参数都有一个名称和值,编码参数的选项,以及包含或排除等号的选项(一些应用程序在值为空字符串时不希望有等号)。查询字符串将以正确的方式生成,取决于你所做的"方法"的选择(即,如果你选择了GET或DELETE,查询字符串将被附加到URL,如果POST或PUT,那么它将被单独发送)。此外,如果您正在使用多部分表单发送文件,那么查询字符串将使用多部分表单规范创建。 No
File Path 要发送的文件的名称。如果留空,JMeter不发送文件,如果填写,JMeter自动发送请求作为一个多部分表单请求。 No
Parameter name "name"web请求参数的值。 No
MIME Type MIME类型(例如,文本/普通)。如果是一个POST、PUT或PATCH请求,并且省略了"name"属性(下面)或者请求正文仅由参数值构造,那么该字段的值将被用作内容类型请求头的值。 No
从HTML文件中检索所有嵌入式资源 告诉JMeter解析HTML文件,并对文件中引用的所有图像、Java小程序、JavaScript文件、css等发送HTTP/HTTPS请求。详见下文。 No
Save response as MD5 hash? 如果选择此选项,则响应不会存储在示例结果中。相反,计算并存储数据的32个字符的MD5哈希值。这是为了测试大量数据。 No
URLs must match 如果存在,则必须是一个正则表达式,用于匹配找到的任何嵌入式url。因此,如果您只想从http://example.invalid/下载嵌入式资源,请使用表达式:http://example\.invalid/.* No
URLs must not match 如果存在,则必须是一个正则表达式,用于过滤掉找到的任何嵌入的url。所以,如果你不想从任何来源下载PNG或SVG文件,使用表达式:.*\.(?i: SVG | PNG) No
Use concurrent pool 使用并发连接池来获得嵌入式资源。 No
Size 用于获取嵌入式资源的并发连接的池大小。 No
Source address type 只适用于HTTPClient实现的HTTP请求 </br>要区分源地址值 No
Source address field 只适用于HTTPClient实现的HTTP请求</br>此属性用于启用IP欺骗。它覆盖了这个示例的默认本地IP地址。JMeter主机必须有多个IP地址(即IP别名、网络接口、设备)。取值为主机名、IP地址或网口设备,如"eth0"、"lo"、"wlan0"。</br>如果属性httpclient。定义了localaddress,用于所有HttpClient请求。 No

JDBC Request | JDBC 请求

这个示例程序允许向数据库发送JDBC请求(一个SQL查询)。

在使用它之前,您需要设置一个[JDBC Connection Configuration] Configuration元素

如果提供了Variable Names列表,那么对于Select语句返回的每一行,将使用相应列的值设置变量(如果提供了变量名),并设置行数。

界面

Screenshot of Control-Panel of JDBC Request

参数说明

Attribute Description Required
Name 树中显示的这个采样器的描述性名称。 No
Variable Name of Pool declared in JDBC Connection Configuration 连接池绑定到的JMeter变量的名称。这必须与 [JDBC Connection Configuration] 中的 Variable Name 字段一致。 No
Query Type 根据语句类型设置 </br> - Select Statement</br> - Update Statement - use this for Inserts and Deletes as well</br> - Callable Statement</br>Prepared Select Statement</br> - Prepared Update Statement - use this for Inserts and Deletes as well</br> - Commit</br> - Rollback</br> - Autocommit(false)</br> - Autocommit(true)</br> - Edit - this should be a variable reference that evaluates to one of the above </br> </br> Commit、Rollback、Autocommit(false)和Autocommit(true)类型是特殊的,因为它们只会忽略给定的SQL语句并改变连接的状态。 Yes
SQL Query SQL query. </br></br> Do not enter a trailing semi-colon. Yes
Parameter values 逗号分隔的参数值列表。使用]NULL[来表示NULL参数。(如果需要,可以通过定义属性"jdbcsampler.nullmarker"来更改空字符串。)例如,如果任何值包含逗号或双引号,列表必须用双引号括起来,并且任何嵌入的双引号必须是双引号 Yes, if a prepared or callable statement has parameters
Parameter types 逗号分隔的SQL参数类型列表(例如INTEGER, DATE, VARCHAR, DOUBLE)或Constants的整数值。当您使用驱动程序建议的自定义数据库类型(例如OracleTypes。CURSOR可以用其整数值-10表示)。 它们被定义为java.sql类中的字段。 Yes, if a prepared or callable statement has parameters
Variable Names 逗号分隔的变量名列表,用于保存Select语句、Prepared Select语句或CallableStatement返回的值。注意,当与CallableStatement一起使用时,变量列表必须与调用返回的OUT参数的顺序相同。如果变量名比OUT参数少,那么在线程上下文变量中存储的结果与提供的变量名相同。如果存在比OUT参数更多的变量名,则会忽略额外的变量 No
Result Variable Name 如果指定,这将创建一个包含行映射列表的Object变量。每个映射都包含列名作为键,列数据作为值。 No
Query timeout(s) 设置以秒为单位的查询超时时间,空值表示0,表示无穷大。-1意味着不设置任何查询超时,这可能需要用例或当某些驱动程序不支持超时。默认值为0。 No
Limit ResultSet 限制遍历ResultSet的行数。空值意味着-1,例如没有限制,这也是默认值。这可以帮助减少通过JDBC驱动程序从数据库中获取的数据量,但会分别影响Handle ResultSet的所有可能选项——例如:incomplete ResultSet和记录计数≤限制。 No
Handle ResultSet 定义如何处理可调用语句返回的ResultSet </br> </br> - Store As String (默认)——变量名列表中的所有变量都存储为字符串,当出现在列表中时,不会遍历ResultSet。clob将被转换为string。blob将被转换为string,就像它们是UTF-8编码的字节数组一样。在jdbcsampler之后,clob和blob都将被切断。max_retain_result_size字节。 </br> - Store As Object——变量名称列表中的ResultSet类型的变量将存储为对象,可以在后续的测试/脚本中访问和迭代,不会遍历ResultSet。将像选择Store as String一样处理clob。blob将存储为字节数组。在jdbcsampler之后,clob和blob都将被切断。max_retain_result_size字节。 </br> - Count Records——ResultSet类型的变量将通过显示作为结果的记录计数进行迭代。变量将被存储为string。对于blob,将存储对象的大小。 No

Java Request | Java 请求

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

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

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

如果方法teardownTest没有被AbstractJavaSamplerClient的子类覆盖,它的teardownTest方法将不会被调用。这减少了JMeter的内存需求。这不会对现有的Test计划产生任何影响。

添加/删除按钮目前没有任何作用。

界面

参数说明

Attribute Description Required
Name 树中显示的这个采样器的描述性名称。 No
Classname 要采样的JavaSamplerClient接口的具体实现。 Yes
Send Parameters with Request 将传递给采样类的参数列表。所有参数都作为字符串发送。具体设置见下文。 No

BeanShell Sampler | BeanShell 采样器

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

test元素支持ThreadListener和TestListener接口方法。它们必须在初始化文件中定义。请参阅文件BeanShellListeners。示例定义为BSHRC。BeanShell采样器还支持可中断接口。可以在脚本或init文件中定义interrupt()方法。

界面

参数说明

Attribute Description Required
Name 树中显示的这个采样器的描述性名称。名称存储在脚本变量Label中 No
Reset bsh.Interpreter before each call 如果选择此选项,则将为每个示例重新创建解释器。对于一些长期运行的脚本来说,这可能是必要的。有关更多信息,请参阅最佳实践—BeanShell脚本。 Yes
Parameters 传递给BeanShell脚本的参数。这是为了与脚本文件一起使用;对于在GUI中定义的脚本,您可以使用脚本本身中需要的任何变量和函数引用。 No
Script file 包含要运行的BeanShell脚本的文件。文件名存储在脚本变量FileName中 No
Script 要运行的BeanShell脚本。返回值(如果不是null)存储为采样结果。 Yes (unless script file is provided)

TCP Sampler | TCP采样器

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

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

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

  • tcp.status.prefix 文本在状态号之前
  • tcp.status.suffix文本在状态号之后
  • tcp.status.properties属性文件的名称,用于将状态码转换为消息
  • tcp.handler TCP处理程序类的名称(默认TCPClientImpl) -仅在GUI上没有指定时使用

界面

参数说明

Attribute Description Required
Name 树中显示的这个元素的描述性名称。 No
TCPClient classname TCPClient类的名称。默认为 tcp.handler。处理程序,TCPClientImpl失败。 Yes
ServerName or IP TCP服务器的名称或IP Yes
Port Number 使用的端口 Yes
Re-use connection 如果选中,连接将保持打开状态。否则在读取数据时关闭。 Yes
Close connection 如果选择,则在运行采样器后将关闭连接。 No
SO_LINGER 在创建 socket 时使用指定的延迟时间(秒)启用/禁用SO_LINGER。如果你设置"SO_LINGER"值为0,你可能会阻止大量带有TIME_WAIT状态的套接字闲置。 No
End of line(EOL) byte value 行尾的字节值,将其设置为范围-128+127以外的值,以跳过eol检查。你可以在 jmeter.properties 中设置这个以及eolByte属性。如果你在TCP采样配置和jmeter中设置这个。属性文件的同时,将使用TCP采样器配置中的设置值。 No
Connect Timeout 连接超时(毫秒,0禁用)。 No
Response Timeout 响应超时(毫秒,0禁用)。 Yes
Set NoDelay java.net.Socket.setTcpNoDelay()。如果选中,将禁用Nagle的算法,否则将使用Nagle的算法。 Yes
Text to Send 要发送的文本 Yes
Login User 用户名-默认实现中未使用 No
Password 密码-默认实现中不使用(注意,这个未加密存储在测试计划中) No

Mail Reader Sampler | 邮件阅读采样器

邮件阅读器采样器可以使用POP3(S)或IMAP(S)协议读取(并可选地删除)邮件消息。

界面