编程 10 个区分初级与资深测试的 API 面试题:答案形状暴露思维方式

2026-09-07 18:12:28

10 个区分初级与资深测试的 API 面试题:答案形状暴露思维方式

多数 API 测试面试准备清单是琐事:"404 是什么意思?"谁都能背,面试官也知道。真正区分候选人的问题,是那些你答案的形状暴露你如何思考的问题。

1. "一个 POST 带无效 body 返回 500。这是 bug 吗?"

是,而且如果它也没解释自己就双重是。无效输入应返回 400 Bad Request 并带有用错误体。500 意味着服务器没做校验——撞上了坏数据。"被正确拒绝了"不豁免错误的状态类。考察点:你对待错误行为是规范行为,还是噪音?

2. "除了状态码,端点还测什么?"

分层答案:协议(状态、内容类型、响应时间)、契约(body 匹配 schema——字段、类型、格式)、数据(值正确)、行为(状态真的变了——DELETE 后 GET 返回 404)、安全(认证反例:无 token → 401,错误 token → 403)。考察点:你知道测试有层次,而不是只有状态码。

3. "POST /users 返回 201 但用户没出现。你怎么办?"

不责怪"怪事"。复现最小用例、检查数据库事务是否提交、查幂等性(重放是否双写)、查 API 网关/中间件是否吞掉响应。考察点:你系统性地缩小范围,还是停在表面。

4. "API 响应里有个你不知道的字段。你会?"

资深答案:对照契约/schema,契约说没有就该报契约断裂;契约没说清就该问谁拥有该字段;可能时用 schema 校验自动抓。初级答案:忽略它。考察点:你如何对待契约漂移。

5. "给你的 API 加个自动化测试。从头设计。你放哪层?"

资深:分层——契约测试(schema 校验)、集成测试(真实依赖、容器化)、E2E 冒烟集(核心用户旅程,少量);用测试数据工厂而非硬编码 fixture;CI 里分层跑,快速反馈层先跑。考察点:你有测试金字塔的概念,还是只会撒脚本。

6. "请求偶尔 429。你怎么测它?"

不是只测"429 返回了"。测限流边界(接近阈值、超阈值)、响应头(Retry-After)、客户端重试是否尊重退避、并发场景下计数是否原子。考察点:你把限流当系统行为而非一个状态码。

7. "一个端点突然慢了 10 倍。你用什么顺序排查?"

先确认可复现(是否特定参数/负载/时间),看 APM/日志定位耗时层,区分 DB 慢(索引、锁、N+1)、上游慢、应用逻辑慢、网络;用 profiling 而非猜。考察点:你从数据出发还是从假设出发。

8. "生产环境的测试数据怎么管理?"

资深:分离读/写路径,用只读账号做只读断言,对写操作用专设的清理机制(事务回滚、TTL、定时清理),绝不把带敏感数据的真实用户记录当 fixture。考察点:你意识到测试在共享系统里也有副作用。

9. "你如何在 CI 里保证测试不 flaky?"

资深:隔离(每次干净环境)、确定性(固定 seed、mock 时钟/随机)、等待用轮询+超时而非固定 sleep、flaky 测试先修根因而不是重试掩盖、记录重试次数监控趋势。考察点:你把 flaky 当基础设施问题还是玄学。

10. "API 契约变了(字段改名)。你的测试怎么办?"

资深:契约变更走版本化流程(client/server 联合发布或兼容层),测试与契约同源生成,变更先改契约再改实现与测试;让破坏性变更在 CI 里显式可见。考察点:你把契约当一等公民,还是当注释。

给候选人的实践建议

答面试题时说出你分层、说优先序、说权衡——面试官听的不是"我知道这个函数",而是"我会怎么在一个真实系统里做出判断"。答"这是 bug 吗"时先说会怎么复现,答"怎么测"时先说放哪层。形状对了,细节可以讨论。

来源:The 10 API Testing Interview Questions That Separate Juniors from Seniors - DEV Community

复制全文 生成海报 API 测试 面试 工程实践

推荐文章

程序员茄子在线接单