Skip to content

本地覆盖

本地覆盖是一种仅供开发使用的方式,让客户端代码把某个 unit_id 强制塞进特定分组。 它只用于调试与端到端测试,不要拿来塑造生产流量。生产流量请通过平台的 受众 与实验的 Allowlist 控制。

何时用

  • 复现一个只在 treatment 分支出现的 bug。
  • 录视频或演示时,想让屏幕上展示某个特定 UI 变体。
  • QA 一次性走完实验所有变体。

何时不用

  • 想让某些员工在生产环境恒定看到某变体 —— 用控制台的 Allowlist,被 allowlist 的 unit_id 会自动从分析中剔除。
  • 想要 kill switch —— 用带默认值的 feature flag,详见 默认值与回退
  • 想做 A/B/A 这类切流 —— 用平台的流量分配,不要在覆盖逻辑上搭。

推荐做法

在没有官方覆盖 API 的当下,推荐组合实验 Allowlist 与本地的开关:

  1. 在控制台把开发者的 unit_id 加进实验对应变体的 Allowlist
  2. 在客户端代码里,用构建标记(__DEV__、debug build、URL 参数)把覆盖逻辑围起来,避免上线。
  3. 在 SDK 调用外包一层小适配器:dev 模式下直接返回硬编码变体,且不上报曝光 —— 强制 的变体记入曝光会污染结果。
javascript
// JavaScript:dev-only 覆盖,再走正常 SDK 路径
function getVariant(layer, paramKey) {
  if (__DEV__ && window.__OVERRIDES__?.[paramKey] !== undefined) {
    return window.__OVERRIDES__[paramKey];        // 不要上报曝光
  }
  const exp = abc.getExperiment(layer, true);          // 正常路径
  return exp.getStringValue(paramKey, "control");
}

测试时尊重平台真相

测试如果是为了验证分组路径(而不是变体本身),建议用稳定的 unit_id 直接打真实 SDK, 不要替换响应。平台保证同一 unit_id 始终落在同一组,测试天然可复现。