如何在目录上运行coverage.py?

Posted

技术标签:

【中文标题】如何在目录上运行coverage.py?【英文标题】:How to run coverage.py on a directory? 【发布时间】:2017-12-02 09:52:32 【问题描述】:

我有一个目录 tests,其中包含许多名为 test_* 的不同测试。

我尝试运行coverage run tests,但它不起作用。

如何运行单个命令来覆盖目录中的多个文件?

【问题讨论】:

【参考方案1】:

您可以使用--source 实现这一目标。例如:coverage run --source=tests/ <run_tests>

【讨论】:

【参考方案2】:

这是一个完整的示例,其中所有阶段的相同 PWD 的命令都集中在一个位置。通过一个经过处理的示例,我还包括运行覆盖之前和之后的测试和报告部分。我运行了以下步骤,它在 osx/mojave 上运行良好。

    发现并运行测试目录中的所有测试

$python -m unittest discover <directory_name>

或者 使用具有文件名模式 *_test.py

的测试发现并运行“目录”中的所有测试

$python -m unittest discover -s <directory> -p '*_test.py'

    运行覆盖所有模块

$coverage run --source=./test -m unittest discover -s <directory>/

    从同一目录获取覆盖率报告 - 无需 cd。

$coverage report -m

请注意,在上面的示例中,测试目录不必是 命名为“test”,测试模块也是如此。

【讨论】:

【参考方案3】:

使用--include 仅包含特定目录中的文件。它匹配文件路径,因此可以匹配子目录。

【讨论】:

【参考方案4】:

这里没有一个答案对我很有效。我发现覆盖率和 pytest 工作正常:

coverage run -m pytest

这是在项目文件夹中运行的。它能够找到名为 tests 的文件夹,并在其中运行所有测试(被拆分为多个 python 文件并有一个__init__.py 文件)。要查看报告运行:

coverage report

【讨论】:

以上是关于如何在目录上运行coverage.py?的主要内容,如果未能解决你的问题,请参考以下文章

如何解释 Python coverage.py 分支覆盖结果?

从 coverage.py 运行测试与从测试运行器运行覆盖

如果 py.test 从另一个目录执行它,coverage.py 不会覆盖脚本

是否可以从 coverage.py 报告中排除测试目录?

coverage.py:排除文件

为啥 Coverage.py 会忽略没有覆盖的文件?