软件测试---接口测试

接⼝测试理论

概念

  • 接⼝:系统之间(外部系统与内部系统,内部系统与内部系统)数据交通的通道。
    在这里插入图片描述

  • 接⼝测试:校验 接⼝回发的 响应数据 与 预期结果 是否⼀致。

价值

  • 可以发现⻚⾯测试发现不了的问题
  • 符合 质量控制前移理念
  • 低成本,⾼收益!

实现⽅式

  • ⼯具:
    • postman:使⽤简单,上⼿难度低。功能较少。
    • jmeter:使⽤难度较⼤。上⼿难度⼤。功能⻬全。
  • 代码:
    • Python + requests + Unittest
    • java + HttpClient

接口的组成

URL(接口地址)、method(接口类型:get/POST)、code(状态码)、headers(请求头)、data(接口发送的数据)、response(返回数据)

在这里插入图片描述

URL格式

语法格式:协议 😕/ IP地址:端⼝号/资源路径?查询参数

  • 协议:
    • http、https。 作⽤:指定数据传输规则
  • IP地址:
    • 也就是 域名。 作⽤:在⽹络环境中,唯⼀定位 ⼀台主机
  • 端⼝号:
    • 作⽤:在 主机上,唯⼀定义个应⽤程序。
    • 可以省略。如果省略,跟随协议。 http - 80 。 Https - 443
  • 资源路径:
    • 作⽤:应⽤对应的数据资源。
    • 可以省略。如果省略,资源路径为 “/”
  • 查询参数:
    • 作⽤:给资源传递参数
    • 可以省略。如果省略,没有 ?分割符。
    • 可以有多组。每组 k=v 格式。各组之间 ⽤ “&” 隔分。

HTTP请求(f12)

在这里插入图片描述
在这里插入图片描述

HTTP响应(f12)

在这里插入图片描述

接⼝规范

传统⻛格接⼝

接⼝统⼀采⽤ get/post 实现 所有操作。
URL 与 资源不是 ⼀⼀对应的。在 URL 中查看出,是何种操作
状态码统⼀ 返回 200
在这里插入图片描述

RESTful⻛格接⼝

接⼝使⽤的⽅法,与 http协议的 请求⽅法,⼀⼀对应。
get - 查、post - 增、put - 改、delete - 删
URL 与 资源 ⼀⼀对应!不能从 URL 中,看出 是 何种操作。 需要通过 结合 请求⽅法 来识别何种操作。
响应状态码 使⽤较为全⾯。
在这里插入图片描述

⼩结

  • 传统⻛格接⼝:只⽤ get、post⽅法。 URL 不唯⼀。 统⼀返回 200
  • RESTful⻛格接⼝:URL 唯⼀,定位资源。结合 请求⽅法对应不同操作。 返回状态码 较灵活。
    在这里插入图片描述

接⼝测试流程

  1. 需求分析(产品经理的需求⽂档)
  2. 接⼝⽂档解析(开发编写的 接⼝API⽂档)
  3. 设计 接⼝测试⽤例(编写 Excel 表格形式的⽤例)
  4. 准备接⼝测试脚本
    • postman ⼯具 ⽣成脚本
    • python 代码 编写脚本
  1. 执⾏测试⽤例,跟踪缺陷
  2. ⽣成 接⼝测试报告
  3. 接⼝⾃动化持续集成(可选)

在这里插入图片描述

接口文档解析

  • 为什么要解析
    通过分析接⼝⽂档,熟悉接⼝信息。
    通过接⼝⽂档获取,接⼝测试所使⽤的 请求数据、预期结果。
  • 解析的核⼼⽬标
  1. 请求报⽂关键数据
    请求⽅法、URL、请求数据(请求头、请求体)
  2. 响应报⽂关键数据
    响应状态码、响应数据(响应体)
    在这里插入图片描述

接口用例设计

接⼝测试的测试点

也叫 接⼝测试维度。
在这里插入图片描述

功能测试
  • 单接⼝功能测试:
    ⼀个单独的业务,就对⼀个独⽴的接⼝。如:登录业务,对应登录接⼝。
  • 业务场景功能测试:
    多个接⼝被连续调⽤。(模拟⽤户的实际使⽤场景)
性能测试
  • 响应时⻓:从发送请求到接收到服务器回发响应包所经历的时间。
  • 错误率:服务器运⾏出错的概率
  • 吞吐量:服务器单位时间内,处理请求的数量。
  • 服务器资源利⽤率:cpu、内存、⽹络、磁盘等 硬件资源的占⽤率。
