【问题标题】:How can I use pytest-cov to both generate a coverage report and also print to terminal?如何使用 pytest-cov 生成覆盖率报告并打印到终端?
【发布时间】:2021-02-19 15:32:25
【问题描述】:

背景

我是使用 pytest 和 pytest-cov 的新手,已经从 unittest + coverage.py 切换过来了

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

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-report xml:coverage.xml --cov=myapplication

问题

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

看着the documentation for pytest-cov我发现了这个:

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

问题

如何在同一测试运行中既生成报告又打印到终端? (这甚至可能吗?)

(我可以运行测试套件两次,但如果可以的话,我想一次做所有事情)


我正在使用这些版本:

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

【问题讨论】:

  • 如果您直接使用coverage CLI 运行,我认为您可以这样做。 coverage.readthedocs.io/en/coverage-5.4/#quick-start
  • 如果您将测试运行和报告分开,您将拥有更多控制权。为什么 pytest 必须生成报告?
  • @NedBatchelder 嗨,感谢您的评论和观点,它帮助我以不同的方式思考这个问题。是的,也许这是最好的,就像 Paul H 建议的那样使用 coverage.py。 --- 使用 pytest 的一个优点是我想只有一次通过,这会加快速度。 (这是我的一个假设,但我无法证实)
  • 使用pytest生成覆盖率报告并不快。使用 pytest-cov 或 coverage run -m pytest 在覆盖范围内运行 pytest。然后根据结果生成覆盖率报告。

标签: python pytest code-coverage pytest-cov


【解决方案1】:

您可以通过使用其中一种终端输出格式指定另一个 --cov-report 参数来做到这一点。您可以拥有--cov-report term--cov-report term-missing。例如:

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

请参阅 pytest-cov docs you linked to,了解 termterm-missing 的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多