多个模块的 Python 单元测试覆盖率
Posted
技术标签:
【中文标题】多个模块的 Python 单元测试覆盖率【英文标题】:Python unit test coverage for multiple modules 【发布时间】:2018-05-09 20:51:53 【问题描述】:找了半天,居然没有满意的答案。
我的 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 个测试,那么“手动”执行此操作似乎很荒谬。 p>
必须有一种方法可以自动执行此操作,但我似乎找不到它。当然,shell 脚本可以做到这一点,但这是相当笨拙的。我正在考虑类似于unittest discover
的东西,但对于coverage.py
,这似乎不起作用。
或者我可以使用 coverage-API 以某种方式完成此任务吗?到目前为止,我没有运气尝试。
.
解决方案:(感谢 Ned Batchelder 先生)
从myproject/tests
目录运行:
coverage run --source myproject.production -m unittest discover && coverage report
一行,做需要做的事。
【问题讨论】:
你知道nose2吗,可以试试。 github.com/nose-devs/nose2 【参考方案1】:应该这样做:
coverage.py run -m unittest discover
【讨论】:
正是我想要的。我知道我只是错过了关于你的包裹的一些东西。谢谢!我的完整解决方案是coverage run --source myproject.production -m unittest discover && coverage report
。像魅力一样工作。以上是关于多个模块的 Python 单元测试覆盖率的主要内容,如果未能解决你的问题,请参考以下文章