pytest生成的进程覆盖率
我正在尝试获取由pytest启动的Python进程的覆盖率。以下是我采取的步骤:
- 在我的本地站点包目录中创建一个sitecustomize.py模块
#/home/Olumide/.local/lib/python3.10/site-packages/sitecustomize.py
import coverage
coverage.process_startup()
- 设置环境变量
COVERAGE_PROCESS_START
,具体命令是export COVERAGE_PROCESS_START=True
- 运行测试,命令是
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 的环境变量,如果这个变量被设置了,就会开始进行覆盖率测量。这个环境变量的值会被用作配置文件的名称。
你需要把配置文件的路径作为这个环境变量的值。