已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
我负责一条 B 端 SaaS 的接口自动化,pytest 7.4 + httpx,约 800 条用例,跑在 50 个并发 worker 共享的 staging 上(MySQL 8 同库 + Redis 7 + Kafka 1 个 topic)。
最近两个月,每天 CI 红灯约 2~3 次,其中 约 60% 是「失败一次,重试(retry=1)即绿」。
典型 case 举例:
test_order_refund_flow:断言 refund_status == "completed",实际拿到 "pending",重试后绿;test_inventory_sync:断言库存数量,实际差 1,重试后绿;test_user_notification:断言消息已送达,实际未收到,重试后绿。三个 case 没有共同的技术根因,但共性是:都依赖 staging 的异步状态收敛(Kafka 消费、定时任务、MQ 投递),且都发生在 50 worker 高并发时段(早 9:00-10:00,多团队同时跑)。
INFO 里 used_memory 在失败时段从 40% 涨到 72%,但不确定是否是缓存污染;consumer lag 在失败时段从 0 涨到 ~5000,恢复后归零;我现在的困境是:「失败后重试即绿」这个信号太模糊——它既可能是 flaky(用例本身不稳定),也可能是环境瞬时污染(高并发导致状态收敛延迟)。这两种情况的修复策略完全不同:
我需要的答案形态:
站内已有相关讨论:
但这两个都聚焦在「判 flaky 还是判真 bug」,没有覆盖「判 flaky 还是判环境污染」这个维度。