『动善时』JMeter基础 — 12、JMeter取样器详解:sampler
阅读原文时间:2021年05月10日阅读:1

目录

取样器是用来模拟用户操作的,向服务器发送请求以及接收服务器的响应数据。

取样器是在线程组内部的元件,也就是说取样器只能在线程组中添加。

取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。(取样器通常要进行这三个工作)

  • HTTP Request:HTTP请求
  • Flow Control Action :测试活动
  • Debug Sampler :Debug取样器
  • JSR223 Sampler :JSR223取样器
  • AJP/1.3 Sampler :AJP/1.3取样器
  • Access Log Sampler:Access Log取样器
  • Bean Shell Sampler :Bean Shell取样器
  • FTP Request :FTP请求
  • JDBC Request :JDBC Request
  • JMS Publisher:JMS发布
  • JMS Point-to-Point :JMS点到点
  • JMS Subscriber :JMS订阅
  • JUnit Request :JUnit请求
  • Java Request :Java请求
  • LDAP Extended Request :LDAP扩展请求默认值
  • LDAP Request :LDAP请求
  • OS Process Sampler :OS进程取样器
  • SMTP Sampler :SMTP取样器
  • TCP Sampler :TCP取样器
  • Mail Reader Sampler:邮件阅读者取样器

说明:

  • 在测试工作中用的最多的可能就是“HTTP请求”。
  • 每一种不同类型的sampler可以根据设置的参数向服务器发出不同类型的请求。
  • 在JMeter的所有Sampler中,Java Request SamplerBean Shell Sampler是两种特殊的可定制的Sampler。

总结:

  • 取样器的作用是向服务器发送请求,记录响应信息,记录响应时间。
  • 多个取样器按照它们在树中出现的顺序运行。

根据上图解释说明:

(1)HTTP Request:

  • 名称(Name):取样器名称,也就是需要访问接口的名称。

    建议写成请求接口的地址,例如:/login这样在有多个取样器的时候,左侧列表就可以知道该取样器是针对哪个接口的。

  • 注释(Comments):对当前取样器的解释说明。

(2)Web服务器:

  • 协议<Protocol(http)>:向目标服务器发送HTTP请求时的协议,可以是http或者是https或者File ,默认值为http协议 (根据需求定)。
  • 服务器名称或IP(Server Name or IP):HTTP请求发送目标服务器的域名或IP地址,例如www.baidu.com或者127.0.0.1
  • 端口号(Port Number):所访问服务器中应用所占的端口,默认80端口。

(3)HTTP请求:

1)方法(Method):

发送HTTP请求的请求方式。(可以根据接口文档获得)

请求方式包括:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

2)路径(Path):

目标接口的URL路径(不包括服务器地址和端口)。

也可以直接写完整路径(上面配置的IP+端口就可以省略了) ,不带参数的api路径。

3)内容编码(Content encoding):

请求数据内容的编码方式,默认值为iso8859编码,但一般content encoding配置为UTF-8,来防止中文乱码。

说明一下Content encoding属性:

Accept-EncodingContent-Encoding是HTTP中用来对采用哪种编码格式传输正文进行协定的一对头部字段。

工作原理如下:

1、首先浏览器(也就是客户端)发送请求时,通过Accept-Encoding带上自己支持的内容编码格式列表。

2、服务端在接收到请求后,从中挑选出一种用来对响应信息进行编码,并通过Content-Encoding来说明服务端选定的编码信息。

3、浏览器在拿到响应正文后,依据Content-Encoding进行解压。

4)自动重定向:

如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter会自动重定向到新的页面,但是JMeter是不记录重定向的过程内容。只能用于GET和HEAD方法,如果是POST或者PUT请求则取样器不会发送。

301、302响应码说明:

官方的比较简洁的说明:

  • 301 redirect:301 代表永久性转移(Permanently Moved)
  • 302 redirect: 302 代表暂时性转移(Temporarily Moved )

详细来说,

它们的共同点301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)

他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

总结:

http 协议的 301 和 302 状态码都代表重定向。浏览器请求某url收到这两个状态码时,都会显示和跳转到 Response Headers 中的Location。即在浏览器地址输入 url A,却自动跳转到url B。

5)跟随重定向:

Http Request取样器的默认选项,当响应code是3xx时,自动跳转到目标地址。与自动重定向不同,JMeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,如有多个跳转则多个请求都会被记录下来,此为默认选项。

自动重定向和跟随重定向的区别只在于是否记录多个跳转的请求上

在JMeter默认选中跟随重定向,但跟随重定向自动重定向只能二选一。

6)使用keep Alive:

当该选项被选中时,JMeter和目标服务器之间使用Keep-Alive方式进行HTTP通信,默认选中。

