结合python覆盖文件?

时间:2014-10-06 10:10:15

标签: python unit-testing code-coverage coverage.py python-coverage

我想知道是否可以将coverage.xml个文件合并到一个文件中以查看HTML输出中的全局报告。

我已将unit/functional tests作为1命令运行,integration tests作为第二个命令运行。这意味着我unit/functional tests的覆盖范围被unit tests覆盖。

如果我有一些针对该问题的解决方案,那将是很好的,主要是通过将这些文件组合成1个文件。

6 个答案:

答案 0 :(得分:16)

您无法合并.xml文件,但可以合并原始数据文件。您的工作流程如下所示:

$ COVERAGE_FILE=.coverage_func coverage run the_functional_tests.py
$ COVERAGE_FILE=.coverage_inte coverage run the_integration_tests.py
$ coverage combine
$ coverage xml

答案 1 :(得分:12)

我发现了一个不同的解决方案。我使用了combine功能(read here) 所以我按照coverage run -p执行我的保险,然后执行coverage combine

这就是全部。它生成1个合并报告。

答案 2 :(得分:2)

使用附加选项可以达到相同的结果。假设您在三个python脚本上运行了Coverage。第一次覆盖后,请使用-a进行追加。

coverage run first.py
coverage run -a second.py
coverage run -a third.py

打印报告

coverage report -m

输出:报告

Name             Stmts   Miss  Cover   Missing
----------------------------------------------
first.py           97      1    99%   95
second.py            1      0   100%
third.py            10      0   100%
----------------------------------------------
TOTAL               108      1    99%

答案 3 :(得分:0)

在覆盖运行命令中使用-a选项。例如:coverage run -a test1.py 这会将结果附加到现有的覆盖率文件中,并通过进行覆盖率报告进行验证

答案 4 :(得分:0)

如果您的源代码位于名为my_project的目录中,并且您在虚拟环境中包含了pytestpytest-cov,也可以执行以下操作:

pytest --cov-report html --cov=my_project unit_tests
pytest --cov-report html --cov=my_project --cov-append functional_tests

--cov-append会将功能测试覆盖率信息添加到运行单元测试时创建的覆盖率文件中。

答案 5 :(得分:0)

我有一个类似的案例,我有多个软件包,每个软件包都有其测试,并且使用自己的testrunner运行它们。因此我可以按照以下步骤合并所有coverage XML。

  1. 单独生成覆盖率报告。
    您需要导航到每个程序包并在该程序包中生成报告。这将创建.coverage文件。您还可以在[run]parallel=True中添加.coveragerc,以创建带有计算机名称和processid的coverage文件。

  2. 汇总所有报告。
    您需要将这些软件包的所有.coverage文件复制到seaparte文件夹。您可能需要运行批处理或sh脚本来复制所有coverage文件。

  3. 运行联合收割机。
    现在,当您拥有所有报告文件时,请点按该文件夹,然后运行coverage combine。这将删除所有coverage文件,并将其合并为一个.coverage文件。现在,您可以运行coverage htmlcoverage xml