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

Joh*_*alt 6 python unit-testing code-coverage coverage.py python-unittest

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

我的Python项目中有多个模块/文件,我编写单元测试使用unittest.结构是这样的,我有生产模块module_A.pymodule_B.py一个目录(比如说myproject/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

一行,完全按需要做.

Ned*_*der 8

这应该这样做:

coverage.py run -m unittest discover
Run Code Online (Sandbox Code Playgroud)

  • 正是我要找的。我知道我只是遗漏了一些关于你的包裹的东西。谢谢!对我来说完整的解决方案是`coverage run --source myproject.production -m unittest discover && coverage report`。像魅力一样工作。 (7认同)