我搜索了很长时间,但令人惊讶地发现没有令人满意的答案。
我的Python项目中有多个模块/文件,我使用unittest
编写单元测试。结构是这样的,我在一个目录(例如module_A.py
)中有生产模块module_B.py
和myproject/production
,并在一个目录中有相应的测试文件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
这给了我很好的表格,列出了我的所有生产模块及其覆盖结果。到目前为止一切都很好。
但是我可以只使用一个命令来执行此操作吗?假设我想要在一个报告中包含2个或20个或200个测试,那么“手动”执行此操作似乎很荒谬。
必须有一种自动化方法,但我似乎无法找到它。当然shell脚本可能会这样做,但这是相当笨拙的。我正在考虑类似于unittest discover
的内容,但对于coverage.py
,这似乎不起作用。
或者我能以某种方式使用coverage-API完成此操作吗?到目前为止,我没有运气。
解决方案:(归功于Ned Batchelder先生)
从myproject/tests
目录运行:
coverage run --source myproject.production -m unittest discover && coverage report
一行,完全按照需要行事。
答案 0 :(得分:5)
这应该这样做:
coverage.py run -m unittest discover