Skip to content

公开 API 客户端测试手册 ​

本页给实现 SDK、网页辅助工具和数据导出工具的开发者使用。测试应围绕用户可见行为进行:登录、读取、写入、失败反馈、分页、文件处理和凭据保护。不要为了测试去调用未记录的接口或猜测隐藏字段。

测试层次 ​

单元测试 ​

覆盖纯函数:

  • 请求体构造;
  • 时间和数字格式化;
  • [start, end) 范围计算;
  • 分页游标推进;
  • JSON 解析和未知字段保留;
  • 响应状态分类;
  • 日志脱敏;
  • 文件 Content-Type 分流。

单元测试的 Token、账号、访问码和路径必须全部使用占位符。

HTTP 适配层测试 ​

使用假的 fetch/HTTP 客户端验证:

  1. 200 + 成功 JSON;
  2. 200 + 业务失败 JSON;
  3. 401/403;
  4. 429;
  5. 500/503;
  6. 超时;
  7. 图片二进制;
  8. JSON 错误;
  9. 空响应;
  10. 错误 Content-Type。

断言包括:是否抛出、是否重试、是否停止轮询、是否保留原值和日志是否已脱敏。

工作流测试 ​

使用受控测试账号验证完整流程:

  • 登录 → 验证 → 退出;
  • 读取配方 → 修改一项 → 回读;
  • 下载缓存 → 预览 → 恢复 → 回读;
  • 读取相片 → 下载一张 → 删除一张;
  • 读取上传缓存 → 下载 → 上传一次 → 回读;
  • 读取记录分页 → 合并 → 去重;
  • 成绩互动 → 回读互动汇总;
  • 查卡读取 → 多目标合并 → 停止自动刷新。

每个写入工作流都必须有失败和超时分支,不能只测成功路径。

不变量 ​

测试中应一直成立:

  1. 无有效 Token 时不会发送受保护请求;
  2. Token 失效后不会继续后台轮询;
  3. 保存失败不会覆盖本地原值;
  4. 删除前要求用户确认;
  5. 写入超时不会自动重复;
  6. 未知字段不会被保存操作无意删除;
  7. 二进制响应不会被当作 JSON;
  8. 空列表不会被显示为网络错误;
  9. 账号切换后旧账号请求不会覆盖新账号页面;
  10. 日志不会出现凭据原文。

分页测试 ​

至少准备这些夹具:

夹具目的
0 条空状态
1 条小于页大小时停止
恰好页大小正确请求下一页
多页最后不足一页不遗漏最后一页
中间页空正确处理服务端过滤
总数变化不依赖过期 total
重复记录去重不覆盖最新信息
某页失败从当前页恢复

验证输出条数、顺序、去重策略和最后游标。不要用固定“请求次数”作为成功条件。

写入测试 ​

配方 ​

  • 修改开关但不改值;
  • 修改值但不改开关;
  • 空文本、超范围数字、非法 JSON;
  • 保存中重复点击;
  • 保存失败后回滚本地表单;
  • 成功后重新读取值。

评论和互动 ​

  • 空评论、过长评论、重复提交;
  • 根评论和回复;
  • 删除无权限对象;
  • 点赞/点踩后重新读取汇总;
  • 请求超时后不重复发布。

缓存与文件 ​

  • 空文件;
  • 错账号备份;
  • 缺少可选字段;
  • 未知字段;
  • 恢复条数与页面实际刷新不同;
  • 删除前取消和确认;
  • 下载列表变化后的过期索引。

账号切换测试 ​

用两个测试账号交替操作:

  1. 账号 A 打开读取页面;
  2. 在请求尚未完成时切换到账号 B;
  3. 确认 A 的响应不会写入 B 的页面;
  4. B 的 Token 失效时确认只停止 B 的请求;
  5. 切回 A 后重新读取,而不是复用 B 的缓存。

浏览器多标签页也要测试。每个标签页应明确自己的会话边界,不能把本地存储中的最后账号直接当作所有标签页的当前账号。

UI 与浏览器测试 ​

使用真实浏览器完成:

  • 键盘输入、粘贴和删除;
  • 移动端菜单;
  • 深色模式;
  • 二维码上传与取消;
  • 图片预览和下载;
  • JSON 文本区横向滚动;
  • Toast、禁用按钮和错误文本;
  • 离开页面后的请求取消。

验证浏览器控制台没有新增错误或警告,尤其是未处理 Promise、对象 URL 泄露和状态更新到已卸载页面。

发布前报告 ​

text
客户端版本:
测试日期和时区:
测试环境:
测试账号别名:
覆盖接口分类:
覆盖成功路径:
覆盖失败路径:
分页结果:
文件结果:
写入回读结果:
凭据脱敏结果:
浏览器控制台结果:
已知限制:

报告不能包含真实 Token、密码、访问码、私钥、完整响应或未经脱敏的记录和图片。

Released under the CC BY-NC-SA 4.0 License.