已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景
我在一家 B 端 SaaS 团队负责接口自动化(Python 3.11 + pytest 7.4 + httpx 0.25,约 800 条用例),后端 Spring Boot 3 + MySQL 8 + Redis 7 + RocketMQ,CI 是 GitLab Runner 4 并发跑 pytest-xdist(--dist loadscope)。每天夜间全量回归稳定有 5–8 条红,同一套用例在本地顺序执行 10 次全绿。
现象 / 卡点 这些红的用例有个共同特征——不是"脏数据",而是服务端的"内存态 / 进程态"被前面的用例污染了:
off 切到 on,但没人切回来,Y 走的是新分支;warm_cache:* 的 key,Z 断言的是"冷启动"路径,结果命中了热缓存;gw-2 worker 上挂、在 gw-1 上绿,我怀疑是测试服务进程内的线程池 / 连接池被前面的压测用例打成了"半死"状态,但日志里完全看不出来。已尝试 & 结果
pytest-randomly 打乱顺序:红的用例会"换人",但数量不变——说明不是固定某条用例的问题,是用例之间的隐形依赖;--dist loadfile:把同文件的用例锁在同一个 worker,红的用例数量没变,说明依赖不是文件级的;try/finally 清理 Redis / feature flag / 限流计数器:只能清"我知道的",清不掉"我不知道的",红的从 8 条降到 4 条,剩下的还是抓不到根因;期望得到的答案形态 想听大家可落地的做法(命令 / 配置 / 目录结构都行),特别希望覆盖:
--shareclasses + CDS + 预热脚本,或者容器化 + 镜像预拉)?成本大概多少?欢迎贴你司的 CI job 片段、sidecar 配置、或者踩过的坑。先谢过。