HTTP请求中Keep-Alive模式说明:

如果一个浏览器对某一个域名有多个请求,就会进行频繁的建立连接和断开连接。所以HTTP 1.0中出现了Connection: keep-alive属性,用于建立长连接,即我们所说的Keep-Alive模式。

Keep-Alive模式更加高效,因为避免连接频繁建立和释放的开销。

7)对POST使用multipart/form-data:

使用multipart/from-dataapplication/x-www-form-urlencoded方式发送HTTP POST请求,默认不选中。

说明POST请求表单提交的编码类型:

multipart/from-dataapplication/x-www-form-urlencoded用来控制请求向服务器发送表单数据之前如何对其进行编码。

enctype属性

说明

application/x-www-form-urlencoded

默认编码方式, key1=value1&key2=value2。

multipart/form-data

普通表单提交,以及表单文件上传。

text/plain

以纯文本形式进行编码,其中不含任何控件或格式字符,该方式不常用。

8)与浏览器兼容的头(Browser-compatible headers)

当勾选multipart/form-data时,勾选此项会截掉HTTP请求头中的Content-TypeContent-Transfer-Encoding,而只发送Content-Disposition部分。

(4)同请求一起发送参数:

1)参数(Parameters):

在请求中发送带参数的URL ,JMeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。

编码这个选项最好勾选,因为如果参数值内含有ASCII Control Chars或者Non-ASCII characters或者其他符号的话,如果不勾选会导致发送失败(乱码问题),勾选的话会自动将含有的这些特殊符号进行编码。

2)消息体数据(Body Data):

通请求一起发送的数据消息,这里可以支持多种数据格式 json、xml等。

例如:

参数格式:name=zhangsan&age=15的形式。(参数以纯文本形式)

参数格式:json形式。(需要配置http信息头管理器,添加Context-Type = application/json)

注意:Parameters和Body Data只能选用其中一种方式发送参数。

3)文件上传(Files Upload):

在请求中发送文件。通常HTTP文件上传行为可以通过这种方式模拟,参数名称就是发送文件对应的参数,MINE Type为资源媒体类型。

根据上图解释说明:

(1)客户端实现:

  • 实现(Implementation):发送http请求的方式。可选项为Java和HttpClient4,默认为HttpClient4。

    HttpClient4是Java工具包实现的请求方式,是基于.net工具包二次定制,效率高。

    如果是上传文件的话一定要选择,否则请求发送成功了,其实文件并未上传成功。

  • 超时(毫秒)<Timeouts(milliseconds)>:超时设置。

    链接(Connect):连接超时时间,单位为毫秒;

    响应(Response):响应等待超时时间,单位为毫秒;

(2)从HTML文件嵌入资源:

  • 从HTML文件获取所有内含的资源(Retrieve All Embedded Resources)

    当该选项被选中时,JMeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行解析,并获取HTML中包含的所有资源(图片、flash等),默认不选中。

    如果用户只希望获取页面中的特定资源,可以在后边的URLs must match文本框中,填入需要下载的特定资源表达式,这样只有能匹配指定正则表达式的URL指向资源会被下载。

  • 并行下载(Parallel downloads):是否使用自设资源池,勾选后可设置大小。

  • 数量(Number):资源池大小,默认设置为6。

  • 网址必须匹配(URLs must match):URL匹配过滤,填写此项则只会下载与此内容项匹配的url的资源。

    例如:要获取http://example.com/下的所有资源,使用正则表达式http://example.com/.*

(3)源地址:

只用于http协议且Implementation为HttpClient4的情况,此属性用于启用IP欺骗,会重写了这个http请求使用的默认本地IP地址。

用于JMeter主机具有多个IP地址的情况。该值可以是主机名、IP地址或网络接口设备,如“ey0”或“l0”或“wlan0”

可以设置多个,防止IP地址被服务端拉黑。

  • IP/主机名(IP/Hostname):使用特定的IP地址或(本地)主机名。
  • 设备(Device):选择该接口的第一个可用地址,该设备可以是IPv4或IPv6。
  • 设备IPV4:选择名称设备的IPv4地址。
  • 设备IPV6:选择名称设备的IPv6地址。

(4)代理服务器:

不想用本机的地址来发送Http请求,而想使用代理服务器时则填写。

  • 服务器名称或IP:代理服务器的名称或者IP地址。
  • 端口号:该代理的端口号。
  • 用户名:使用该代理的用户名。
  • 密码:用户密码。

(5)保存响应为MD5哈希:

选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该选项,以减少取样器记录响应数据的开销。

到这里“HTTP请求”这个取样器介绍完了,每个取样器的页面和用法都不用,这里不能一一进行说明,以后再用到哪种取样器(Samplers)会单独讲解。

参考: