You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成测试检查可抛错函数时失败该从何处开始调试排查

存量旧代码触发集成测试抛错的调试优先级方案

出问题的存量代码片段如下:

function foo() {
   const x = await getData();
   
   if (x && x['token']) {
        // 业务逻辑
   } else {
      throw Error("Doesn't exist")
   }
}

该错误的直接触发逻辑非常明确:getData()的返回值为假值,或是返回对象中不存在token字段。由于代码本身是未改动的存量逻辑,不需要先翻业务代码,按以下优先级从高到低排查即可,适配大体量项目的调试效率要求:

  • 第一优先级:排查测试Mock配置改动
    集成测试场景下getData()绝大多数情况会被Mock拦截,这部分改动是此类问题最高发的原因:
    • 拉取测试目录最近的提交记录,全局搜索getData方法、其所属数据源模块、token鉴权相关的Mock规则,确认是否有人修改了默认返回值,把原本带token的返回结构改成了undefined、空对象或其他不符合预期的结构
    • 直接在失败用例内调用foo的前一行加日志,打印await getData()的实际返回值,1分钟就能确认是否是Mock返回不符合预期,这类原因占同类问题的80%以上
    • 排查是否新增了测试前置/后置钩子,在当前用例执行前清空了登录态、测试凭据缓存
  • 第二优先级:排查测试环境依赖与配置改动
    如果Mock规则没有变动,转向检查测试环境的外部依赖变更:
    • 确认测试环境对接的后端服务、鉴权服务的种子数据是否被清理或修改,如果getData没有被Mock而是直连测试环境服务,种子数据丢失会直接导致拿不到有效token
    • 检查近期的项目依赖升级记录,确认getData依赖的请求库、鉴权SDK是否有版本升级,是否存在默认传参、鉴权逻辑的breaking change,比如之前默认携带测试环境凭据,升级后不再默认携带
  • 第三优先级:排查测试执行逻辑改动
    大体量项目的集成测试很容易存在隐式的顺序依赖:
    • 检查是否有人调整了测试用例的执行顺序,之前运行该用例前会先执行登录逻辑写入有效token,顺序调整后跑foo时登录步骤还未执行,自然拿不到有效值
    • 检查是否新增了其他测试用例,在执行完成后清空了全局token缓存,导致后续跑到该存量用例时缓存已被清除
  • 快速定位技巧:本地切到上一个已知测试全量通过的commit版本,单独运行这个失败的用例:
    • 如果老版本同样报错,说明问题出在测试环境、外部依赖,和仓库代码无关
    • 如果老版本运行正常,直接对比两个commit之间测试配置、Mock规则、测试脚本相关的diff即可,不需要遍历全量业务代码

内容的提问来源于stack exchange,提问作者sal3jfc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:42:25