pytest生成的进程覆盖率

1 投票
1 回答
57 浏览
提问于 2025-04-13 20:28

我正在尝试获取由pytest启动的Python进程的覆盖率。以下是我采取的步骤:

  1. 在我的本地站点包目录中创建一个sitecustomize.py模块
#/home/Olumide/.local/lib/python3.10/site-packages/sitecustomize.py
import coverage
coverage.process_startup()
  1. 设置环境变量COVERAGE_PROCESS_START,具体命令是export COVERAGE_PROCESS_START=True
  2. 运行测试,命令是coverage run --rcfile=.coveragerc -m pytest tests/gui/test_screenshots.py,确保当前目录包含.coveragerc文件
[run]
source = src/
parallel = True
relative_files = True
omit =
    **/tests/*

需要注意的是,脚本tests/gui/test_screenshots.py会启动一个我想要获取覆盖率的外部Python应用程序。

不幸的是,我仍然收到了警告:

/home/Olumide/repos/app/3.10_env/lib/python3.10/site-packages/coverage/control.py:887: CoverageWarning: No data was collected. (no-data-collected)
  self._warn("No data was collected.", slug="no-data-collected")

更新

我在运行测试的目录中找到了一个53248字节的.coverage文件(名为.coverage.Ubuntu-22.5371.XcjyqXNx)。我可以通过以下命令从这个文件生成HTML报告:

coverage html --data-file=.coverage.Ubuntu-22.5371.XcjyqXNx

所以看起来我已经得到了覆盖率!奇怪的是,只有__init__.py文件有覆盖率统计(100%)。我在想这是否就是警告信息的意思。

1 个回答

0

文档中提到,

它会检查一个叫做 COVERAGE_PROCESS_START 的环境变量,如果这个变量被设置了,就会开始进行覆盖率测量。这个环境变量的值会被用作配置文件的名称。

你需要把配置文件的路径作为这个环境变量的值。

撰写回答