python 2和3的变异测试

mutmut的Python项目详细描述


https://travis-ci.org/boxed/mutmut.svg?branch=masterDocumentation Statushttps://codecov.io/gh/boxed/mutmut/branch/master/graph/badge.svg

mutmut是一个针对python 2和python 3的变异测试系统,重点关注 使用方便。如果你不知道什么是突变测试,试着从this article开始。

一些亮点功能:

  • 找到的突变体可以用一个简单的命令应用到磁盘上,这样就很容易处理结果
  • 支持所有测试运行程序(因为MutMUT只需要来自测试命令的退出代码)
  • 非常小且简单的实现(少于1000行)
  • 在tri.struct、tri.declarative、tri.form和tri.table上进行了测试
  • 可以使用覆盖率数据仅对覆盖线进行变异测试

安装并运行

您可以从一个简单的开始:

> pip install mutmut
> mutmut run

默认情况下,这将对“tests”或“test”文件夹中的测试运行pytest,并尝试找出要变异的代码所在。运行

mutmut --help

对于可用的标志,使用其他运行程序等。建议使用mutmut if 默认情况下,您无法在setup.cfg中添加块。那么当你 几周后回到穆特穆特,你不必再去弄旗子了,快跑吧 mutmut run它可以工作。像这样:

[mutmut]paths_to_mutate=src/backup=Falserunner=python -m pytesttests_dir=tests/dict_synonyms=Struct, NamedStruct

您可以随时停止变异运行,mutmut将在您停止的地方重新启动。是的 也足够聪明,当测试套件发生变化时,只需重新测试幸存的突变体。

要打印结果,请运行mut results。它将以命令的形式输出以应用变异:

mutmut apply 3

你可以复制粘贴这些行,然后运行,你会得到磁盘上的突变。你应该 真的有你的文件在源代码控制下变异和提交之前,你变异它!

白名单

您可以这样标记线:

some_code_here()# pragma: no mutate

以阻止这些基因的变异。我们发现您需要白名单行的一些情况是:

  • 库中的版本字符串。你真的不应该做这个测试:p
  • 优化中断而不是继续。当改变break以继续时,代码运行良好,但速度较慢。

示例突变

  • 整数文本通过添加1进行更改。所以0变成1,5变成6,等等。
  • <;已更改为<;=
  • 中断更改为继续,反之亦然

总的来说,这种突变应该是尽可能微妙的。有关完整列表,请参见\uu init\uuuu.py

工作流程

本节介绍如何使用mutmut来增强您的测试套件。

  1. 用mutmut run运行mutmut。一个完整的运行是首选,但如果你刚刚开始,你可以退出中间,并开始与你所发现的到目前为止。
  2. 用突变结果显示突变体
  3. 在运行mutmut apply 3的磁盘上应用一个存活的突变(用mutmut results中的相关突变id替换3)
  4. 编写一个失败的新测试
  5. 在磁盘上还原突变体
  6. 重新运行新测试以查看它现在是否通过
  7. 回到第二点。

mutmut在中保留一个结果缓存。mutmut缓存因此,如果要确保运行完整的mutmut运行,只需删除此文件。

你也可以告诉mutmut只检查一个突变:

> mutmut run 3

JUnit XML支持

为了更好地与ci/cd系统集成,mutmut支持生成junit xml报告(使用https://pypi.org/project/junit-xml/)。 此选项可通过调用mutmut junitxml来使用。为了定义如何处理可疑和未经测试的突变,可以使用mutmut junitxml–可疑策略=忽略–未经测试的策略=忽略。 这些策略的可能值为:

  • 忽略:不包括结果o在报告中
  • 跳过:在报告中包含“跳过”的变种人
  • 错误:将报告中的变体包含为“错误”
  • 失败:在报告中包含突变为“失败”

如果报告中包含失败的突变体,则还将包含该突变体的统一diff以用于调试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
IE中的java跨域cookie问题   重复java中已经满足的循环   编译java RMI服务器时出错   JavaServlet POST中作为参数传递的javascript大型JSON数组数据为空   java片段未每次刷新/调用   java无法编译。错误消息   java如何构造大型类?   java Hibernate:TableThingsDB。事情并不存在   java如何操作从匹配项创建的数组。发现   循环以搜索和显示数组Java的某些部分   加载或注册SQLite JDBC驱动程序时出现java问题   活动和服务之间的java连接   JavaGWTG2D:ie8中的drawImage   java在安卓中设置hessian阈值   在Tomcat中使用Logback时发生java错误