jmeter直连数据库及断言,关联
- jmeter直连数据库步骤
- jmeter断言
- jmeter逻辑控制器
- if控制器
- ForEach控制器
- 循环控制器
- Jmeter关联
- Jmeter关联XPath提取器
- Jmeter关联正则表达式提取器
- 二者比较
- 跨线程组关联
- 每日复习
jmeter直连数据库
概念
这不叫直连:Jmeter -> java/python 提供的接口 -> 访问数据库
这才叫直连:Jmeter -> 直接访问数据库
作用:获取数据 (用于判断结果(断言))
实现
第一步:直连数据库, 获取所有 area_name 区域名称的值
第二步:取出第一个值, 并在百度上进行搜索
jmeter直连数据库步骤
1 编写脚本 并 导入第三方包因为 jmeter不具备连接数据库的能力
2 配置数据库连接信息
添加配置元件 -> JDBC Connection Configuration 配置数据库的连接信息
连接名称 mysql
dbc:mysql://localhost:3306/test
driver: 选择 com.mysql.jdbc.Driver
登录名: root
登录密码: 123456
接受多个值
3 向数据库发送 sql 语句 并接受响应结果
线程组右键添加 -> 取样器 -> JDBC Request
选择 连接名称
输入sql语句
输入接收的变量名
4 处理接收到的响应结果 (如, 在百度上搜索)
注意:非浏览器访问百度会进行拦截,我们需要获取百度端口ID输入cookie的值中
jmeter断言
概念:程序驱动代替人工驱动, 判断响应结果是否符合预期
分类
1.响应断言 判断状态码和响应体
2.大小断言 判断相应内容的字节长度是否符合预期
作用 高效 安全
实现: 需求 直连数据库,获取 相应内容中包含脚本中的测试文本内容
jmeter逻辑控制器
应用场景
比如要下订单, 需要先登录:
- 登录成功, 则可以继续下订单
- 登录失败, 则不能下订单
if 登录接口, 执行结果为 成功:执行下订单请求的接口, 预期下订单成功
else:执行再次登录的接口, 预期结果为登录成功
此时, 就需要通过逻辑控制器实现
概念
控制接口(取样器)执行顺序的组件
- 顺序执行
- 分支执行 == if 语句 == 如果(if)控制器
- 循环执行 == for/ while 语句 == ForEach控制器 / 循环控制器
作用
控制执行逻辑
if控制器
步骤
- 搭框架: 测试计划/ 线程组/ 查看结果数/ 添加一个用户定义的变量
- 核心: 以分支方式控制取样器的执行(逻辑控制器和取样器是父子级关系)
- 运行并查看结果
设置if条件
ForEach控制器
步骤
-
搭框架: 测试计划/ 线程组/ 查看结果数/ 添加一个用户定义的变量
-
核心: 以循环的方式控制取样器的执行(逻辑控制器和取样器是父子级关系)
-
运行并查看结果
定义用户值
设置输出变量
在http请求中设置请求参数
循环控制器
步骤
-
搭框架: 测试计划/ 线程组/ 查看结果数
-
核心: 以循环的方式控制取样器的执行(逻辑控制器和取样器是父子级关系)
-
运行并查看结果
线程组和循环控制器的循环控制的区别
二者作用域不同, 相对来说循环控制器更灵活一点,线程组循环代表外循环,循环控制器为内部请求循环
Jmeter关联
应用场景: 测试考试交卷的接口, 需要学生先登录, 再进行交卷操作
概念:上一个请求的响应结果作为下一个请求的参数
作用:在接口测试中所涉及的不同接口间传递数据
需求 访问京东(请求A), 提取页面源码中的 title 标签的值, 传递给百度搜索(请求B)
Jmeter关联XPath提取器
步骤
- 搭框架
- 从响应结果中提取
- 右键 http请求 -> 添加 -> 后置处理器 -> XPath提取器
- 调用提取到的数据, ${变量名}
Jmeter关联正则表达式提取器
步骤
- 搭框架
- 从响应结果中提取
- 右键 http请求 -> 添加 -> 后置处理器 -> 正则表达式提取器
- 调用提取到的数据, ${变量名}
扩展
正则表达式(通过特殊符号来指定一定的匹配规则)
(.*?) 一般来说,使用这个规则可以解决大部分问题
() 表示截取区间
. 表示任意字符
* 表示出现任意次
.* 表示任意字符串
? 表示截取到第一个结束标记
二者比较
相同点
- 二者实现流程一致
- 都可以从响应结果提取数据
不同点
- XPath提取器 只能从标签文档(如, html 或 xml)提取数据, 一般文本数据无法使用
- 正则表达式提取器 既适用于标签文档又适用于一般文本文档, 作用范围更广
推荐大家重点掌握正则表达式提取器
跨线程组关联
需求
在前一个需求的基础上, 把请求A和B放到不同的线程组中, 并且设置了线程的执行顺序, 先A后B, 但是关联失败, 通过跨线组关联让它关联成功
原因: 变量作用域不对
解决: 将局部变量转换成全局变量
步骤
- 搭框架
- 把局部变量转换成全局变量
- 建立局部变量和全局变量的对应关系 (通过函数 __setProperty)
- 导出为全局变量 (通过 Bean Shell 取样器)
- 调用全局变量 (通过 __Property)
建立局部变量和全局变量的对应关系
放入BeanShell取样器,导出为全局变量
调用全局变量,放入http请求中使用
每日复习
Jmeter断言的概念是什么?
Jmeter最常用的断言类型是什么?