接口测试:Jmeter工具核心
目录
参数化
为什么要参数化?
键所对应的值都是写死的,只能手动更改,无法解决新增大数量(1000条)的问题
什么是参数化?
根据需求动态获取数据并进行赋值的过程
常用方式
CSV Data Set Config
简介
一种从外部读取数据功能的组件
实施方案分析
- 基于测试计划->线程组
- 基于线程组->配置元件->CSV Data Set Config
- 基于线程组->Sampler->HTTP请求
- 基于测试计划->HTTP信息头管理器
- 基于测试计划->监听器->察看结果树
组件要点分析
- 线程组:循环次数10
- CSV Data Set Config 读取变量配置
- HTTP请求:Body Data填写(JSON报文) 方法(POST)
- 参数化引用格式:${参数名} 如:${dep_id}
- HTTP信息头管理器:Content-Type:application/json;charset=utf-8
CSV Data Set Config 参数配置
- Filename:文件路径+文件名+后缀名 如:d:/a.txt;
- File Encoding:文件编译字符编码,一般设置utf-8;
- Vaiable Names:读取参数后保存的变量名称;
- Delimiter:如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;
HTTP信息头管理器
作用
告诉服务器请求的数据格式
用户参数
简介
一种参数设置方式,用户可设置参数名称以及参数值
解决方案实施分析
- 位置:测试计划–>线程组–>前置处理器–>用户参数
- 其他组件和CSV Data Set Config相同,去除 CSV Data Set Config组件
组件要点分析
- 线程组:注意是【线程数】为10
- 用户参数,参数格式:可以是数字、字母、下划线开头,建议最好是实义单词
- HTTP请求:Body Data填写(JSON报文) 方法(POST)
- 参数化引用格式:${参数名} 如:${dep_id}
- HTTP信息头管理器:Content-Type:application/json;charset=utf-8
用户参数
- 添加变量
- 添加用户
用户定义的变量
简介
用户可根据需求自定义相应的变量,一般做全局变量使用。
分析
通过概念我们知道,【用户定义的变量】一般做全局变量使用,不适合参数需求量大时的选择,所以在这里我们不在使用,用户定义的变量去做新增时的解决方案,主要讲解下它做参数化时的使用步骤和方式
需求场景
- 查询-指定:url地址
- 接口查询指定的id(T02)采用参数动态获取方式
解决方案分析
- 参数化组件:用户定义的变量 (测试计划->线程组->配置元件->用户定义的变量)
- 线程组
- 请求组件:HTTP请求
- 查看结果组件:察看结果树
函数
简介
完成某个指定功能代码的封装。
- 函数查找方式:函数助手对话框 1) 菜单-选项->函数助手对话框 2) Ctrl+Shift+F1 3) 工具栏倒数第二个记事本图标
- 函数在Jmeter中有非常多类型(计数函数、日期函数、随机函数…)
需求:
- 查询-所有url地址
- 查询10次,在每次请求地址后面增加访问记录数
需求关键点分析
- 起个计数参数名 如:num
- 把计数参数名的值给参数化
- 参数化的值使用计数函数(count)
实施方案
- 基于测试计划添加线程组(循环次数10)
- 基于线程组添加HTTP请求
- 基于测试计划添加察看结果树
函数配置图
- 选择一个功能:选择_counter计数函数
- 第一个参数:TRUE,每个用户有自己的计数器;FALSE,使用全局计数器 我们选FALSE
- 点击生成
- 选择复制生成的函数
参数化方式总结
区别
- CSV Data Set Config: 功能强大、适应各种迭代及多参复杂场景。
- 用户参数:适应传递少量参数时使用
- 用户定义的变量:和用户参数使用场景相似,不同在于一般做全局变量使用
- 函数:功能强大,函数类型繁多,灵活度大,适应各种应用场景。
推荐
- CSV Data Set Config
- 函数
关联
需求
- 对http://www.baidu.com进行2次访问;
- 第一次获取title值,第二次把获取的值作为参数名(title)的参数值附加请求中。
问题
- 如何从第一次请求获取的响应数据中提取title值?
- 解决这种需求场景在测试领域中叫什么?
什么是关联?
概念:从上一条请求中获取数据,使用在下一条请求中的过程。
Jmeter关联中常用的两种方式
- 正则表达式提取器
- XPath Extractor
正则表达式提取器
概念
根据需求定制规则,返回匹配规则的数据的一种组件
实施方案分析
- 测试计划->线程组
- 线程组->HTTP请求(获取title)
- 获取title->后置处理器->正则表示式提取器
- 线程组->HTTP请求(使用title)
- 测试计划->察看结果树
技术难点分析
正则表达式
. XPath Extractor
概念
一种可被用来提取页面给定内容的组件,主要采用的方式为XPath路径
解决方案分析
- 测试计划->线程组
- 线程组->HTTP请求(获取title)
- 获取title->后置处理器->XPath Extractor
- 线程组->HTTP请求(使用title)
- 测试计划->察看结果树
实施难点分析
XPath 路径
总结:
区别
- 正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配;
- XPath Extractor则可以提取返回页面任意元素的任意属性,如//a[@href="http://tieba.baidu.com”]/@name;
选择
- 如果需要提取的文本是页面上某元素的属性值,建议使用XPath Extractor;
- 如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。
断言
为什么要学习断言?
接口测试原理: 请求:是否正确,默认请求成功是200(GET),如果请求错误也能返回404、500等。 检查:返回数据的正确性与完整性
什么是断言?
概念:断言就是让程序代替人工去判断程序响应数据是否达到预期结果
断言常用方式
- 响应断言
- Size Assertion(Size 断言)
- Duration Assertion (持续时间断言)
响应断言
Jmeter中一种断言组件,可断言响应(信息头内容、主体内容、响应代码)
技术难点分析
- 断言代码
- 断言数据(T02)
断言结果
作用:断言运行成功默认不显示,如果断言失败,记录每次失败原因
Size Assertion(Size 断言)
作用
主要判断返回数据的大小是否属于预期数据大小范围(Response Header、Response Body、响应信息)
技术难点分析
断言响应主题数据大小
断言持续时间
作用:断言服务器响应请求的时间是否小于指定值;
技术难点分析
时间设置
作用域
在jmeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定;
作用域说明
- 取样器(sampler)元件内组件不依赖其他元件就可执行,因此取样器不存在作用问题;
- 逻辑控制器(Logic Controller)元件作用域只对它的子节点有作用;
- 其他作用域默认根据测试计划中树形结构来定;
各元件执行顺序
1.各元件之间的执行顺
- 配置元件(config elements)
- 前置处理程序(Per-processors)
- 定时器(timers)
- 取样器(Sampler)
- 后置处理程序(Post-processors)
- 断言(Assertions)
- 监听器(Listeners)
集合点
作用
集合点用以同步虚拟用户,以便恰好在同一时刻执行任务。
技术难点分析
- 线程数>=20
- 集合点设置
集合点作用域
- 集合点只对一个请求起作用,如果针对指定请求起作用,放到该请求内;
- 集合点对多个个请求起作用,放到与请求平级同一层次;