安全测试
  • 攻击安全:⽊⻢、病毒…
    由具备专业安全技术,会使⽤专业安全测试⼯具的 安全测试⼯程师 负责。
  • 业务安全:
    必须登录,才能访问 ⽤户数据。
    敏感数据加密存储。
    SQL注⼊

接⼝⽤例设计⽅法

单接⼝测试

⼀个单独的业务,就对⼀个独⽴的接⼝。如:登录业务,对应登录接⼝。注册业务,对应注册接⼝。⽀付业务,对
应⽀付接⼝。

  • 正向:
    • 必选 参数。 所有必选项,给正确数据
    • 组合 参数。 所有必选 + 任意可选,给正确数据。
    • 全部 参数。 所有必选 + 所有可选。给正确数据。
  • 反向:
    • 功能异常:数据格式正确,不能履⾏接⼝功能。
    • 数据异常:数据格式不正确(空值、特殊字符、汉字、字⺟、⻓度、范围 ---- 等价类、边界值)
    • 参数异常:
      • 多参:多出 必选参数
      • 少参:缺少 必选参数
      • ⽆参:没有 指定参数
      • 错误参数:参数名 错误。

在这里插入图片描述

  • 单接口用例设计示例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
业务场景测试

⼀定在 单接⼝ 测试 之后!

  • 尽量模拟⽤户实际使⽤场景。
  • 尽量⽤最少的⽤例,覆盖最多的接⼝请求。
  • ⼀般情况下,覆盖正向测试即可。
  • 业务场景测试⽤例示例
    指导思想:模拟⽤户实际使⽤,⽤较少的测试⽤例,覆盖更多接⼝,测试正向即可。
    登录 - 添加员⼯ - 查询员⼯ - 修改员⼯ - 删除员⼯ - 查询员⼯列表
    在这里插入图片描述

接口的操作

1. 参数化

简介

  • 什么是参数化:
  • 将 测试数据,组织到 数据文件中,通过脚本的反复迭代,使用不同的数据,达到测试不同用例的目标。
  • 应用场景:
    一般在测试同一个接口的不同 测试点时,只有测试数据不同。考虑使用 参数化。

数据文件简介

CSV:

  • 优点:数据组织格式简单
  • 缺点:
  1. 不能测试 bool 类型。因为 postman 读取 csv后,将所有非数值类型数据,自动添加 ”“ 变为字符串"
  2. 不能存储复杂数据类型(元组、列表、字典)。
  3. 不能实现 参数测试。
  • 应用场景:数据量较大,数据组织格式简单。

在这里插入图片描述
JSON:

  • 优点:
  1. 可以测试 bool类型
  2. 能使用 复杂数据类型
  3. 可以实现 参数测试。
  • 缺点:相同数据量,json文件要远大于 csv 文件。
  • 应用场景:数据量较少,数据组织格式复杂。需要进行 参数测试!

在这里插入图片描述

案例

需求:批量查询 手机号 所属运营商,校验运营商数据正确性
接口:http://cx.shouji.360.cn/phonearea.php?number=13012345678
测试数据:
手机号:13012345678 运营商: 联通 手机号: 13800001111 运营商: 移动 手机号: 18966778899 运营商: 电 信

步骤

编写数据文件
方法1:CSV文件(直接新建)
在这里插入图片描述
方法2:json文件(使用AI直接生成)
在这里插入图片描述
读取数据文件数据
根据 使用位置 不同,有两种方法。

  • 第一种:请求参数(请求行、请求头、请求体)中,使用 数据文件中 的数据
    csv文件:{{字段名}}; json文件:{{键名}}

  • 第二种:代码(Tests)中,使用 数据文件中 的数据
    使用 postman 内置的 关键字 data,索引 字段名 或 键名
    csv文件:data.字段名; json文件:data.键名

  • 方法1:postman接口测试参数化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 方法2:下面使用apifox接口测试参数化实现案例
    1.准备接口信息
    在这里插入图片描述
    2、添加后置操作-断言:
    在这里插入图片描述

3、自动化测试添加测试场景
在这里插入图片描述
4、新建测试数据,将csv文件导入进apifox
在这里插入图片描述
在这里插入图片描述
5、执行测试用例,启用测试数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.变量(全局变量、局部变量)

  • 全局变量:在 整个postman中都可以使用的变量。不需要 单独创建环境。
  • 环境变量:在 特定的环境下,才能使用的变量。需要给此变量创建单独的环境。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.自定义脚本

4.接口的关联

简介

