顺序依赖的发现与治理
顺序依赖的典型信号:单独运行失败、整体执行通过;或随机顺序下零星失败。治理方法是查明共享状态来源(数据、单例、登录态、端口),改为自建自清,并在 CI 中用随机顺序持续暴露。只修当前失败用例而不消除共享状态,问题会换个形式再次出现。
基本信息
| 典型信号 | 单独跑失败整体跑通过、随机顺序下零星失败 |
|---|---|
| 常见来源 | 共享数据、单例状态、登录态、端口与文件 |
| 治理方式 | 用例自建自清,隔离数据与资源 |
| 暴露手段 | CI 随机顺序执行,持续轰击 |
| 修复顺序 | 先消除共享状态,再回归验证随机顺序 |
| 防复发 | 评审用例是否依赖前序执行状态 |
| 治理目标 | 任何用例可任意顺序、任意组合执行 |
暴露手段
暴露手段
# 先核对单独执行:
pytest tests/test_a.py::test_two
# 随机顺序插件(pytest-randomly)用于持续暴露:
pytest -p randomly -q
# 让随机种子在每次 CI 运行中变化,而不是固定一颗信号与来源对照
| 信号 | 常见来源 | 治理动作 |
|---|---|---|
| 单独跑失败整体通过 | 依赖前序用例残留数据 | 用例自建自清 |
| 随机顺序零星失败 | 全局单例、缓存与登录态 | 用例级重置 |
| 并行分片失败 | 共享端口、文件与账号 | 资源隔离与独立账号 |
| 时快时慢 | 前序用例改变资源环境 | 独立环境与数据 |
典型使用场景
- CI 分片:并行分片后暴露顺序依赖,集中治理。
- 遗留系统:为老用例补自建自清能力。
- 缺陷定位:区分用例脆弱与产品缺陷。
- 用例评审:检查新用例是否依赖全局状态。
- 框架迁移:批量执行顺序变化,依赖问题集中浮现。
- 发布保障:随机顺序回归作为发布前例行检查。
- 度量观察:统计单独执行与整体结果不一致的用例数,作为治理进度。
只修当前失败用例而不删除共享状态来源,问题会以其他形式再次出现。
把随机种子固定下来长期复用,会失去暴露依赖的作用。
治理目标是任何用例可任意顺序、任意组合执行:把它写进用例准入要求。