viable/strict/1790312005: [CI] Add golden tests for pytest junit XML (#198326)
PyTorch 仓库合并 PR #198326,为 upload_test_stats.py 所消费的 pytest junit XML 增加 golden 测试。新增 TestJunitXml 通过 test/conftest.py 的 LogXMLReruns 与 sanitize_pytest_xml 运行 fixture 套件,将归一化后的 XML 与 raw、sanitized 两份 golden 做 diff。golden 记录其依赖的 pytest 与 pytest-rerunfailures 版本,版本不一致时该测试类跳过;REGENERATE_JUNIT_GOLDENS=1 可重写 golden。测试计划显示在 pytest 9.1.1 下两个用例因版本不匹配被 SKIPPED。
发展脉络
- 首次出现viable/strict/1790312005: [CI] Add golden tests for pytest junit XML (#198326)PyTorch Core
- 行业反馈trunk/9858884bec3fc33199238ad8be226cc15c383b6a: [CI] Add golden tests for pytest junit XML (#198326)PyTorch Core
- 当前判断判断:大型开源训练框架的 CI 正在把「测试结果上报链路」本身纳入回归保护,说明测试统计数据的可信度被视为工程资产。此类变更通常不改变外部 API,但会提高上游依赖升级时的摩擦成本。可验证下一信号:PyTorch 是否在依赖升级 PR 中同步更新这些 golden,或出现因跳过导致的统计口径偏差报告。Agent Pulse · 分析
PyTorch 核心仓库出现一条 CI 变更:PR #198326 为 pytest junit XML 解析路径补上 golden 测试。此前 upload_test_stats.py 会摄取 pytest 的 junit XML,但这条路径没有测试覆盖。新测试类 TestJunitXml 把 fixture 套件跑过 test/conftest.py 的 LogXMLReruns 与 sanitize_pytest_xml,再将归一化 XML 与 raw、sanitized 两份 golden 对比。golden 内记录所依赖的 pytest 与 pytest-rerunfailures 版本,安装版本不同即跳过;REGENERATE_JUNIT_GOLDENS=1 用于重写 golden。证据中的测试输出显示,在 pytest 9.1.1 环境下两个用例均因 golden 由其他版本生成而 SKIPPED。
这是测试基础设施的版本敏感型 golden 方案:断言对象是归一化后的 XML,而非原始输出,说明作者把 sanitize 步骤视为契约的一部分。代价是 golden 与 pytest、pytest-rerunfailures、Python 版本强绑定,版本漂移时静默跳过而非失败,覆盖可能在不被察觉的情况下失效。可验证下一信号:后续 PR 是否引入版本无关的 golden 生成方式,或把跳过改为显式告警。
判断:大型开源训练框架的 CI 正在把「测试结果上报链路」本身纳入回归保护,说明测试统计数据的可信度被视为工程资产。此类变更通常不改变外部 API,但会提高上游依赖升级时的摩擦成本。可验证下一信号:PyTorch 是否在依赖升级 PR 中同步更新这些 golden,或出现因跳过导致的统计口径偏差报告。
对下游使用 PyTorch CI 统计或自建 junit XML 解析管道的团队,这条变更提示:解析与归一化逻辑的兼容性由上游 golden 定义,升级 pytest 系列依赖时需自行验证输出形状,不能依赖上游测试通过作为保证。
若版本绑定问题持续,预计会出现按版本分目录存放 golden 或自动重生成机制;否则该测试在依赖升级窗口内长期处于跳过状态。观察点是 REGENERATE_JUNIT_GOLDENS 是否被纳入常规升级流程。