多个模块的Python单元测试覆盖率

时间:2017-11-26 14:06:58

标签: python unit-testing code-coverage python-unittest coverage.py

我搜索了很长时间,但令人惊讶地发现没有令人满意的答案。

我的Python项目中有多个模块/文件,我使用unittest编写单元测试。结构是这样的,我在一个目录(例如module_A.py)中有生产模块module_B.pymyproject/production,并在一个目录中有相应的测试文件test_module_A.pytest_module_B.py兄弟目录(比如myproject/tests)。

现在我安装了coverage.py,并希望运行与项目相关的所有测试(即所有.py - 来自test_目录的前缀为tests的文件并收到一份覆盖率报告,显示所有生产模块的覆盖范围(module_A.pymodule_B.py)。

我想通过从myproject/tests目录运行以下命令可以做到这一点:

  • coverage erase
  • coverage run -a --source myproject.production test_module_A.py
  • coverage run -a --source myproject.production test_module_B.py
  • coverage report

这给了我很好的表格,列出了我的所有生产模块及其覆盖结果。到目前为止一切都很好。

但是我可以只使用一个命令来执行此操作吗?假设我想要在一个报告中包含2个或20个或200个测试,那么“手动”执行此操作似乎很荒谬。

必须有一种自动化方法,但我似乎无法找到它。当然shell脚本可能会这样做,但这是相当笨拙的。我正在考虑类似于unittest discover的内容,但对于coverage.py,这似乎不起作用。

或者我能以某种方式使用coverage-API完成此操作吗?到目前为止,我没有运气。

解决方案:(归功于Ned Batchelder先生)

myproject/tests目录运行:

coverage run --source myproject.production -m unittest discover && coverage report

一行,完全按照需要行事。

1 个答案:

答案 0 :(得分:5)

这应该这样做:

coverage.py run -m unittest discover