http://jmeter.apache.org/usermanual/component_reference.html
18、介绍
一些测试元素使用Jmeter属性控制它们的行为。这些属性通常在装入类时解析。通常发生在测试计划开始之前,因此不能通过使用setProperty()函数更改设置。
18.1 采样器
采样器执行Jmeter的实际工作,每个采样器(除流量控制操作除外)生成一个或多个样本结果。样本结果具有各种属性(成功/失败,经过时间,数据大小等),可以在各种侦听器查看。
FTP请求
这个控制器允许您向FTP服务器发送一个”检索文件“或”上传文件“FTP请求。如果你打算向同一个FTP服务器发送多个请求,可以考虑使用FTP请求默认配置元素,这样你就不必为每个FTP请求生成控制器输入相同的信息。当下载文件时,它可以存储在磁盘(本地文件)或响应数据中,或两者兼备。
延迟时间设置为登录所需时间。
属性 | 描述 | 是否必需 |
名称 | 在测试计划中显示该采样器名称 | No |
服务器名称或IP | FTP服务器的名称或IP地址 | Yes |
端口 | 端口使用。若果该选项填充数值,则会使用该端口。否则,JMeter将会使用默认的FTP端口 | No |
远程文件 | 要下载的文件或要上传的目标文件的名称 | Yes |
本地文件 | 准备上传的文件,或从远程下载存为本地的文件名 | Yes |
是,如果上传(*) | ||
本地文件内容 | 提供上传的内容,覆盖“本地文件”属性 | |
是,如果上传(*) | ||
get(下载)/put(上传) | 是否下载或上传文件 | Yes |
使用二进制模式? | 勾选此项使用二进制模式 (默认ASCII) | Yes |
保存文件响应? | 在响应数据中是否保存下载的文件内容,如果是ASCII,则内容在View Result Tree可见。 | Yes |
是,如果下载 | ||
用户名 | FTP 账户用户名 | Usually |
密码 | FTP 账户密码,注:这将在测试计划中显示 | Usually |
HTTP请求
此采样器允许您向Web服务器发送HTTP/HTTPS请求。它允许您控制Jmeter是否为图像和其它嵌入式资源解析HTML文件,并发送HTTP请求来下载。下载类型的资源如下:
--图片
--应用程序
--样式表(CSS)和文件中引用的资源
--外部脚本文件
--iframes背景图像(体,表,表格TD标签,表格TR标签)
--背景声音
默认的解析器是 org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser。这可以通过使用属性“htmlparser”改变。className-参见Jmeter.
如果你打算向同一个web服务器发送多个请求时,建议使用HTTP请求默认配置元素,这样不必为每个HTTP请求输入相同的信息。或者,与手动添加HTTP请求不同,你可能希望使用Jmeter的HTTP(s)测试脚本记录创建。若您有许多HTTP请求或带有许多参数的请求,这样做可以节省时间。
在该采样器中有三个不同的测试元素:
AJP/1.3 Sampler
注:
AJP协议:AJP--Apache JSev Protocol 是定向包协议,连接器监听8090端口,负责和其它的HTTP服务器建立连接,在把Tomcat与其它HTTP服务器集成时,使用该连接器。
HTTP协议:连接器监听8080端口,负责建立HTTP连接。在通过HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用该连接器。
使用Tomact mod jk协议(允许Tomcat在AJP模式下测试,不需在Apache httpd),该AJP Sampler不支持多文件上传,只能使用第一个文件。
HTTP Request
添加HTTP请求后,可以点击协议下拉框,选择使用的HTTP协议实现请求
Java
使用JVM提供的HTTP实现,与HttpClient相比,具有一些限制,见下。
HTTPClient4
使用HttpComponents 的HttpClient 4.x。
空白值
没有在HTTP采样器上设置实现,依赖于HTTP请求默认值(如果存在或在Jmeter上),定义在jmeter.properties中的HttpSampler属性。
图形化的HTTP Request
这是HTTP请求的GUI变化,以方便的UI元素来查看或编辑GraphQL查询,变量和操作名称,同时使用相同的采样器将它们转换为HTTP参数。这隐藏或自定义了以下UI元素,因为它们不方便或将GraphQL http/https请求无关:
方法(Method):只有POST和GET方法符合GraphQL over HTTP规范,默认选择POST方法。
参数(Parameters) 和 Post 参数:你可以通过Query,Variables和 Operation Name 页面元素来查看或编辑参数内容。
文件上传(File Upload):与GraphQL 查询无关紧要。
高级选项-从HMTL文件中嵌入资源:与GraphQL JSON响应中无关紧要。
JAVA HTTP实现一些限制:
--无法控制如何重用连接。当一个链接被Jmeter释放时,它可能被同一个线程重用,也可能不被重用。
--API最适合单线程使用,各种设置都是通过系统属性定义,适用于所有连接。
--不支持Kerberos身份验证(Kerberos--是计算机网络授权协议,用在非安全网络中,对个人通信以安全的手段进行身份认证)
--不支持使用Keystore配置进行基于客户端证书测试
--更好的控制重试机制
--不支持虚拟主机
--它仅支持以下方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE
--使用DNS缓存管理器更好的控制DNS缓存
注:File协议(本地文件传输协议,主要用于访问本地计算机中的文件,如同在Windows资源管理器中打开文件一样;基本格式如下:file:///文件路径)仅用于测试目的。不管使用哪个HTTP采样器,都由相同代码处理。
如果请求需要服务器或代理登录授权(即浏览器会创建一个弹出对话框),你还必须添加一个HTTP授权管理器配置元素。对于普通登录(即用户在表单中输入登录信息),你需要根据请求的实际方法(如:POST方法)和表单中定义的参数创建一个HTTP请求,如果使用HTTP,可以使用JMeter Proxy来捕获登录。
每个线程使用一个单独的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请求中。若你有多个需要授权或cookie的HTTP请求,则将元素添加到Thread Group。这样,所有HTTP请求将共享相同的授权管理器和Cookie管理器。
请求变量值:
属性 | 描述 | 是否必填 |
名称 | 在测试计划中显示该样本名称 | 否 |
服务器名称 | 服务器的名称或IP地址,如:www.example.com。不包含“http://”前缀。注:若在HTTP请求头管理器中未定义“Host”,它将使用虚拟主机名 | 否 |
端口 | 服务器默认端口:80 | 否 |
连接超时 | 连接超时。等待连接打开的毫秒数 | 否 |
响应超时 |
响应超时。等待响应的毫秒数。注:这适用于每次等待响应,如服务器响应以多个块的形式发送,则总运行时间可能比超时时间长 持续时间断言可用于检测耗时太长而无法完成的响应 |
否 |
服务器(代理) | 服务器(代理)执行请求的是代理服务器的主机名或IP地址(不包括http://前缀) | 否 |
端口 | 代理服务器监听的端口 | |
指定了代理主机名 | ||
用户名 | 代理服务器的用户名(可选) | 否 |
密码 | 代理服务器的密码(可选),如:测试计划中存储为未加密的 | 否 |
实现 | JAVA,HttpClient4。若没有指定(也没有HTTP Request Defaults定义),默认值取决于JMeter属性JMeter的值。若失败,则使用HttpClinet4实现 | 否 |
协议 | HTTP,HTTPS或者FILE。默认为HTTP | 否 |
方法 | GET,POST,HEAD,TRACE,OPTIONS,PUT,DELETE,PATCH(不支持JAVA实现)。使用HttpClient4,则可以关联方法:COPY,LOCK,MKCOL,MOVE,PROPFIND,PROPPATCH,UNLOCK,REPORT,MKCALENDAR,SEARCH | 是 |
内容编码 | 要使用的内容编码(用于POST、PUT、PATCH和FILE),要使用的字符编码,与Content-Encoding HTTP无关 | 否 |
自动重定向 |
设置底层http协议处理程序自动进行重定向,因此JMeter不会看到它们,因此不会作为示例出现。只能用于GET和HEAD请求,HTTPClient采样器将拒绝使用它进行POST或PUT的尝试 |
否 |
跟随重定向 |
这只有在“自动重定向”未启用时才有效。若设置了,JMeter采样器将检查响应是否是一个重定向,若是,则遵循它。最初的重定向和进一步的响应将作为额外的示例显示。父样例的URL和数据字典将取自最终(非重定向)样例,但父样例的字节计数和运行时间包括所有样例。延迟是从初始响应中获取。注意:HttpClient采样器可能会记录以下信息:“"Redirect requested but followRedirects is disabled”,这个将被忽视。Jmeter将在绝对和相对重定向URL中折叠“/../segement”形式的路径。 如:http://host/one/../two 将折叠为 http://host/two。若有必要,可以通过设置JMeter属性来重写该行为 httpsampler.redirect.removeslashdotdot=false |
否 |
使KeepAlive | JMeter设置Connection:keep-alive报头。这在默认HTTP实现中不能正常工作,因为连接重用不受用户控制。适用于Apache HttpComponents HttpClient实现一起工作 | 否 |
使用multipart/form-data作为Post请求数据 | 使用multipart/form-data 或 application/x-www-form-urlencoded 作为post请求 | 否 |
与浏览器兼容头 | 当使用multipart/form-data,将重写 Content-Type 和 Content-Transfer-Encoding头部,只发送Content-Disposition报头 | 否 |
Path |
资源路径(如:/servlets/myServlet)。若果资源需要查询字符串参数,可参考下: 作为一个特殊情况,若路径以“http://”或“https://”开头,那么这个用作完整的URL。在这种情况下,服务器、端口和协议字段均被忽略,参数在Get和Delete方法中也被忽略。另外。除了用%20替换空格外,该路径没有进行编码,因此可能需要对不安全字符进行编码,以避免出现URISyntaxException之类的错误 |
否 |
与请求一起发送参数 |
查询字符串将从提供的参数列表中生成,每个参数都有一个名称和值、用于对参数进行编码的选项及包含或排除等号的选项(当值为空字符串时,有些应用程序不希望使用等号),查询字符串将以正确的方式生成,取决于你选择的方法(如:若你选择GET或DELETE,查询字符串将被加到URL,若POST或PUT,它将被单独发送)。此外,若将使用多部分表单发送文件,查询字符串将使用多部分表单规范创建,见下。此外,
|
否 |
文件路径 |
要发送的文件的名称。如果为空,JMeter不发送文件,若填写,JMeter自动将请求作为一个多部分表单请求发送 若是一个POST、PUT或PATCH请求,并且有个文件的'Parament name'属性(下面)被省略,那么该文件将作为请求的整体发送,即不添加包装器。允许发送任意的正文,此用于POST请求,也用于PUT请求。 |
否 |
参数名称 | web请求参数名称 | 否 |
MIME类型 |
MIME类型(如:text/plain), 如果它是一个POST、PUT或PATCH请求,且省略了‘name’属性(如下所示)或请求体仅由参数值构造,那么该字段的值将用作content-type请求头的值。 |
否 |
从HTML文件获取所有内含的资源 | 告诉Jmeter解析HTTP/HTTPS请求中HTML文件中引用的所有图像、Java小程序、JavaScript文件、CSS等 | 否 |
保存响应为MD5哈希 | 若选择此项,则响应不会存储在示例结果中。相反,计算存储数据的32个字符的MD5哈希值,目的是为了测试大量数据。 | 否 |
URLs必须匹配 | 若果存在,则必须是一个正则表达式,用于匹配任何内含url。所以如果你想从http://example.invalid/下载嵌入资源,使用表达式http://example.invalid/.* | 否 |
URLs必须不匹配 | 若存在,它必须是一个正则表达式,用于过滤发现的任何嵌入url。所以,若你不想从任何来源下载PNG或SVG文件,使用表达式:.*.(?i:svg|png) | 否 |
使用并发池 | 使用并发连接池来获取嵌入式资源 | |
大小 | 用于获取嵌入式资源的并发连接的池大小 | |
源地址类型 |
[仅用于HTTP请求与HTTPClient实现] 要区分源地址值,请选择它们的类型:
|
|
JDBC请求
该样本请求可以让你针对数据库发送JDBC请求(一个SQL查询)。
在使用之前,你需要建立JDBC Connection Configuration Configuration元素。如果提供了Variable Names列表,则Select语句返回的每一行,将使用相应列的值设置变量(若提供了变量名),并设置行数。如:若果Select语句返回3列2行,变量名是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语句返回0行,那么A#和C#变量设置为0,而不会设置其他变量。若必要,旧变量会清除,如:若第一个选择检索六行而第二个选择仅返回三行,则第四、第五和第六行的附加变量将被删除。
延迟时间是从获取连接所用的时间开始设置的。