本地覆盖
本地覆盖是一种仅供开发使用的方式,让客户端代码把某个 unit_id 强制塞进特定分组。 它只用于调试与端到端测试,不要拿来塑造生产流量。生产流量请通过平台的 受众 与实验的 Allowlist 控制。
何时用
- 复现一个只在 treatment 分支出现的 bug。
- 录视频或演示时,想让屏幕上展示某个特定 UI 变体。
- QA 一次性走完实验所有变体。
何时不用
- 想让某些员工在生产环境恒定看到某变体 —— 用控制台的 Allowlist,被 allowlist 的
unit_id会自动从分析中剔除。 - 想要 kill switch —— 用带默认值的 feature flag,详见 默认值与回退。
- 想做 A/B/A 这类切流 —— 用平台的流量分配,不要在覆盖逻辑上搭。
推荐做法
在没有官方覆盖 API 的当下,推荐组合实验 Allowlist 与本地的开关:
- 在控制台把开发者的
unit_id加进实验对应变体的 Allowlist。 - 在客户端代码里,用构建标记(
__DEV__、debug build、URL 参数)把覆盖逻辑围起来,避免上线。 - 在 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 始终落在同一组,测试天然可复现。