SDET / Frontend · Test Design

TikTok REST API 自动回归:契约、权限、幂等与数据隔离

从接口合同构建分层测试集,覆盖失败和并发,不让共享测试数据造成随机失败。

题目重点:从接口合同构建分层测试集,覆盖失败和并发,不让共享测试数据造成随机失败。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练API资源CRUD及认证,具体schema/状态码按服务合同,不预设所有系统一致。
  • 用受控测试环境与可清理数据;对真实外部副作用使用sandbox或mock。

解题路线

  1. 先把请求方法/path、schema、验证规则、状态码和副作用写成可验证合同。正常输入只是一类,缺字段、类型错、越界、未知字段和错误媒体类型按约定返回,不自行猜标准码。
  2. 权限包含未登录、过期凭证、角色不足和对象级越权;每种失败都核对数据未被写入。只测403/401数字不够,还要验证没有敏感响应字段和日志泄露。
  3. 有状态API需覆盖重复提交、幂等键同异payload、版本冲突、并发更新、分页稳定性、排序平局与软删除。HTTP成功不代表异步业务立即完成,需等待可观测条件并设置有界超时。
  4. 自动化分层:大量handler/domain单测,契约测试固定输入输出,数据库集成验证事务与约束,少量真实HTTP旅程测路由/认证/序列化。外部mock不能替代与真实提供方的契约兼容核对。
  5. 用每个测试唯一租户/命名空间创建fixture,finally清理或环境回收;并行case别抢同一个账户。避免依赖执行顺序,时钟和随机性可注入,等待poll条件而非固定长sleep。
  6. CI区分产品失败与环境故障,保存requestId、响应、版本和关键日志;flaky要定位根因,不用无限重试把缺陷藏起来。回归集合按变更影响加关键全局合同,保留失败历史。

手动走一遍

同请求id创建资源两次,第二次返回原资源且只落一条;同id改payload报冲突。角色A不能用B的resourceId读写。并行测试各用独立tenant,不因一个case删除账户让另一case失败。

规模与取舍

测试成本按case数、setup/IO与并行度;并发过高会争数据库/限流,不能无限并行。代表数据规模需要覆盖分页边界,断言不应下载整库才能检查一条记录。

易错点与追问

容易失分的边界

  • 只测2xx正常路径。
  • 测试共享一个可变账户。
  • 固定sleep代替可观测等待。

继续深挖

  • 怎样做schema变更兼容测试?
  • 异步接口何时认为完成?
  • 如何减少flaky且保留真实集成覆盖?
✓已复制微信号!