
如何用 Cosmic Ray 在5分钟内跑通第一个 Python 变异测试从安装到出结果的完整快速入门教程【免费下载链接】cosmic-rayMutation testing for Python项目地址: https://gitcode.com/gh_mirrors/co/cosmic-rayCosmic Ray 是一款专为 Python 3 打造的变异测试mutation testing工具它能对源代码做微小的故意改错再逐一运行你的测试套件从而帮你评估测试用例到底抓不抓得住 bug。本教程带你快速完成 Cosmic Ray 安装5 分钟内跑通第一次变异测试并看懂结果。 什么是 Python 变异测试先建立直观认识普通单元测试回答我的测试能通过吗而变异测试回答更进一步的问题我的测试真的能发现错误吗原理非常简单Cosmic Ray 对源代码做一个微小改动比如把return 1234改成return 12345把break换成continue运行你的测试套件如果测试失败说明这个变异体mutant被杀死killed测试有效如果测试依然通过说明变异体存活survived你的测试可能存在盲区存活率越低测试质量越高。想了解完整的术语体系算子、分发器、会话可以阅读 docs/source/concepts.rst 中的官方概念说明。⏱️ 第1步安装 Cosmic Ray30秒最简单的方式是用 pip 安装建议在你的项目虚拟环境中执行pip install cosmic-ray安装完成后cosmic-ray命令即可使用。如果你希望从源码安装例如参与开发可以克隆仓库https://gitcode.com/gh_mirrors/co/cosmic-ray后在仓库根目录执行pip install -e .依赖与打包信息见 pyproject.toml。 第2步准备一个超小的演示项目1分钟变异测试需要两样东西被测代码和测试代码。新建一个空目录ROOT创建两个文件。被测模块mod.py刻意保持极简方便观察变异效果def func(): return 1234测试文件test_mod.pyimport unittest import mod class Tests(unittest.TestCase): def test_func(self): self.assertEqual(mod.func(), 1234)先确认测试本身能通过python -m unittest test_mod.py看到OK就代表一切就绪。⚙️ 第3步生成配置文件1分钟运行任何变异测试前需要一份 TOML 格式的配置文件告诉 Cosmic Ray 要变异哪个模块、如何跑测试cosmic-ray new-config tutorial.toml它会交互式地提问按如下方式回答[?] Top-level module path: mod.py [?] Test execution timeout (seconds): 10 [?] Test command: python -m unittest test_mod.py (1) local [?] Enter menu selection: 1生成的 tutorial.toml 内容如下每一行都有明确含义[cosmic-ray] module-path mod.py timeout 10.0 excluded-modules [] test-command python -m unittest test_mod.py [cosmic-ray.distributor] name localmodule-path要变异的模块路径可以是文件、目录或列表timeout测试超时时间防止变异导致死循环无法退出test-command运行测试的命令是最关键的一行distributor任务分发器local表示本机串行执行也支持http分发到远程多工作机并行配置文件如何被加载解析可查看 src/cosmic_ray/config.py。 第4步初始化会话并做基线校验初始化会话会为每个待执行的变异在数据库里建好任务记录约 15~30 秒 / 千行代码cosmic-ray init tutorial.toml tutorial.sqlite这会产生会话文件tutorial.sqlite。重要提醒修改了模块路径、超时、测试命令等配置或代码本身有变更时都需要重新执行init。在正式变异前务必先做基线baseline——确认未变异时测试全部通过否则后续结果没有意义cosmic-ray --verbosityINFO baseline tutorial.toml输出中出现Baseline passed. Execution with no mutation works fine.即成功。 第5步执行变异测试2分钟cosmic-ray exec tutorial.toml tutorial.sqlite该命令会找出会话中所有没有结果的变异任务逐个执行变异 → 跑测试 → 还原代码。由于我们的示例只有 2 个变异点几秒即可完成。 真实项目中如果测试套件跑 10 秒、共发现 1000 个变异点一次完整执行约需 2.7 小时——这正是会话机制的价值随时中断随时续跑。执行期间你甚至可以边跑边执行cr-report查看实时进度。 第6步查看结果并解读报告用cr-report查看会话状态cr-report tutorial.sqlite --show-pending你会看到类似输出[job-id] f168ef23dff24b75846a730858fe0111 mod.py core/NumberReplacer 0 worker outcome: normal, test outcome: killed [job-id] 929a563b613242b48dae0f2de74ad2af mod.py core/NumberReplacer 1 worker outcome: normal, test outcome: killed total jobs: 2 complete: 2 (100.00%) surviving mutants: 0 (0.00%)解读一下Cosmic Ray 在func()的数字字面量1234上发现了 2 个可用NumberReplacer算子实施的变异测试套件把两个变异体全部杀死——存活率 0%说明这个测试对这段代码是有效的。想要更直观的可视化结果一条命令生成 HTML 报告cr-html tutorial.sqlite report.html在浏览器中打开report.html可以看到每个变异的具体内容、执行结果和存活率统计。报告实现位于 src/cosmic_ray/tools/report.py 与 src/cosmic_ray/tools/html.py。 快速进阶了解内置变异算子本例只触发了NumberReplacerCosmic Ray 内置了丰富的变异算子全部位于 src/cosmic_ray/operators/ 目录算子变异方式NumberReplacer篡改数字字面量BooleanReplacer翻转布尔值ComparisonOperatorReplacement替换比较运算符如→!BreakContinue互换 break 与 continueExceptionReplacer修改异常处理KeywordReplacer替换关键字如and→or随着被测代码复杂度提升这些算子都会自动生效无需额外配置。❓ 常见问题速查测试偶发超时调大配置中的timeout值某些变异可能引入死循环这是正常的改了代码后结果异常重新执行cosmic-ray init生成新会话切勿复用旧会话想跳过某些文件在excluded-modules中加 glob 模式如**/*_test.py想看详细日志任何命令加上--verbosityINFO即可担心变异污染代码Cosmic Ray 直接在磁盘上改文件执行exec前请先提交版本库改动 总结5 分钟你已完成pip install cosmic-ray→ 准备被测代码与测试 →new-config生成配置 →initbaseline建会话并校验 →exec执行变异 →cr-report/cr-html出报告。下一步建议把这套流程接入你真实的项目重点关注存活变异体——它们是测试盲区的直接线索。完整官方教程见 docs/source/tutorials/intro/index.rst持续集成与分布式执行的进阶玩法也都有对应文档。【免费下载链接】cosmic-rayMutation testing for Python项目地址: https://gitcode.com/gh_mirrors/co/cosmic-ray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考