『动善时』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 ...
随机推荐
- 修改RedHat7的root用户密码
前言 前段时间由于长时间没有使用虚拟机里面的一个操作系统,导致密码记得不是太清,登录不进去.今天想起还是做个小记录,以便以后参考. 再一个是,当时网上也搜了很多解决问题的博客,但大部分都是同一个博客内 ...
- python 集合详解
字符串 一个个字符组成的有序的序列,时字符的集合 使用单引,双引,三引 引住的字符序列 字符时不可变的对象 bytes定义 bytes不可变字节序列 使用b前缀定义 只允许基本ASCII使用字符形式 ...
- 二叉树的建立与遍历(c语言)入门
树其实在本质上就是一对多,链表就是一对一. 二叉树的建立: 这里的代码采用的是最粗暴的创建方法,无实际用处.但初次学习二叉树可以通过这个创建方法更好的理解二叉树. 二叉树的遍历: 遍历在大体上分为递归 ...
- 一键安装KMS服务
本文转载于 秋水逸冰 » 一键安装 KMS 服务脚本 KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Wi ...
- PTA 统计二叉树结点个数
6-1 统计二叉树结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCo ...
- java例题_50 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1 /*50 [程序 50 文件 IO] 2 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 3 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放 ...
- Tomcat详解系列(3) - 源码分析准备和分析入口
Tomcat - 源码分析准备和分析入口 上文我们介绍了Tomcat的架构设计,接下来我们便可以下载源码以及寻找源码入口了.@pdai 源代码下载和编译 首先是去官网下载Tomcat的源代码和二进制安 ...
- vue之mixin理解与使用
使用场景 当有两个非常相似的组件,除了一些个别的异步请求外其余的配置都一样,甚至父组件传的值也是一样的,但他们之间又存在着足够的差异性,这时候就不得不拆分成两个组件,如果拆分成两个组件,你就不得不冒着 ...
- markdown的基础语法
一级标题,一个#加空格 二级标题,两个#加空格 三级标题,三个#加空格 四级标题,四个#加空格 五级标题,五个#加空格 六级标题(最多支持到六级),六个#加空格 字体 粗体,两边加两个星号 斜体,两边 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...