『动善时』JMeter基础 — 12、JMeter取样器详解:sampler
1、取样器介绍
取样器是用来模拟用户操作的,向服务器发送请求以及接收服务器的响应数据。
取样器是在线程组内部的元件,也就是说取样器只能在线程组中添加。
取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。(取样器通常要进行这三个工作)
2、JMeter自带的取样器
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 RequestJMS 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 Sampler与Bean Shell Sampler是两种特殊的可定制的Sampler。总结:
- 取样器的作用是向服务器发送请求,记录响应信息,记录响应时间。
- 多个取样器按照它们在树中出现的顺序运行。
3、“HTTP请求”为例介绍一下取样器

根据上图解释说明:
(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-Encoding和Content-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-data或application/x-www-form-urlencoded方式发送HTTP POST请求,默认不选中。
说明POST请求表单提交的编码类型:
multipart/from-data或application/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-Type和Content-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为资源媒体类型。

4、高级页面选项介绍

根据上图解释说明:
(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)会单独讲解。
参考:
『动善时』JMeter基础 — 12、JMeter取样器详解:sampler的更多相关文章
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 8、JMeter主要元件介绍
目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...
- 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍
目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...
- 『动善时』JMeter基础 — 30、JMeter中JSON断言详解
目录 1.JSON断言组件界面详解 2.JSON断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)JSON断言界面内容 (4)查看运行结果 (5)断言结果组件说明 3.JS ...
- 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解
目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...
- 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...
- 『动善时』JMeter基础 — 18、JMeter配置元件【计数器】
目录 1.计数器介绍 2.计数器界面详解 3.计数器的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)计数器界面内容 (4)HTTP请求界面内容 (5)查看结果 1.计数器介绍 如果需要 ...
- 『动善时』JMeter基础 — 19、JMeter配置元件【随机变量】
目录 1.随机变量介绍 2.随机变量界面详解 3.随机变量的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)随机变量界面内容 (4)HTTP请求界面内容 (5)查看结果 1.随机变量介绍 ...
- 『动善时』JMeter基础 — 22、JMeter中实现参数化(CSV)
目录 1.参数化的定义 2.什么情况下需要用到参数化 3.JMeter实现参数化的方式 4.CSV数据文件设置界面详细说明 (1)CSV数据文件设置组件界面说明 (2)补充说明:Recycle on ...
随机推荐
- 2018.8.30 nowcoder oi赛制测试1
2018.8.30 nowcoder oi赛制测试1 普及组难度,发现了一些问题 A 题目大意:求斐波那契数列\(f(k-1)f(k+1)-f(k)^2\),范围极大 打表可得规律 其实是卡西尼恒等式 ...
- JPEG解码——(6)IDCT逆离散余弦变换
本篇是该系列的第六篇,承接上篇IZigZag变换,介绍接下来的一个步骤--逆离散余弦变换,即逆零偏置前的一个步骤. 该步骤比较偏理论,其业务是对IZigZag变换后的数据,再进一步的处理,使其恢复DC ...
- 【linux】系统编程-3-system-V IPC 信号量
目录 前言 5. 信号量 5.1 概念 5.2 工作原理 5.3 操作函数 5.3.1 semget() 5.3.2 semop() 5.3.3 semctl() 5.4 例程 参考: 前言 原文链接 ...
- React 错误边界组件
这是React16的内容,并不是最新的技术,但是用很少被讨论,直到通过文档发现其实也是很有用的一部分内容,还是总结一下- React中的未捕获的 JS 错误会导致整个应用的崩溃,和整个组件树的卸载.从 ...
- 【C/C++】面向对象开发的优缺点
原创文章,转发请注明出处. 面向对象开发的优缺点 面向对象开发 是相对于 面向过程开发 的一种改进思路. 由于流水线式的面相过程开发非常直接,高效.在面对一些简单项目时,只需要几百行,甚至是几十行代码 ...
- [Azure DevOps] 如何安装并配置 Build Agent
1. 编译服务器 在 Azure Pipelines 中至少需要一个编译服务器的 Agent 才能编译代码或发布软件.Azure DevOps 本身已经提供了一个 Agent,但出于各种理由(需要特殊 ...
- 2020 OO 第二单元总结
只要跑得够快即使从头关到尾你也喜欢吗? 一.设计策略 1.1 总体策略概述 在多线程的协同和同步控制方面,我三次作业都是采用生产者/消费者模式(还憨憨地在内部分了customer.producer.t ...
- 关于Vim/Neovim/SpaceVim的一些思考
1 前言 最近看到了Neovim以及SpaceVim,于是上手试了一下. 2 Neovim与SpaceVim Neovim是Vim的一个分支,具有更加现代的GUI.嵌入式以及脚本化的终端.异步工作控制 ...
- 一.文件处理和json模块(容易混淆知识点即用法)
一.文件处理 注意点1: 打开文件包含两部分资源:操作系统级打开得文件+应用程序的变量. 在操作完毕一个文件时,必须把该文件的两部分资源一个不落的回收 如下: f.close() #回收操作系统级打开 ...
- Python基础之容易忘记的地方
(1)编译型与解释型语言区别: 编译型:一次性,把所有代码编译成机器能识别的二进制码,再运行 代表语言:c,c++ 优点: 执行速度块 缺点: 开发速度慢,调试周期长 解释型:代码从上到下一行一行解释 ...