HTTP 常见状态码有哪些?测试时怎么使用?
👔 Raina面试官: HTTP 状态码常见的那些,测试时你怎么用?
🙋 候选人:
- 测试里我重点盯2xx 成功、4xx 客户端错误、5xx 服务端错误几类。
- 200/201/204:成功语义不同,创建用 201、无 body 删除用 204。400:参数错误;401 未认证;403 已认证无权限;404 资源不存在;409 冲突;422 语义错误。500/502/503:服务端或网关问题。
- 断言不能只看 200——错误场景必须验证码和 body 里 business code/message 一致,防止一律 200 包错误。
👔 Raina面试官: 接口全返回 200,错误放 body 里,你怎么测?
🙋 候选人:
- 按业务规范断言 body——success flag、errorCode、message。
- 同时推动团队 REST 最佳实践:客户端错误用 4xx,否则监控和网关层难以区分成功率。测试报告里可记技术债,但当前按实际契约测。
GET 和 POST 在测试设计上有什么差异?
👔 Raina面试官: GET 和 POST 在测试设计上有什么不一样?
🙋 候选人:
- GET 应幂等且只读,POST 用于创建/变更且要测副作用和幂等。
- GET 测:Query 参数组合、URL 长度边界、缓存行为、重复请求结果一致。POST 测:Body 各种合法/非法 JSON、重复提交、CSRF(表单场景)、创建后资源是否落库。
- 还要测方法误用——该 POST 的用 GET 是否被正确拒绝,防止安全漏洞。
👔 Raina面试官: GET 请求带敏感参数有什么问题?测试要关注吗?
🙋 候选人:
- 要,敏感数据不应出现在 URL——会进 access log、浏览器历史、Referer。
- 测试检查密码、token 是否走 POST body;若业务必须用 GET 传参,验证 HTTPS 和日志脱敏策略。
RESTful API 测试你会关注哪些规范点?
👔 Raina面试官: RESTful API 测试你会盯哪些规范点?
🙋 候选人:
- 关注资源命名、HTTP 方法语义、状态码、版本、分页/filter 规范。
- URI 用名词复数 /users/{id},动词用 GET/POST/PUT/PATCH/DELETE 表达操作。创建返回 201 和 Location 头;更新 PUT 全量 PATCH 部分。列表接口统一分页参数命名。错误响应结构一致 {code, message, details}。
- 还会测 HATEOAS(若有)、Content-Type、Accept 头协商、API 版本 header/path。
👔 Raina面试官: PUT 和 PATCH 测试重点有什么不同?
🙋 候选人:
- PUT 测全量替换——缺字段是否被置空;PATCH 测部分更新——只改一个字段其他不变。
- 混用是常见 Bug 源,两个都要覆盖,并验证误用方法的错误响应。
接口鉴权(Token、签名、OAuth)怎么测?
👔 Raina面试官: Token、签名、OAuth 这些接口鉴权你怎么测?
🙋 候选人:
- 通用场景:无 token、过期 token、篡改 token、越权 token、正确 token。
- Bearer JWT:测 alg 降级、payload 改 userId、exp 过期。签名:漏参数、改参数顺序、timestamp 过期、nonce 重放。OAuth:授权码 flow 各步失败、refresh token、scope 不足访问资源。
- 期望都是明确的 401/403,且 error 不泄露内部实现细节。
👔 Raina面试官: Token 过期时间很短,自动化怎么测?
🙋 候选人:
- 几种办法:测环境缩短 TTL、Mock 签发过期 token、调测试专用过期 token 接口。
- 不要 sleep 等真实过期——不稳定。还可以单元/集成层 mock 时钟,接口 E2E 用预置 fixture。
接口依赖链(A 依赖 B 的结果)在自动化里怎么处理?
👔 Raina面试官: A 接口依赖 B 的结果,自动化里你怎么处理这种依赖链?
🙋 候选人:
- 优先Setup 链式调用 + 数据隔离,而不是硬编码写死 ID。
- 例:创建用户 → 登录拿 token → 创建订单 → 支付。每步断言成功并提取 dynamic 变量给下一步。Teardown 清理测试数据避免污染。
- 稳定数据用 factory/fixture;跨用例共享状态要谨慎,并行跑时要独立账号或 UUID 前缀。
👔 Raina面试官: 上游挂了导致整条链失败,怎么区分是 Bug 还是环境问题?
🙋 候选人:
- 自动化里加前置 health check 和步骤级断言,失败日志标明哪一步挂。
- CI 里区分 infra fail 和 test fail;必要时 Mock 上游让被测服务可独立验证。接口契约测试也能在上游不可用时保障集成假设。
接口超时、重试、限流你会怎么设计测试场景?
👔 Raina面试官: 超时、重试、限流这些,你怎么设计测试场景?
🙋 候选人:
- 超时:Mock 延迟或 Charles 限速,验证客户端/网关超时阈值和友好错误,不能无限 hang。
- 重试:模拟 503 后恢复,验证有限次数重试、指数退避、最终失败上报;重试必须幂等。限流:短时间 burst 超配额,期望 429 和 Retry-After 头,降级策略是否生效。
- 这些场景常在故障注入或预发环境做,避免影响共享测试环境其他人。
👔 Raina面试官: 怎么验证重试没有重复扣款?
🙋 候选人:
- 结合幂等键 + DB 流水条数 + 业务单状态三重验证。
- 故意让第一次超时、第二次成功,查是否只有一笔有效交易。这是接口和功能测试交叉的高价值场景。
Mock 和 Stub 在接口测试中有什么区别?什么时候用?
👔 Raina面试官: Mock 和 Stub 在接口测试里区别是什么?什么时候用?
🙋 候选人:
- Stub 提供固定假响应,Mock 还会验证交互是否符合预期。
- Stub:上游未就绪时返回 canned JSON,让被测服务继续跑通。Mock(严格意义):期望被测方调了某接口 N 次带某参数,没调则失败。日常口语里 Mock Server 常混指。
- 用法:依赖外部支付/短信时用 Stub 隔离;验证本服务是否正确调用下游用 Mock 验证行为。Contract test 介于两者之间。
👔 Raina面试官: Mock 测过了还需要联调吗?
🙋 候选人:
- 要,Mock 验证的是假设下的逻辑,联调验证真实集成——字段变更、延迟、错误码差异只有真联调能发现。
- 策略:开发期 Mock 提速,提测后至少一轮真实依赖或 sand-box 联调,Mock 和真实结果 diff 监控。
如何定位接口返回正常但前端展示异常的问题?
👔 Raina面试官: 接口返回正常但前端展示不对,你怎么定位?
🙋 候选人:
- 标准排查:对比 API 原始响应 vs 页面渲染结果,二分是数据问题还是展示问题。
- DevTools Network 看 response body 字段是否齐全;Console 看 JS 报错;Vue/React devtools 看 state 是否 parse 错——常见是 null 未处理、字段改名、类型当字符串/数字。
- 再查缓存层——接口对新但 CDN 或前端 cache 旧;时区/format 导致日期显示错。
👔 Raina面试官: 偶现的前端问题怎么抓?
🙋 候选人:
- 开Preserve log、录屏、Sentry 上报,复现时保存 HAR 文件。
- 查 race condition——快速切换 tab 时请求乱序返回,后发的先到了用旧数据覆盖。接口测试 Pass 但 UI 仍可能在这种竞态下挂。
接口契约测试是什么?和常规接口测试有什么不同?
👔 Raina面试官: 契约测试是什么?和常规接口测试有啥不同?
🙋 候选人:
- 契约测试验证消费者和提供者对接口格式/行为的共同约定,常在 CI 里双向校验。
- 常规接口测试:调用真实服务,断言功能对不对。契约测试:Consumer 定义期望 request/response schema,Provider 跑 verify 确保实现匹配;Consumer 侧用 pact mock _provider 独立测。
- 价值是并行开发、早发现问题——Provider 改字段没通知,契约 CI 立刻红。
👔 Raina面试官: 契约测试能替代集成测试吗?
🙋 候选人:
- 不能替代,契约保证形状一致,集成保证端到端行为正确——业务逻辑错但 schema 对,契约仍绿。
- 理想是金字塔:契约 CI 快反馈 + 少量集成测试 + 核心 E2E。各层防不同类缺陷。
Swagger / OpenAPI 文档和实际接口不一致,你怎么处理?
👔 Raina面试官: Swagger 文档和实际接口对不上,你怎么办?
🙋 候选人:
- 第一步以可复现证据开缺陷——文档说 optional 实际 required,响应少字段,类型不对。
- 短期测试用例按实际实现写并标注 doc drift;推动开发 single source of truth——代码注解生成 OpenAPI 或 doc-first 生成 stub。
- 自动化可从 Swagger 生成基础用例,但 drift 会导致误报,所以要加契约校验或定期 diff doc vs 抓包。
👔 Raina面试官: 文档错了但产品已按文档做前端,听谁的?
🙋 候选人:
- 拉产品+后端+前端三方定权威版本——是实现错了还是文档 outdated。
- 测试输出差异表辅助决策,定稿后更新 doc、用例、前端一并改。不能让测试默默选边站,否则上线必有一方挂。
