用途:在仓库内开展突变测试。以 pyproject.toml 为变更范围与测试排除的唯一依据;mutants/ 已被 git 与 Bazel 忽略,不可同时运行多个 mutmut 任务,因为共享同一状态目录。
主要能力:启动或续跑突变测试(广泛运行或指定突变体名的聚焦运行),查看结果与完整状态,展示单个突变体,查询相关测试,生成存活突变体报告,并按根因归类分析。
常见用法:先执行 uv run tools/setup_local_dev.py 准备仓库;用 uv run mutmut run 运行(可传入突变体名聚焦);用 uv run mutmut results 或加 --all true 查看,用 uv run mutmut show MUTANT_NAME 与 uv run mutmut tests-for-mutant MUTANT_NAME 分析。需将突变体落盘时才用 uv run mutmut apply MUTANT_NAME,因为它会弄脏工作区。修复优先补强测试,非用户明确要求不改生产代码;避免追查仅删除内置防御异常或仅为 pyright 类型收窄(如 isinstance 或 is None)而存活的低价值突变体。验证依次为目标 pytest、重跑该突变体、bazelisk run --noshow_progress //tools:format 与 bazelisk test --noshow_progress //...。
报告:广泛运行后生成 mutmut_survivors_report.md,含日期、总数、击杀率、存活数、无测试数、超时数与分类汇总,按根因分组,末尾单列无趣突变体(如 typing.cast 字符串、类型收窄、守卫文本、计时统计、等价突变、不可达分支等)。分析存活体可并行按源文件派发代理后合并。
限制:不可并发运行;not checked 需等运行推进后再看;超时等问题需人工检查;自动化的时间预算需在 mutmut 外部包裹,而非寻找超时参数。