Python 多个模块的单元测试覆盖率
Python unit test coverage for multiple modules
找了半天居然没有满意的答案
我的 Python 项目中有多个 modules/files,我为使用 unittest
编写了单元测试。结构是这样的,我在一个目录(比如myproject/production
)中有生产模块module_A.py
和module_B.py
,在一个目录中有相应的测试文件test_module_A.py
和test_module_B.py
兄弟目录(比如 myproject/tests
)。
现在我已经安装了 coverage.py
并且想要 运行 所有与项目相关的测试(即所有 .py
前缀为 test_
的文件来自 tests
目录)并收到覆盖率报告,显示所有生产模块(module_A.py
和 module_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
这让我很高兴 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
找了半天居然没有满意的答案
我的 Python 项目中有多个 modules/files,我为使用 unittest
编写了单元测试。结构是这样的,我在一个目录(比如myproject/production
)中有生产模块module_A.py
和module_B.py
,在一个目录中有相应的测试文件test_module_A.py
和test_module_B.py
兄弟目录(比如 myproject/tests
)。
现在我已经安装了 coverage.py
并且想要 运行 所有与项目相关的测试(即所有 .py
前缀为 test_
的文件来自 tests
目录)并收到覆盖率报告,显示所有生产模块(module_A.py
和 module_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
这让我很高兴 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