Skip to content

接口测试抓包与mock实战

接口测试抓包与 mock

预习准备

  • 提前先预习完以下相关的知识,再开始本章节的学习。
  • 安装 Charles、Postman
专题课 阶段 章节 上课地址
接口测试 L1 接口测试价值与体系 录播地址
接口测试 L1 常见的接口协议
接口测试 L1 接口测试用例设计
接口测试 L1 postman 基础使用
接口测试 L1 【实战】postman 实战练习
接口测试 L2 抓包工具 charles
接口测试 L2 【实战】接口测试实战练习
接口测试 L3 mock 的价值与意义
接口测试 L3 【实战】mock 实战练习

课程目标

  • 掌握常用抓包工具 Charles。
  • 掌握接口手工 mock 技术。
  • 掌握接口测试设计思路与方法。
  • 掌握常用接口测试工具 Postman。
  • L1 接口协议与接口测试
  • L2 常用抓包工具
  • L3 Mock 工具使用
  • L4 Mock 工具与定制化

知识点总览

点击查看:接口测试知识点梳理.xmind

需求说明

产品一:

  • 雪球
    • C 端金融类型产品,国内最火的投资者社区之一。
    • 提供咨询获取、数据查询和交易服务等功能。
    • 其主要业务功能为精华帖、行情咨询查看、股票基金交易。
  • 需求:
    • 完成雪球 Web 产品与 App 产品接口抓包分析。
    • 完成雪球 Mock 测试。

产品二:

  • 企业微信
    • 企业微信是腾讯微信团队打造的企业通讯与办公工具。
    • 具有与微信一致的沟通体验,丰富的 OA 应用,和连接微信生态的能力。
    • 可帮助企业连接内部、连接生态伙伴、连接消费者。专业协作、安全管理、人即服务。
  • 需求:
    • 编写接口测试用例:创建部门。
    • 使用 postman 编写接口测试用例与断言。

实战思路

uml diagram

实战:Charles 工具安装配置

接口抓包需要具备的能力
  • 代理功能:HTTP/HTTPs、SOCKS5。
  • 请求模拟工具:拼装请求、重放请求,重复请求。
  • 网络环境模拟:限速、超时、返回异常。
  • Mock:请求修改、响应修改。
  • Fake:用测试环境替代真实环境。
推荐工具
  • Charles:开发/测试工程师必备。
  • mitmproxy:测试开发工程师必备。
  • ZAP:测试工程师安全测试工具。
  • BurpSuite:黑客必备渗透测试工具。
  • Fiddler:跨平台支持不好,不推荐。
  • Postman:代理功能太弱,不推荐。
Charles 安装配置
课堂练习
  • 完成 Charles 安装。
  • 完成 Charles 基础配置。
  • 完成电脑端证书配置。
  • 完成 mumu 模拟器代理配置与证书配置。

实战:Charles 基础使用

课堂练习
  • 电脑端抓包
    1. 抓取雪球搜索接口数据
    2. 查看接口响应状态码与使用的协议版本
    3. 查看请求参数与 json 格式的响应内容
    4. 快速过滤雪球域名的接口
    5. 进行弱网测试,选择弱网模式为 256 kbps
  • App 抓包
    1. 抓取雪球行情自选设置--股价提醒列表的接口数据
    2. 查看请求参数与 json 格式的响应内容
    3. 进行弱网测试,选择弱网模式为 256 kbps

实战:Charels 完成 Mock 测试

功能 使用场景
Rewrite 动态修改请求和响应中的数据
适用于全局修改或者修改内容简单的场景
Map Local 对响应体进行复杂修改
Map Remote 修改要访问的服务器地址
App 测试中,可以不用重新打包直接修改测试环境
课堂练习
  • 使用雪球行情自选设置--股价提醒列表的接口。
  • Rewrite:
    1. 把列表中第一个股票名称改为自己的名字。
    2. 把列表中第二个股票的代码改为 hogwarts。
  • Map Local:
    1. 把列表中第一个股票名称改为自己的名字。
    2. 把列表中第二个股票的代码改为 hogwarts。
    3. 把列表中第三支股票的 type 改为 30。

实战:接口测试用例设计

接口文档分析
请求方式:GET/POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
请求包体:
...
参数说明:
...
权限说明:
...
返回结果:
...
参数说明:
...
  1. 开发前必读
    • 介绍了接口文档阅读的方法
    • 介绍了接口的要求:所有的接口需使用 HTTPS 协议、JSON 数据格式、UTF8 编码
    • 全局错误码入口:https://work.weixin.qq.com/api/doc/90000/90139/90313
    • 接口调用流程:所有的业务接口调用之前必须先获取 access_token,这是 token 就相当于是我们的身份证,决定了我们所拥有的权限,获取到了这个 token 值,我们才有权限通过接口调用的方式对我们的企业微信进行操作。
    • 开发者工具:错误码查询工具,通过这个工具我们可以快速定位接口调试中遇到到问题。
  2. 基本概念介绍:介绍接口中用到的一些概念是什么意思,开始测试前需要先了解清楚
  3. 获取 access_token
  4. 通讯录管理-概述:介绍通讯录接口的使用方法
  5. 通讯录管理-部门管理
接口测试用例编写

课堂练习
  • 补充完成企业微信部门管理接口测试用例设计

实战:postman 执行接口测试

构建接口请求
  • 企业微信
    • 获取 access_token 接口
    • 创建部门接口

编写断言
  • 验证接口响应状态码
  • 验证业务逻辑
// Status Code:Code is 200
// 验证响应状态码
pm.test("响应状态码为 200", function () {
  pm.response.to.have.status(200);
});

// Response Body:JSON value check
// 验证 JSON 中的某个值是否等于预期的值
pm.test("预期结果描述", function () {
  var jsonData = pm.response.json();
  pm.expect(jsonData.errcode).to.eql(0);
});
创建测试集
  • 使用测试集管理接口

设置变量
  • 设置测试集变量:
    • 测试环境:base_url
    • token:access_token
  • 引用变量:{{ 变量名 }}

自动获取最新 token
//获取响应数据的json对象
var jsonData = pm.response.json();
//从json对象中提取token值
var token = jsonData.access_token;
//把token值设置为测试集变量
pm.collectionVariables.set("token", token);
设置鉴权

所有的这些接口,都是通过 access_token 这个请求参数来进行鉴权的。那可以直接设置一次,然后自动生效么?当然是可以的,直接在测试集上设计就可以。

  • 确认接口鉴权方式
    • ?access_token=ACCESS_TOKEN

测试集下属所有文件夹和请求都默认继承这个设置。

数据驱动
  1. 准备数据:JSON 或者 CSV 格式
[
  {
    "name": "技术部",
    "name_en": "JISHU1",
    "parentid": 1,
    "order": 1,
    "id": 2,
    "expect": 0
  },
  {
    "name": "",
    "name_en": "JISHU2",
    "parentid": 1,
    "order": 2,
    "id": 3,
    "expect": 40058
  },
  {
    "name": "j",
    "name_en": "JISHU2",
    "parentid": 1,
    "order": 2,
    "id": 3,
    "expect": 0
  }
]
  1. 修改参数设置

  1. 修改断言

查看测试结果
  • 运行测试集。
  • 查看测试结果。

课堂练习
  • 完成企业微信新增部门接口剩余测试用例:
    • 使用 postman 完成接口测试执行。

总结

  • Charles 工具安装配置
  • Charels 完成 Mock 测试
  • 接口测试用例设计
  • postman 执行接口测试