目录
1. JMeter环境安装
1.1 安装JDK
下载-->安装-->配置环境变量-->校验
1.2 安装JMeter
下载-->安装-->配置环境变量-->启动验证
2. JMeter常用文件目录介绍
2.1 Bin目录
存放可执行文件和配置文件
2.2 Docs目录
是JMeter的api文档,用于开发扩展组件
2.3 Printable_docs目录
用户帮助手册
2.4 Lib目录
存放JMeter依赖的jar包和用户扩展所依赖的jar包
3. JMeter元件
取样器:发送请求
逻辑控制器:控制语句的执行顺序
前置处理器:对请求参数进行预处理
后置处理器:对应响应结果进行提取
断言:检测接口的返回结果是否与预期结果一致
定时器:设置等待
测试片段:封装一段代码,供其他脚本调用
配置元件:测试数据的初始化配置
监听器:查看JMeter脚本的运行结果
4. 元件的作用域和执行顺序
4.1 元件的作用域
是靠测试计划的树形结构中元件的父子关系来确定的。
4.2 元件的执行顺序
配置元件-->前置处理程序-->定时器-->取样器-->后置处理器-->断言-->监听器
5. 线程组的特点和分类
5.1 线程组作用
线程组就是控制Jmeter用于执行测试的一组用户
5.2 线程组位置
右键点击、测试计划’ --> 添加 -> 线程(用)--> 线程组
5.3 线程组特点
(1)模拟多人操作
(2)线程组可以添加多个,多个线程组可以并行或串行
(3)取样器 (请求)和逻辑控制器必须依赖线程组才能使用
5.4 线程组分类
普通线程组:
普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
setUp线程组:
种特殊类型的线程组,可用于执行预测试操作
tearDown线程组:
一种特殊类型的线程组,可用于执行测试后工作
6. 线程组参数详解
7. HTTP请求参数介绍
7.1 HTTP请求的作用
向服务器发送http及https请求
7.2 HTTP请求的位置
选中线程组->右键->添加->取样器->HTTP请求
7.3 HTTP请求的参数
8. 查看结果树
8.1 查看结果树的作用
查看HTTP请求的请求和响应结果
8.2 查看结果树位置
选中测试计划/线程组->右键->添加->监听器->察看结果树
8.3 查看结果树组成
取样结果:查看响应信息头信息、响应状态码
请求:查看请求相关信息 (ur1、方法、参数)
响应:查看响应信息
9. JMeter参数化
9.1 参数化定义
把测试数据组织起来,用不同的测试数据调用相同的测试方法。
9.2 参数化形式1:用户定义的变量
作用: 定义全局变量
位置:测试计划 --> 线程组--> 配置元件 --> 用户定义的变量
参数:
9.3 参数化形式2:用户参数
作用: 针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置: 测试计划 -->线程组--> 前置处理器 --> 用户参数
参数:
9.4 参数化形式3:CSV文件
作用:让不同用户在多次循环时,可以取到不同的值
位置: 测试计划 --> 线程组--> 配置元件 --> CSV 数据文件设置
参数:
9.5 参数化形式4:函数(_counter)
作用:计数函数,一般做执行次数统计使用
位置:在菜单中选择--> 选项 --> 函数助手对话框
设置:TRUE,每个用户有自己的计数器;EALSE,使用全局计数器
Name of variable in which to store the result (optional):用于存储结果的变量名(可选)
10. JMeter断言
断言:让程序自动判断预期结果和实际结果是否一致。
提示:
- JMeter在请求的返回层面有个自动判断机制 (响应状态码)
-但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性
JMeter中常用断言:
- 响应断言
-JSON断言
-持续时间断言(Duration Assertion)
10.1 响应断言
作用:对HTTP请求的任意格式的响应结果进行断言
位置:测试计划 --> 线程组--> HTTP请求-->(右键添加)断言 -->响应断言
测试字段: 要检查的项(实际结果)
- 响应文本:来自服务器的响应文本,即主体
- 响应代码: 响应的状态码,例如:200
- 响应信息: 响应的信息,例如: OK
- Response Headers:响应头部
- Request Headers: 请求头部
- Request Data: 请求数据
- URL样本:请求URL
- Document(text): 响应的整个文档
- 忽略状态:忽略返回的响应状态码
模式匹配规则:比较方式
- 包括:文本包含指定的正则表达式
- 匹配:整个文本匹配指定的正则表达式
- Equals: 整个返回结果的文本等于指定的字符串(区分大小写
- Substring: 返回结果的文本包含指定字符串(区分大小写
- 否: 取反
- 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK) ,不勾选代表逻辑与 (所有都必须匹配,断言才是OK)
- 注意: Equals和substring模式是普通字符串,而包括和匹配模式是正则表达式
测试模式:预期结果
- 即填写你指定的结果 (可填写多个),按钮[添加]、[删除]是进行指定内容的管理
10.2 JSON断言
作用:对HTTP请求的JSON格式的响应结果进行断言
位置: 测试计划 -->线程组--> HTTP请求 --> (右键添加) 断言 --> JSON断言
参数介绍
- Assert JSON Path exists: 用于断言的JSON元素的路径 (实际结果)
- Additionally assert value:如果你想要用某个值生成断言,请选择复选框
- Match as regular expression: 使用正则表达式断言
- Expected Value: 期望值 (期望结果)
- Expect null:如果希望为空,请选择复选框
- Invert assertion will fail if above conditions met):反转断言(如果满足以上条件则失败)
10.3 断言持续时间
作用:检查HTTP请求的响应时间是否超出要求范围
位置:测试计划-->线程组-->HTTP请求-->(右键添加)断言-->断言持续时间
参数介绍:
- 持续时间 (毫秒) :HTTP请求允许的最大响应时间 (单位: 毫秒)。超过则认为失败
11. JMeter关联
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。
JMeter中常用的关联方法:
- 正则表达式提取器
- XPath提取器
- JSON提取器
11.1 正则表达式提取器
万能正则表达式提取公式:(.*?)
作用:针对任意格式的响应数据进行提取
位置:测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->正则表达式提取器
参数介绍:
- 引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写title,则可用${title)引用它
- 正则表达式
() : 括起来的部分就是要提取的
. : 匹配任何字符串
+ : 一次或多次
? : 不要太贪婪,在找到第一个匹配项后停止
- 模板:用$$引用起来,如果在正则表达式中有多个提取值,则可以是$2$$3$等等,表示解析到的第几个值给title。如: $1$表示解析到的第1个值
- 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值
- 缺省值: 如果参数没有取得到值,那默认给一个值让它取。
11.2 XPath提取器
作用:针对HTML格式的响应结果数据进行提取
位置:添加方式:测试计划-->线程组-->HTTP请求-->(右键添加)后置处器--> XPath提取器
参数介绍:
- Use Tidy (tolerant parser) :
- 当需要处理的页面是HTML格式时,必须选中该选项
- 当需要处理的页面是XML或XHTML格式时,取消选中该选项。
- 引用名称: 存放提取出的值的参数名称
- xPath Query:用于提取值的XPath表达式
- 匹配数字: 如果xPath路径查询出许多结果,则可以选择提取哪个。0: 表示随机,-1: 表示提取所有结果,1表示第一个值
- 缺省值:参数的默认值
11.3 JSON提取器
作用:针对JSON格式的响应结果数据进行提取
位置:添加方式:测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器--> JSON提取器
参数介绍:
- Names of created variables:存放提取出的值的参数名称
- JSON Path Expressions:JSON路表达式
- Match No:如果JSON路径配出许多结果,则可以选择提取哪个。0:表示随机,-1: 表示提取所有结果,1表示第一个值
- Default Values:参数的默认值
11.4 JMeter 属性
定义:JMeter属性其实就是编程中的全局变量的概念,用于跨线程组传递参数
操作步骤:
1.添加线程组1
2.添加HTTP请求1
3.添加JSON提取器
4.添加BeanShell取样器 (将JSON提取器提取的值保存为JMeter属性),使用_setProperty函数
5.添加HTTP请求2(读取JMeter属性)能,使用_property函数
6.设置测试计划为串行执行
12. JMeter直连数据库
12.1 连接数据库配置
添加MySOL驱动iar包
方式一:在测试计划面板点击”浏览..."按钮,将你的DBC驱动添加进来
方式二:将MySOL驱动jar包放入到lib/ext目录下,重启JMeter
12.2 配置数据库连接信息
添加方式: 测试计划 -->线程组--> (右键添加)配置件 --> JDBC Connection Configuration
参数介绍:
Variable Name: mysql数据库连接池名称 (JDBC请求时要用)
Database URL: jdbc:mysql://localhost:3306/tpshop2.0
组成:协议 + 数据库IP + 数据库端口 + 连接的数据库名称
JDBC DRIVER class: com.mysql.jdbc.Driver (MySQL驱动包位置固定格式一下拉框选择)
Username: root (连接数据库用户名,如实填写)
Password:123456 (连接数据库密码,如实填写)
12.3 添加JDBC请求
添加方式:测试计划 --> 线程组--> 取样器 --> JDBC Request
参数介绍:
variable Name: 数据库连接池的名字,需要与JDBC Connection Configuration的variable Name Bound Pool名字保持一致
Query Type:
查询操作:选择Select Statement
增加、删除、修改操作: 选择update statement
Query: 填写的SQL语句,未尾不要加“;”
variable names:保存SOL语句返回结果的变量名
13. JMeter逻辑控制器
13.1 如果(IF)控制器
作用: if控制器用来控制它下面的测试元素是否运行
位置: 测试计划-->线程组-->(右键添加)逻辑控制器-->如果(if)控制器
JS语法形式:
函数形式:
13.2 循环控制器
作用: 通过设置循环次数,来实现循环发送请求
位置: 测试计划-->线程组-->(右键添加)逻辑控制器-->循环控制器
13.3 ForEach控制器
作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关 的变量。
该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。
位置:测试计划-->线程组-->(右键添加)逻辑控制器--> ForEach控制器
参数介绍:
输入变量前缀:要读取的输入变量的固定前缀
开始循环字段:要读取的输入变量后缀数字的最小值-1
结束循环字段:要读取的输入变量后缀数字的最大值
输出变量名称:读取输入变量的值后保存的新变量名,用于后续HTTP请求来引用
14.JMeter定时器
14.1同步定时器
同步定时器: 阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。
位置:测试计划-->线程组-->HTTP请求-->(右键添加)定时器-->Synchronizing Timer
参数介绍:
Number of simulated Users to Group by: 模用户的数量,即指定同时释放的线程数数量。
- 若设置为0,等于设置为线程组中的线程数量
Timeout in milliseconds: 超时时间,即超时多少毫秒后同时释放指定的线程数
- 如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设 置的线程数会一直死等。
- 如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间后还没达到设置的线程数Timer将不再等待,释放已到达的线程,默认为0。
14.2常数吞吐量定时器
作用:让JMeter按指定的吞吐量执行,以每分钟为单位
位置:测试计划-->线程组-->HTTP请求-->(右键添加)定时器--Constant Throughput Timer
参数介绍:
Target throughput (in samples per minute):目标吞吐量。注意这里是每个用户每分钟发送的请求数
14.3固定定时器
位置:测试计划-->线程组-->HTTP请求-->(右键添加)定时器--固定定时器