从零开始的软件测试学习之旅(九)jmeter直连数据库及jmeter断言,关联

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控制器

步骤

  1. 搭框架: 测试计划/ 线程组/ 查看结果数/ 添加一个用户定义的变量
  2. 核心: 以分支方式控制取样器的执行(逻辑控制器和取样器是父子级关系)
  3. 运行并查看结果

设置if条件

ForEach控制器

步骤

  1. 搭框架: 测试计划/ 线程组/ 查看结果数/ 添加一个用户定义的变量

  2. 核心: 以循环的方式控制取样器的执行(逻辑控制器和取样器是父子级关系)

  3. 运行并查看结果

    定义用户值

设置输出变量

在http请求中设置请求参数

循环控制器

步骤

  1. 搭框架: 测试计划/ 线程组/ 查看结果数

  2. 核心: 以循环的方式控制取样器的执行(逻辑控制器和取样器是父子级关系)

  3. 运行并查看结果

线程组和循环控制器的循环控制的区别

二者作用域不同, 相对来说循环控制器更灵活一点,线程组循环代表外循环,循环控制器为内部请求循环

Jmeter关联

应用场景: 测试考试交卷的接口, 需要学生先登录, 再进行交卷操作

概念:上一个请求的响应结果作为下一个请求的参数

作用:在接口测试中所涉及的不同接口间传递数据

需求 访问京东(请求A), 提取页面源码中的 title 标签的值, 传递给百度搜索(请求B)

Jmeter关联XPath提取器

步骤

  1. 搭框架
  2. 从响应结果中提取
    • 右键 http请求 -> 添加 -> 后置处理器 -> XPath提取器
  3. 调用提取到的数据, ${变量名}

Jmeter关联正则表达式提取器

步骤

  1. 搭框架
  2. 从响应结果中提取
    • 右键 http请求 -> 添加 -> 后置处理器 -> 正则表达式提取器
  3. 调用提取到的数据, ${变量名}


扩展

正则表达式(通过特殊符号来指定一定的匹配规则)

(.*?)  一般来说,使用这个规则可以解决大部分问题
() 表示截取区间
.  表示任意字符
*  表示出现任意次
.* 表示任意字符串
?  表示截取到第一个结束标记

二者比较

相同点

  • 二者实现流程一致
  • 都可以从响应结果提取数据

不同点

  • XPath提取器 只能从标签文档(如, html 或 xml)提取数据, 一般文本数据无法使用
  • 正则表达式提取器 既适用于标签文档又适用于一般文本文档, 作用范围更广

推荐大家重点掌握正则表达式提取器

跨线程组关联

需求

在前一个需求的基础上, 把请求A和B放到不同的线程组中, 并且设置了线程的执行顺序, 先A后B, 但是关联失败, 通过跨线组关联让它关联成功

原因: 变量作用域不对

解决: 将局部变量转换成全局变量

步骤

  1. 搭框架
  2. 把局部变量转换成全局变量
    1. 建立局部变量和全局变量的对应关系 (通过函数 __setProperty)
    2. 导出为全局变量 (通过 Bean Shell 取样器)
  3. 调用全局变量 (通过 __Property)

建立局部变量和全局变量的对应关系

放入BeanShell取样器,导出为全局变量

调用全局变量,放入http请求中使用


每日复习

Jmeter断言的概念是什么?

Jmeter最常用的断言类型是什么?

相关推荐
武子康5 分钟前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
使者大牙14 分钟前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
小钱c716 分钟前
Mac下安装Apache JMeter并启动
jmeter·macos·apache
桀桀桀桀桀桀25 分钟前
数据库中的用户管理和权限管理
数据库·mysql
As977_36 分钟前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi39 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking40 分钟前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
dsywws1 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然04021 小时前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法