多地区 QA 测试数据隔离:运行级命名空间做法
多地区 QA 按运行分配独立身份与数据命名空间,把地区配置当运行级输入,隔离 Cookie 与令牌,并约定清理、失败恢复与并发规则。
多地区 QA 最常出的问题不是功能坏了,而是"上一次运行留下的状态"让这一次结果不可信。同一个用例昨天通过、今天失败,排查半天发现是另一个地区的测试脚本改了共用账号的地区配置。地区测试数据隔离要解决的是可复现性:同一条用例在不同运行里应得到同一个结论。这类问题只在并行、复用和多次重跑之后才出现,住宅代理 IP 能提供按运行切换的出口,却无法隔离账号、租户、Cookie、令牌和测试数据。先给每次运行分配独立身份和一个命名空间,再开始跑。
找出账号、配置和残留数据三类污染
最常见的一幕是身份共用:多个地区、多个脚本用同一个测试账号,后跑的会继承前一个留下的语言、地区、权限和购物车状态。
另一种是配置全局化:地区、语言、开关写在全局配置或环境变量里,某次运行改了没改回来,下一次运行看起来像"地区行为变了"。
还有一种是数据残留:同一批测试数据被反复读写,计数、配额、状态机停在中间态,失败后再跑会撞上"已经存在"。
三条路径看起来都像环境问题,但成因不同:多数是测试夹具没隔离,少数会暴露产品自身的跨租户、缓存键或并发隔离缺陷。修复方向不是"多测几遍确认一下",而是先把状态切开,再看切开之后问题还在不在。
| 污染路径 | 典型表现 | 隔离做法 |
|---|---|---|
| 身份共用 | 第二地区登录后看到第一地区的草稿 | 每次运行独立账号或独立租户 |
| 配置全局化 | 只有先跑的地区表现正常 | 地区与语言作为运行参数显式传入 |
| 数据残留 | 重跑报"记录已存在" | 运行前生成唯一命名空间 |
三条路径里,走出去最容易改变的是配置读取:出口一变,地区识别与配置来源可能一起变。身份与数据残留跟出口无关,换出口不会让它们消失,只会让排查多绕一层。
每次运行使用独立账号和数据命名空间
拆分地区、浏览器与运行配置的覆盖方法,可参考国际化浏览器与地区测试矩阵。 一次运行=一个身份 + 一个命名空间 + 一份可丢弃的数据集。身份可以是独立测试账户,也可以是同一账号下按租户隔离;选哪种取决于产品模型,但必须保证两个运行之间不共享可写状态。
命名空间用运行 ID 生成前缀,落在所有可写对象上:账号邮箱、订单号、内容标题、上传文件名。前缀让清理可以按运行精确删除,也让人工排查时一眼看出数据属于哪次运行。
Cookie、令牌与浏览器上下文同样要按运行隔离:每次运行使用独立上下文或独立配置文件目录,不共用登录态。凭据由运行级账号签发并在结束后撤销,日志里不写明文令牌。
身份和出口是两回事。要做到"同一账号状态、只换地区",才需要把出口单独控制,做法见代理 IP 风险边界里的判定顺序:先确认账号侧不共享,再看出口。
每次运行单独记录地区和出口配置
若页面会随地区配置切换版本,可用国际站地区页面差异判定核对差异记录。 地区、语言、时区、功能开关都要能作为参数传入,但测试参数不能覆盖掉本来要测的优先级。先写下站点批准的读取顺序,再按它设计冲突用例:同组里只改一项,其余项的实际值全部记录,包括 Cookie、开关与构建号。
这个优先级要在测试里被验证,而不是假设。做法是固定其余项、只改一项,看结果是否随预期变化,并记录生效来源:固定账号、语言、Cookie 与开关,只换出口;固定出口与账号,只改语言参数;固定出口与语言,只改账号地区。
这里换的每一项都是运行参数;出口只是其中一项,换代理 IP 不等于换了地区配置。
配置读取到哪一层要写进报告。只写"已设置为 X 地区"而不写应用实际采用了哪个值,等于没记录。
规定运行后的清理、恢复和并发边界
涉及账号边界和风险判断时,可对照代理 IP 风险边界复核。 清理放在运行结束后自动执行,范围只限本次运行自己的账号、对象、上传文件与缓存命名空间;禁止全局清理,否则会连带删掉别的并行运行正在用的数据。清理失败要报错并重试,连续失败要告警,不能静默跳过。
失败恢复的规则是:先冻结可复现的数据快照与关联 ID(运行 ID、账号、订单号、请求 ID),连同截图、响应体、日志片段一起归档;确认归档完整后再按保留期定向清理。只留一个前缀加几张截图,复现不了。保留全部会让环境越来越脏,全部清掉又无法复现。
一次运行的完整链路是:用 run-20261022-a 前缀创建账号与数据 → 按参数跑完用例 → 失败时冻结该前缀下的快照与日志 → 按前缀定向清理并回写清理结果。
并发要限制。两个运行同时操作同一账号,即使加了命名空间,也可能在配额、限流、唯一约束上互相影响。要么串行,要么给并发运行分配不同账号。地区测试数据隔离在并发下最容易失效:省时间的那一步,往往就是污染开始的地方。
FAQ
加个数据前缀够不够?
不够。前缀只解决"找得到、删得掉",不解决账号状态、配额和缓存。身份与配置也要按运行隔离。
能不能用生产脱敏数据做多地区测试?
需要单独评估与授权。默认用合成数据,避免把真实用户状态带进测试,也避免清理时误删。
测试数据被污染了,怎么判断是环境问题还是缺陷?
先保留原证据(运行 ID、账号、数据快照),再用全新身份与命名空间在相同条件下重跑一次。重跑通过,说明问题在夹具,先修隔离规则;重跑仍失败,把差异逐项对到共享状态上(租户、缓存键、并发、执行顺序),对得上的才按产品缺陷处理。两种结果都要记录——重跑通过也排除不了顺序性缺陷。
多地区测试一定要换出口吗?
要验证地区识别与地区相关规则时需要真实出口,可优先评估静态住宅代理 IP,它让同一地区的会话更稳定;短时多地区抽查用动态住宅代理 IP 即可,只测语言文案时改语言参数即可。 固定地区会话的产品说明可参见静态住宅 FAQ。
隔离的成本是每次多花几分钟准备环境,收益是结论可以被相信。运行记录里至少留下三项:运行 ID、配置来源、清理结果。若同一地区需要长期稳定的出口以复跑同一份数据,可按地区与会话要求评估静态住宅代理 IP,产品规则仍需在自有测试环境验证。
