接口实战

霍格沃兹测试开发学社

ceshiren.com

目录

  • 接口
  • 测试用例设计思路
  • 接口自动化脚本编写

接口

  • 接口介绍
  • 接口测试

接口介绍

  • 输入 —> 处理 —> 输出

接口测试

接口测试

  • 模拟调用方「Client 端」,通过接口通信来检测被测接口的正确性和容错性

接口自动化测试

  • 自动化流程
  • 自动化对比
  • 测试策略
  • 工具选型
  • 接口自动化的时机

自动化流程

自动化对比

UI 自动化测试 接口自动化测试
成本 ⭐️⭐️⭐️ ⭐️
测试效率 ⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
用例编写效率 ⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
稳定性 ⭐️⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
自动化回归测试效率 ⭐️⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
测试覆盖度 ⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
自动生成用例成本 ⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️

测试策略

  • 金字塔模型
  • 菱形模型

金字塔模型

菱形模型

工具选型

测试类型 工具 价值
接口抓包 CharlesFiddler 接口抓包工具,抓取 App 的数据包
接口测试 PostmanApiFox 接口调试工具,接口手工测试工具,学习成本低,直接安装即可使用
接口自动化测试 Java:HttpClientRestAssuredOkHttphttprunner4j
Python:requestshttprunner
用于接口自动化测试的 JavaPython第三方库,需要与对应编程语言结合使用
性能测试 JMeter 性能测试工具

价值

  • 接口自动化 投资收益比最高
  • 更早的发现问题
  • 更快的质量反馈

接口自动化测试流程

  • 获取接口相关信息
  • 接口测试用例设计
  • 接口测试框架选择
  • 测试用例编写与维护
  • 持续集成

1.获取接口相关信息

  • 获取路径
    • 开发的接口文档、swagger地址、自己抓包
  • 获取内容
    • 请求
      • url 、请求头、请求体
    • 返回
      • 状态码、返回头、返回体

2.设计接口测试用例

  • 等价类边界值
  • 参数组合
  • 多个非必填参数,作为整体进行设计

3.接口测试框架选择

  • REST-assured + JUnit5 + Allure

4.发送请求

  • 三剑客:given,when,then

5.接口返回结果校验

  • body校验

  • code校验

企业微信接口测试

  • 企业微信 API 文档

https://developer.work.weixin.qq.com/document/path/90664

接口鉴权通用的解决方案

  • 认证信息的获取
  • 认证信息的携带

企业微信接口鉴权

课堂练习

获取token

说明 参数
请求网址 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
方法 GET
备注 获取企业微信token;
输入参数corpid{企业ID}、corpsecret
响应模版 {"errcode":0,"errmsg":"ok","access_token":"hMiJ_ldUZYXKPgiXHw","expires_in":7200}
断言 请求状态码是否为200
断言 errcode是否为0

获取token测试用例

ERROR

  • IP地址未添加为企业可信IP
  • 通讯录同步权限未选择API编辑通讯录
{
    "errcode": 40001,
    "errmsg": "invalid credential, hint: [1671072990531330938904458], from ip: 120.245.114.24, more info at https://open.work.weixin.qq.com/devtool/query?e=40001"
}

ERROR

  • 根据报错信息IP地址,添加至企业可信IP
  • 通讯录同步选择API编辑通讯录

接口自动化测试用例设计

  • 单接口测试:保障单个接口的正确性和健壮性
    • 场景:对外提供的接口、与第三方联调的接口
  • 接口业务场景测试:保障通过进行多个接口的串联操作来完成原有需求中提出的业务逻辑

部门创建

  • 通过API创建树状部门结构
  • 部门名称
    • 同一个层级的部门名不能有重复
    • 长度限制:1~32个字符
    • 字符不能包括:*?"<>|
  • 部门排序规则
    • 在父部门中的次序值
    • order值大的排序靠前
    • 有效的值范围是[0, 2^32)

ERROR

  • 部门名称含有非法字符 ---- 未声明接口对应编码格式导致
    {
        "errcode": 60009,
        "errmsg": "department name include invalid char, hint: [1671089685500610887641103], from ip: , more info at https://open.work.weixin.qq.com/devtool/query?e=60009"
    }
    
    
  • 请求头添加contentType参数为application/json; charset=utf-8

随机生成数

<!--  随机测试数据生成库  -->
<dependency>
    <groupId>com.apifan.common</groupId>
    <artifactId>common-random</artifactId>
    <version>1.0.18</version>
</dependency>

JsonPath解析规则

<!-- json path 解析json文件 -->
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>${json-path.version}</version>
</dependency>

获取部门列表测试用例

  1. 获取请求的响应体body
  2. 转为schema格式内容,使用jsonschema官网转换
  3. 项目路径下创建 depart-schema.json
  4. 验证资源是否符合架构 matchesJsonSchemaInClasspath是从中静态导入io.restassured.module.jsv.JsonSchemaValidator的,建议静态导入此类中的所有方法