当接口和接口之间,有依赖关系时,需要借助 postman或apifox 关联技术,来实现。
如: 登录接口 返回的 令牌数据,被 添加员工接口依赖。
添加员工接口 返回 员工id,被 查询员工接口依赖。

实现步骤

假定:接口B 产生的数据,被 接口A 依赖。

  1. 发送 接口B 请求,获取响应数据。
  2. 将 响应数据,放入公共容器(全局变量、环境变量)中
  3. 接口A 从 公共容器中,提取数据,发送请求。
    在这里插入图片描述

核心代码

// 1. 获取 响应数据,转为 json格式,保存到变量 jsonData中。
var jsonData = pm.response.json()
// 2.1 使用 全局变量做容器。
pm.globals.set("全局变量名", 全局变量值)
// 2.2 使用 环境变量做容器。
pm.environment.set("环境变量名", 环境变量值)
// 3. 在 postman 界面中(URL、请求头headers、请求体body) 提取 全局、环境变量 数据。
{{全局变量名}}/{{环境变量名}}

案例

  1. 使用 postman或apifox关联,实现下面案例

从获取天气接口,http://www.weather.com.cn/data/sk/101010100.html
获取返回结果中的城市名称
调用百度搜索接口: http://suggestion.baidu.com/su?wd=北京 ,把获取到的城市名称,如:北京,作为请求参数

思路:

  1. 发送 获取天气请求,获取响应结果
  2. 从响应结果中,拿到城市名,存入 全局变量
  3. 百度搜索接口从 全局变量中,取城市名,发送搜索请求。
    代码:
// 1. 获取响应结果
var jsonData = pm.response.json()
// 2. 从响应结果中,提取 城市名
var city = jsonData.weatherinfo.city
// 3. 将城市名保存到 全局变量
pm.globals.set("glb_city", city)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.断言–自动判断是否成功

断言简介

  • 使用Postman或者apifox工具 代替 人工 自动判断 预期结果 和 实际结果 是否一致
  • postman工具断言代码 书写在 Tests 标签页中。 查看断言结果 Test Results 标签页;apifox在后置脚本,自定义脚本书写代码

常用断言

1. 断言响应状态码
Status code:Code is 200

// 断言响应状态码为 200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm:postman的实例。
test() postman实例的测试方法。 这个方法 有 2 个参数。
参1:"Status code is 200"。 这个参数可以任意修改,不影响 断言。
作用:在断言结束后,显示给用户,断言结果的提示文字。
参2:是一个 匿名函数 调用。
pm.response.to.have.status(200); 的意思是:
postman的响应结果中,应该有 响应状态码 200。 ———— 这里的 200 是 预期结果。

在这里插入图片描述
2. 断言包含某字符串
Response body: Contains string

pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
pm:postman的实例。
test() postman实例的测试方法。 这个方法 有 2 个参数。
参1:"Body matches string"。 这个参数可以任意修改,不影响 断言。
作用:在断言结束后,显示给用户,断言结果的提示文字。
参2:是一个 匿名函数 调用。
pm.expect(pm.response.text()).to.include("string_you_want_to_search"); 的意思是:
postman 期望 响应文本中,应该包含 “你想搜索的字符串”(预期结果)

在这里插入图片描述
3. 断言JSON数据
Response body: JSON value Check

pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
pm:postman的实例。
test() postman实例的测试方法。 这个方法 有 2 个参数。
参1:"Body matches string"。 这个参数可以任意修改,不影响 断言。
作用:在断言结束后,显示给用户,断言结果的提示文字。
参2:是一个 匿名函数 调用。
var jsonData = pm.response.json(); 将 整个 json响应体 赋值到 变量 jsonData 上。
pm.expect(jsonData.value).to.eql(100); postman 期望 json结果中 指定key 的值为 xxx
value 能取值:success、code、message

在这里插入图片描述

抓包

工具

  • fiddler:HTTP、HTTPS
  • network
  • wireshark:其他协议

作用

  • 定位bug

判断是否调用接口:如果没有调用接口,那就是前端的bug;如果有,则看接口的状态码(200–前端发送了错误的数据,所以后端没有返回想要的结果,前端的bug、404–八成是写错了请求URL、500–后端的bug)

接口测试的注意事项

  1. 需要根据具体的需求去设计接口的测试用例
  2. 对于会写入数据库的数据,需要去数据库里看是否正常写入了
  3. 对查询类的接口,需要去数据库里看,数据是否一致
  4. 必须要熟悉整个系统的需求以及数据库
  5. 除了独立的每个接口的测试,我们还需要对存在业务逻辑上下关联的接口进行流程测试
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值