Python 如何使用pytest cov生成覆盖率报告并打印到终端? 背景

Python 如何使用pytest cov生成覆盖率报告并打印到终端? 背景,python,pytest,code-coverage,pytest-cov,Python,Pytest,Code Coverage,Pytest Cov,我刚开始使用从unittest+coverage.py转换过来的pytest和pytest cov 我首先将自动测试设置为以这种方式运行: python3-m pytest--cov=myapplication 这给了我这样的输出到终端: ----------- coverage: platform linux, python 3.8.5-final-0 ----------- Name Stmts Miss Cover -----------

我刚开始使用从unittest+coverage.py转换过来的pytest和pytest cov

我首先将自动测试设置为以这种方式运行:

python3-m pytest--cov=myapplication

这给了我这样的输出到终端:

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Name                        Stmts   Miss  Cover
-----------------------------------------------
myapplication/__init__.py       0      0   100%
myapplication/file.py          30     30     0%
myapplication/another_file.py  20      6    70%
[...]
-----------------------------------------------
TOTAL                        1195    464    61%
然后我想生成一个xml报告,所以我更改了命令:

python3-m pytest--cov报告xml:coverage.xml--cov=myapplication

问题 我遇到的问题是,在添加
--cov report xml:coverage.xml
之后,我不再向终端获取任何输出

我发现:

这三个报告选项输出到文件,而不在终端上显示任何内容: [继续显示xml、html和注释报告选项]

问题: 如何在同一测试运行中生成报告并打印到终端?(这可能吗?)

(我可以运行测试套件两次,但如果可以,我想一次完成所有工作)


我正在使用以下版本:

  • Python 3.8.5
  • pytest 6.2.2(撰写本文时的最新版本)
  • pytest cov 2.11.1(---)

您可以通过使用一种终端输出格式指定另一个
--cov report
参数来执行此操作。您可以使
--cov report term
--cov report term丢失
。例如:

python3 -m pytest --cov-report term --cov-report xml:coverage.xml --cov=myapplication

有关
术语
术语缺失
的工作原理,请参见。

您可以通过使用一种终端输出格式指定另一个
--cov报告
参数来执行此操作。您可以使用
--cov报告术语
--cov报告术语缺失
。例如:

python3 -m pytest --cov-report term --cov-report xml:coverage.xml --cov=myapplication

有关
term
term missing
的工作原理,请参阅。

如果您直接使用
coverage
CLI运行,我认为您可以做到这一点。如果您将测试运行和报告分开,您可以拥有更多的控制权。为什么pytest必须生成报告?@NedBatchelder Hi,感谢您的评论和观点,它很有用请让我用另一种方式来思考这个问题。是的,也许这是最好的,就像Paul H建议的那样使用coverage.py。--尽管使用pytest的一个优点是,我猜只有一次通过,这会加快速度。(这是我的一个假设,但我还无法验证它)使用pytest生成覆盖率报告的速度并不快。在覆盖率下运行pytest,可以使用pytest cov,也可以使用
coverage Run-m pytest
。然后根据结果生成覆盖率报告。如果直接使用
coverage
CLI运行,我认为您可以这样做。如果您将运行的测试和报告。为什么pytest必须生成报告?@NedBatchelder您好,谢谢您的评论和观点,这有助于我以不同的方式思考这个问题。是的,也许最好像Paul H建议的那样使用coverage.py。--尽管使用pytest的一个优点是,我猜只有一次通过,这将是uld可以加快速度。(这是我的一个假设,但我无法验证)使用pytest生成覆盖率报告的速度并不快。在覆盖率下运行pytest,可以使用pytest cov,也可以使用
覆盖率运行-m pytest
。然后根据结果生成覆盖率报告。