我正在尝试将我的 pytests 拆分到 gitlab 阶段,以减少运行它们所需的时间。然而,我很难获得完整的报道报告。由于我们数据库的设置方式,我无法使用 pytest-xdist 或 pytest-parallel。
Build:
stage: Build
script:
- *setup-build
- *build
- touch banana.xml # where I write the code coverage collected by pytest-cov
- *push
artifacts:
paths:
- banana.xml
reports:
cobertura: banana.xml
Unit Test:
stage: Test
script:
- *setup-build
- *pull
- docker-compose run $DOCKER_IMG_NAME pytest -m unit --cov-report xml:banana.xml --cov=app --cov-append;
needs:
- Build
Validity Test:
stage: Test
script:
- *setup-build
- *pull
- docker-compose run $DOCKER_IMG_NAME pytest -m validity --cov-report xml:banana.xml --cov=app --cov-append;
needs:
- Build
运行这两个阶段(构建 - 1 个作业,测试 - 2 个作业)后,我从 Gitlab 下载了banana.xml 文件,但其中没有任何内容,即使作业说 Coverage XML write to file香蕉.xml
在 gitlab 管道阶段拆分标记的测试时,我是否遗漏了如何将总覆盖率写入工件文件?
最佳答案
如果您想合并多个不同作业的覆盖率报告,则必须添加另一个阶段,该阶段将在测试后运行。这是我的一个工作示例:
# You need to define the Test stage before the Coverage stage
stages:
- Test
- Coverage
# Your first test job
unit_test:
stage: Test
script:
- COVERAGE_FILE=.coverage.unit coverage run --rcfile=.coveragerc -m pytest ./unit
artifacts:
paths:
- .coverage.unit
# Your second test job which will run in parallel
validity_test:
stage: Test
script:
- COVERAGE_FILE=.coverage.validity coverage run --rcfile=.coveragerc -m pytest ./validity
artifacts:
paths:
- .coverage.validity
# Your coverage job, which will combine the coverage data from the two tests jobs and generate a report
coverage:
stage: Coverage
script:
- coverage combine --rcfile=.coveragerc
- coverage report
- coverage xml -o coverage.xml
coverage: '/\d+\%\s*$/'
artifacts:
reports:
cobertura: coverage.xml
您还需要在存储库中创建一个包含以下内容的.coveragerc
文件,以指定coverage.py需要使用相对文件路径,因为您的测试是在不同的gitlab运行器上运行的,所以他们的完整路径不匹配:
[run]
relative_files = True
source =
./
注意:在您的情况下,最好直接使用 coverage
命令(因此 coverage run -m pytest
而不是 pytest
),因为它提供了更多选项,而且这也是 pytest 在幕后使用的。
文件中的问题是,您首先创建一个空文件,尝试从中生成报告(由于文件为空,因此不会生成任何内容),然后将其传递给两个测试作业,这两者都分别用本地覆盖报告覆盖它,然后从不使用它。
您需要以相反的方式进行操作,如我的示例所示:首先运行测试,然后在稍后阶段获取测试覆盖率数据,并从中生成报告。
关于gitlab - 将 pytest 覆盖率附加到 Gitlab CI 工件中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68413225/