目录
一、JMeter元件作用域和执行顺序
1. 元件的基本介绍
元件: 多个类似功能组件的容器(类似于类) 。
常见的元件类型有:
1. 取样器
2. 逻辑控制器
3. 前置处理器
4. 后置处理器
5. 断言
6. 定时器
7. 测试片段
8. 配置元件
9. 监听器
组件: 实现独立的某个功能(类似于方法)
2. 元件作用域
在JMeter中, 元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的。
提示: 核心是取样器, 其他组件都是以取样器为核心运行的, 组件添加的位置不同, 生效的取样器也不同。
作用域的原则1. 取样器: 元件不和其他元件相互作用, 因此不存在作用域的问题;
2. 逻辑控制器: 元件只对其子节点中的取样器和逻辑控制器作用;
3. 其他六大元件: 除取样器和逻辑控制器元件外, 如果是某个取样器的子节点, 则该元件对其父子节点起作用;
4. 如果其父节点不是取样器, 则其作用域是该元件父节点下的其他所有后代节点(包括子节点, 子节点的子节点等) ;
3. 元件执行顺序
1. 配置元件(config elements)
2. 前置处理程序(Per-processors)
3. 定时器(timers)
4. 取样器(Sampler)
5. 后置处理程序(Post-processors)
6. 断言(Assertions)
7. 监听器(Listeners)
提示:
1. 前置处理器、 后置处理器、 断言等元件功能对取样器起作用(如果在它们的作用域内没有任何取样器, 则不会被执行)
2. 如果在同一作用域范围内有多个同一类型的元件, 则这些元件按照它们在测试计划中的上下顺序依次执行
二、JMeter使用示例
1. JMeter第一个案例
需求: 使用JMeter访问百度首页接口, 并查看请求和响应信息
操作步骤
1. 启动JMeter
2. 在‘测试计划’下添加‘线程组’
3. 在‘线程组’下添加‘HTTP请求’取样器
4. 填写‘HTTP请求’的相关请求数据
5. 在‘线程组’下添加‘察看结果树’监听器
6. 点击‘启动’按钮运行, 并查看结果
2. 重点组件
- 线程组
- HTTP取样器
- 察看结果树
提示: 无论哪个案例基本都需要以上三个组件
2.1 线程组
说明: 线程组是控制JMeter将用于执行测试的线程数, 也可以把一个线程理解为一个测试用户。
位置: 右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组
特点:
- 模拟多人操作
- 线程组可以添加多个, 多个线程组可以并行或串行
- 取样器(请求) 和逻辑控制器必须依赖线程组才能使用
- 线程组下可以添加其他元件下组件
分类:
- 线程组
- 普通的、 常用的线程组, 可以看做一个虚拟用户组, 线程组中的每一个线程都可以理解为一个虚拟用户
- setUp线程组
- 一种特殊类型的线程组, 可用于执行预测试操作
- tearDown线程组
- 一种特殊类型的线程组, 可用于执行测试后工作
参数:
取样器错误后要执行的动作:
- 继续: 如果取样器里的执行出现错误失败的时候, 请求不会停止, 继续执行。
- 启动下一进程循环: 忽略错误, 线程当前循环错误, 执行下一个循环。
- 停止线程: 只限当前线程停止, 不影响其他线程执行
- 停止测试: 当前执行的线程全部执行完毕后结束
- 立即停止测试: 立刻停止
线程属性:
线程数: 虚拟用户数
Ramp-Up时间(秒): 启动全部虚拟用户数所需要的时间
循环次数: 指定次数或勾选永远
延迟创建线程直到需要: 测试开始的时候, 所有线程就被创建完。 勾选了此选项, 那么线程只会在合适的需要用到的时候创建.
调度器: 勾选后, 调度器配置才能使用;
2.2 HTTP请求
位置: 选中线程组->右键->添加->取样器->HTTP请求
作用: 向服务器发送http及https请求
参数详解:
- 协议: 向目标服务器发送HTTP请求时的协议, 可以是http或者是https , 默认值为http 。
- 服务器名称或IP : HTTP请求发送的目标服务器名称或IP地址。
- 端口号: 目标服务器的端口号, 默认值为80 。
- 方法: 发送HTTP请求的方法, 可用方法包括GET、 POST、 HEAD、 PUT、 OPTIONS、 TRACE、 DELETE等。
- 路径: 目标URL路径(不包括服务器地址和端口)
- Content encoding : 内容的编码方式, 默认值为iso8859
- 同请求一起发送参数: GET请求时url中附带参数可以通过此方式添加
- 消息体数据: POST/PUT请求JSON数据存放地
2.3 查看结果树
位置: 选中测试计划/线程组->右键->添加->监听器->察看结果树
作用: 查看请求请求和响应结果
参数详解:
- 取样结果: 查看响应信息头信息、 响应状态码
- 请求: 查看请求相关信息(url、 方法、 参数)
- 响应: 查看响应信息
三、JMeter参数化
思考: 如果循环访问某一请求10次, 要求每次请求发送不同的参数值, 该怎么做?
使用参数的方式来替代脚本中的固定的测试数据
1. JMeter参数化常用方式
- 用户定义的变量(最基础)
- 用户参数 (所有测试数据都是固定的情况下)
- CSV Data Set Config (灵活,业务测试常用)
- 函数 (灵活,业务测试常用)
2. 用户定义的变量
添加方式: 测试计划 --> 线程组--> 配置元件 --> 用户定义的变量
什么时候使用?
定义全局变量
2.1 场景
- 请求: https://www.baidu.com:443
- 要求: 使用用户定义的变量配置被测系统的协议、 域名和端口
2.2 操作步骤
1.添加线程组
2.添加用户定义的变量
3.添加HTTP请求
4.添加查看结果树用户定义的变量
HTTP请求设置
3. 用户参数
添加方式: 测试计划 --> 线程组--> 前置处理器 --> 用户参数
什么时候使用?
针对同一组参数,当不同的用户来访问时,可以获取到不同的值
3.1 场景
- 请求: https://www.baidu.com
- 要求: 第一次请求附带参数: name="张三"&age=28;第二次请求附带参数: name="李四"&age=30
3.2 操作步骤
1.添加线程组
2.添加用户参数
3.添加HTTP请求
4.添加查看结果树
线程组设置
线程数设置: 2用户参数设置
HTTP请求设置
参数化格式: ${参数名}运行结果
4. CSV 数据文件设置
添加方式: 测试计划 --> 线程组--> 配置元件 --> CSV 数据文件设置
什么时候使用?
当不同的用户,或者同一个用户多次循环时,可以获取到不同的值
4.1 场景
- 请求: https://www.baidu.com
- 要求: 循环3次,每次请求时附带参数username,password,code的值不相同
操作步骤
1.定义CSV数据文件
2.添加线程组
3.添加CSV 数据文件设置
4.添加HTTP请求
5.添加查看结果树
定义CSV数据文件
线程组设置
CSV 数据文件设置
HTTP请求设置
4.2 参数详解(CSV 数据文件设置)
- 文件名: CSV文件路径
- 文件编码: 文件编译字符编码, 一般设置UTF-8
- 变量名称: 多个变量时, 使用英文逗号分隔
- 忽略首行: True为忽略, False为不忽略, 默认值: False
- 分隔符: 如文件中使用的是逗号分隔, 则填写逗号; 如使用的是制表符, 则填写\t;
- 是否允许带引号: CSV文件中的内容是否允许带引号
- 遇到文件结束符再次循环: 当读取文件到结尾时, 是否再从头读取文件, False=当读取文件到结尾时, 停止读取文件
- 遇到文件结束符停止线程: 当“遇到文件结束符再次循环”一项为False时起效; True:当读取文件到结尾时, 停止进程
- 线程共享模式: 共享模式一般默认即可
- 所有线程: 该文件在所有线程之间共享, 所有线程循环取值, 线程一取第一行, 线程二取下一行
- 当前线程组: 各个线程组分别循环取值
- 当前线程: 每个文件分别为每个线程打开
5. 函数(counter)
计数函数, 一般做执行次数统计使用;
位置: 在菜单中选择--> 工具--> 函数助手对话框什么时候使用?
自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
5.1 函数助手
参数设置
- TRUE, 每个用户有自己的计数器; FALSE, 使用全局计数器
- Name of variable in which to store the result (optional):用于存储结果的变量名(可选)
- 生成-复制
5.2 参数化调用
5.3 运行结果
6. CSV和用户定义的变量作用域问题
CSV的作用域是针对线程的, 只有两种情况:
- 对所有线程组中的线程生效
- 父节点是测试计划, 并且线程共享模式是“所有线程”时, 对所有线程组中的线程生效
- 对当前线程组中的线程生效
- 父节点是某个线程组时, 只会对当前线程组生效
用户定义的变量作用域针对的是测试计划
无论用户定义的变量组件放在哪里, 他都会针对整个测试计划生效