解决了在python中运行unittest的过多方法所产生的混乱

sor*_*rin 7 nose pytest unittest2 tox

我正在尝试实现一个完整而干净的测试python包的方法,这个方法符合以下要求:

  • 在没有设置的情况下在干净的机器上执行测试(virtualenv)
  • 多个平台收集结果
  • 多个python解释器收集结果
  • 代码覆盖率(将多次执行的结果合并到一个报告中)
  • 能够生成xml代码覆盖率报告,以便构建系统可以跟踪这种变化随时间的变化情况.
  • 能够启用基于平台的禁用测试
  • 在测试之前运行几个命令,比如pep8或autopep8
  • 并行运行测试.

我用几种方法:nose + pytest,tox + pytest但最近发现,pytest应该能够做到大部分的东西.

主要问题是我无法找到关于何时使用一种方法或另一种方法更好的明确比较.

有人可以解释这些并给出一些用例或这些配置的限制吗?......只是为了清楚说明何时采用某种方法.

最后我想要有这些选项:

  • quicktest - 在每个提交之前必须在本地运行测试
  • fulltest - 完整测试,在所有可用平台上运行它们,必须在制作新版本之前

Ana*_*kov 1

py.test 完美地满足了您的所有需求,与鼻子等其他测试运行程序相比,它是优点:

  • 具有依赖注入的固定装置 - 消除测试设置中复杂的 oop 的需要
  • 简单但功能强大的插件系统,带有许多有用的插件 - 像 pytest-xdist 这样的插件允许您根据需要在所有平台上进行测试,包括 Windows,pytest-cov 进行覆盖,pytest-cache 有助于仅运行最后失败的测试等
  • 参数化允许您使用一次写入多次运行方法来使用声明性参数进行测试
  • 使用简单的断言语句与复杂的类java语法.assertEquals(http://pytest.org/latest/assert.html
  • 越来越多