接口测试
1.0接口测试
API测试、后台测试、app接口测试、web接口测试、SDK测试
2.0分类---方向
- 接口功能测试 ---》手动查看响应码,cookies,请求头
- Postman
- JMeter
- 接口自动化测试 ----》JMeter断言,代码
- Postman + newman(命令行工具)
- JMeter
- Python + requests + pytest +allure
- 接口自动化测试平台
- 接口性能测试 ----》服务器相关指标达成
- JMeter
- LR = LoadRunner
接口类型
- WebService 接口
- SoapUI
- http/https 接口
- JMeter/Postman
传输类型
- 同步类型
- 阻塞调用,适用相应要求不高
- 保证合理时间返回正确的结果,并能正确处理异常情况
- 异步类型
- 通过回调函数,Promise,Future,适用相应要求高
- 验证异步机制的正确性,包括确保回调函数正确被调用,并处理接口调用的并发性和异步结果的处理
3.0接口文档
- 某个接口的部分组成
- 1.接口描述
- 2.请求地址
- 3.请求方法
- 4.请求头
- 5.请求实体/请求参数/入参/request body
- 6.接口成功的返回数据/响应实体/响应内容/request body/出参
- 一般为json格式
- 7 的.接口不同失败情况的不同错误码和失败响应示例
4.0搭建接口测试环境(运维)
4.1接口功能测试流程
- 1.接口文档
- 2.分析接口文档(重点)
- 3.列测试点
- 4.写接口测试用例
- 5.写JMeter脚本
- 6.运行JMeter脚本,并提bug单
- 7.写接口测试报告
5.0.接口功能测试
- .按技术点来列出所有可能情况的接口
- GET
- 不带参数
- 带参
- param
- 提醒:GET 请求不能发送 form/json 格式的请求实体!
- POST/DELETE/PUT请求
- 不带参数
- 带参
- param
- from
- param+from
- json
- 格式
- 上传文件
- 特殊情况处理
- 发送GET/POST/DELETE/PUT时需要带cookies
- 1.利用cookies管理器自动管理
- 2.手动管理cookies
- 通过抓包验证
- 3.(✔)添加请求头
- 发送GET/POST/DELETE/PUT时需要带cookies
- GET
6.0接口自动化测试
线程组+参数化+断言+关联
- 线程组理解
- 一个线程组相当于一个业务
- (默认情况先后执行顺序随机)
- 特殊线程组
- SetUp
- 初始化工作
- tearDown
- 清理垃圾数据
- SetUp
- 演示:
- setup--->普通线程组--->teardown
- 属性
- 调度器--->
- 负载测试
- 组件
- 用户定义的变量
- 单个$
- 数组data
- data_1="张三"
- data_2=“李四”
- 用户定义的变量
- forEach控制器
6.1参数化
动态的获取测试数据的过程
- 实现方式
- 1.CSV Data Set Config(推荐,数据量少)
- 2.用户参数
- 3.用户定义的变量
- 4.JMeter函数(推荐,数据量多)
6.11CSV Data Set Config
- 1.准备好数据文件(utf-8)
- 2.写HTTP请求
- 3.HTTP请求中添加CSV组件
- 文件名:数据文件绝对路径/相对路径
- 文件编码:给测试数据文件 data.txt 的文件编码。UTF-8
- 变量名列表:自定义的变量名列表。
- 4.设置迭代次数
- 【例】
- 利用 CSV 组件来对新增学院接口来新增 3 个学院。这 3 个学院的信息是从 data.txt 中来的
6.22利用JMeter相关函数
- 1.正常写http请求
- 2.添加CSV组件
- 3.在http请求用动态值替代固定值
- 4.设置迭代次数
7.0JMeter绕开接口直接操作关系型数据库
流程:
- 1.在测试计划上添加相干jar包
- 2.添加连接配置文件
- 指定 DB 的 IP、账号、密码,并且为这些信息取一个连接名
- 后面的 JDBC 取样器中会需要这个连接名
- 3.添加JDBC取样器
- Parameter Values
- JDBC 类型
- 整数类型:Integer
- 字符串类型:varchar
- 浮点数类型:double
- 日期类型:Date
- JDBC 类型
- Parameter Values
- 4.执行sql语句
- 类型
- 查
- 直接Select Statement
- 间接Prepared Select Statement
- 增删改
- 直接Update Statement
- 间接Prepared Update Statement
- 查
- (参数化查询)
- Sql=”select * from t_studen where name=?”
- 类型
示例1:造大量的未加密的测试数据
示例2:造大量的加密数据
示例3:把某接口的响应数据提取出来并写入到 DB中
- json 提取器+循环控制器或计数器(在配置元件中)+jdbc 取样器+V 函数嵌套解析
示例4:jdbc 取样器的查询结果再处理
8.0测试加密接口
- 1.把加密jar包添加到测试计划中
- 开发会给测试:加密 jar 包、示例代码
- 2.写http取样器
- 3.准备测试数据文件
- 4.在http取样器中添加CSV组件
- 5.在http取样器中添加”BeanShell前置处理器“
- 6.在http取样器的固定值替换成动态值
- 7.设置迭代次数
9.0关联技术
- 解决依赖接口问题
实现方案
- 1.Xpath提取器
- 适用于从标签(html | XML)语言提取数据
- 2.正则表达式提取器(推荐)
- json/html
- 响应内容的显示格式用“Text”格式
- 3.json提取器(推荐)
- json格式
- 4.边界提取器
- 说明:这三个提取器本质上就是从某取样器中提取某数据,然后把该数据保存到某个 JMeter线程组变量中
示例
- 方案一:XPATH 提取器来实现关联 //了解
- 1.新增http01
- 2.在http01中新增下xpath提取器
- (可选)验证提取成功与否
- 3.使用线程组变量
- 方案四:边界值提取器 //了解
- 方案二01:JSON提取器来实现关联
- 前提:
- B 接口的响应实体是 json 格式,才可以使用 json 提取器
- 1.添加http01:查询所有学院信息
- 2.在http01中添加json提取器
- (可选)验证提取是否正确
- 3.新增http02
- 前提:
- 方案二02 一个 json 提取器同时提取多个值
- 1.添加http01:
- 查询出所有学院
- 2.在http01中添加json提取器
- [可选]验证线程组变量是否有值
- 3.拼接字符串
- 4.添加控制循环器
- 5.在循环控制器中添加http02
- 1.添加http01:
- 方案三:正则表达式提取器实现关联
10.0动态请求
11.0JMeter断言
00---Tips
-
1.如果一个 http 请求发送失败的可能原因
- 请求方式不对
- 请求地址不对
- 请求实体的格式不对
- 缺少相关的请求头
-
2.与DB相干
- 1.对sql评测
- 2.对DB进行CRUD
- 3.在DB中造大量的测试数据
- 4.从 DB 中获取测试数据,然后把获取到的测试数据交给 http 取样器
-
3.动态值
- $
-
4.JMeter
- Count函数
- Random函数
- 随机int
- RandomString
- RandonDate
- 浮点数
- 整数+点+小数
-
5.线程组先后执行顺序
- 默认随机
-
6.线程组层次——>
- 原则:自动化为了能循环执行,一般都要求不产生任何垃圾数据,即 DB 中、日志文件等都应该是回到原始状态
-
- SetUp线程组/脚本
- 用于初始化工作
- 普通线程组1
- 普通线程组2
- teardown
- 清理垃圾数据
- SetUp线程组/脚本
-
7.用户定义的变量
- 单个变量
- $
- 数组变量: data
- data_1="张三"
- data_2="李四"
- 利用线程组中
- forEach控制器
- 单个变量
-
8.测试数据的来源
- 1.测试数据文件
- 2.通过算法/函数动态生产
- 3.从DB中获取数据
- 用JDBC 取样器把某接口的响应数据提取出来并写入到 DB 中
- 例:直接从 t_user 表查询出用户信息,然后把这些信息传递给 http 取样器
-
9.变量
- JMeter线程组变量
- $
- JMeter全局变量
- 该变量可以在所有线程组中使用
- Java变量
- 使用
- 需要通过这 3 个beanShell 来把 Java 变量的值存储到某个 JMeter 线程组变量中vars.put(“线程组变量名”,Java变量名);
- 使用
- JMeter线程组变量
-
10.调试取样器:
-
看它上面的取样器中保存的线程组变量的值
-
规则
-
${变量名_#}:该线程组变量中保存的值的数量!int
${变量名_N}:该线程组变量中的保存的第 N 个值。N 从 1 开始!
-
-
-
-
11.循环控制器
-
12.Xpath query: 指定提取规则
-
13./json 提取的语法:
-
$:整个响应实体。
- 即整个 json!
-
$.Key: 获取某元素的值!
- 例如:$.count:16
-
$.results[索引]:
-
$.results[0]:
{
"dep_id": "T01",
"dep_name": "Test201 学院",
"slogan": "Slogan201",
"master_name": "Master201"
}
-
$.results[*]:
- 代表所有
-
$.results[0].dep_id:T01
-
$.results[1].dep_id:T01
-
$.results[*].dep_id:T01
-
-
-
- Names of created variables
- 自定义的线程组变量列表,用英文分号分隔
- 这些提取到的值分别自动保存在这些线程组变量中
- JSON Path expressions
- json 提取规则的列表,用英文分号分隔
- Names of created variables
-
- Match No: 匹配数字。Int
-
- N : 提取第 N 个匹配项
-
- 0: 提取随机一个匹配项
-
- -1:提取所有匹配项
-
- 不给值
-
- Match No: 匹配数字。Int
12.接口性能测试
方向
- 1.客户端性能测试
- app
- Web端
- 没必要做
- 2.服务器端性能测试(一般指的是)
- 1.对后端接口进行性能测试
- Jmeter
- 2.对整个后端系统
- LR//LoadRun
- 1.对后端接口进行性能测试
分类
- 1.负载测试
- 2.压力测试
- 3.并发测试
- 4.稳定性测试
步骤
-
1.拿到性能指标/需求文档
-
2.手工熟悉被测项目
- 分析某性能指标
\4. 性能测试计划、测试方案
\5. 搭建性能测试环境
\6. 测试用例、测试数据
\7. 根据该性能指标搭建性能场景 //Jmeter 场景/脚本
\8. 运行性能场景
\9. 分析性能场景的运行结果
如果实际结果达到预期结果(性能指标中的该指标)!
后面步骤不用做啦!
\10. 定位性能瓶颈的原因
\11. 解决性能瓶颈
tips:
-
用户定义的变量
-
foreach请求
-
变量前缀
-
csv文件传输
-
json数据---csv传输
- Content-Type-------------application/json
-
利用函数助手造数据
-
连接数据库
- JDBC Connection Configurantion
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】