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

Python unit test coverage for multiple modules

找了半天居然没有满意的答案

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

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

我发现我可以通过 运行 在 myproject/tests 目录中执行以下命令来做到这一点:

这让我很高兴 table 列出了我所有的生产模块及其覆盖率结果。到目前为止一切顺利。

但是我可以只用一个命令来做到这一点吗? 假设我没有 2 个而是 20 或 200 个我想包含在一份报告中的测试,这样做 "by hand" 看起来很可笑。

一定有办法自动执行此操作,但我似乎找不到。当然 shell-script 可以做到这一点,但那是相当笨拙的。我正在考虑类似于 unittest discover 的方法,但是对于 coverage.py 这似乎不起作用。

或者我可以使用覆盖率-API 以某种方式完成此操作吗?到目前为止我没有运气尝试。

.

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

来自 myproject/tests 目录 运行:

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

一行,恰到好处。

应该这样做:

coverage.py run -m unittest discover