Sonarqube 与 python 测试的零覆盖率

问题描述 投票:0回答:1

我正在尝试在 gitlab 管道和 pytests 中运行 sonarqube,但它不会返回覆盖范围。 根据日志,它似乎找到了覆盖率文件,但显示覆盖率为 0%。

我非常绝望,因为已经尝试了多种解决方案和组合。

Gitlab 管道是(注释掉的东西是我运行/不运行测试的内容)

Unit tests:
  image: python:3.9-slim
  stage: test
  before_script:
    - python3 -V
    - pip install --upgrade setuptools
    - pip install ez_setup
    # - pip install unroll

    # - pip install -r requirements.txt
    - pip install pytest pytest-cov
    - pip install pytest
    - pip install pytest-metadata

  script:
    - export PYTHONUNBUFFERED=1
    # - python3 -m pytest
    # - coverage run -m pytest
    # - coverage report
    # - coverage run -m pytest -rap  --junitxml coverage.xml
    # - coverage xml -i
    - pytest -v  --cov --cov-report=xml --cov-report=html
    # - coverage lcov
    - python3 -V
    - ls -a
  coverage: /All\sfiles.*?\s+(\d+.\d+)/
  artifacts:
    # reports:
    #   cobertura: cobertura-coverage.xml
    paths:
      # - coverage.lcov
      - coverage.xml
      - .coverage
  only:
    - merge_requests
    - master
    - development


sonarqube-check:
  stage: analysis
  image: 
    name: sonarsource/sonar-scanner-cli:latest
    entrypoint: [""]
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
    GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - .sonar/cache
  script: 
    - ls -a
    - ls -a .coverage
    - sonar-scanner -X
  allow_failure: true
  only:
    - merge_requests
    - main
    - main

声纳项目文件

sonar.projectKey=XXXXX
sonar.qualitygate.wait=true
sonar.language=py
sonar.python.version=3.9
sonar.projectVersion=1.0
sonar.core.codeCoveragePlugin=cobertura
sonar.python.coverage.reportPaths=coverage.xml
sonar.python.xunit.reportPaths=coverage.xml
sonar.verbose=true
sonar.sources=src
sonar.tests=src
sonar.test.inclusions=tests/*.py, src/*.py

文件夹结构只有2个文件夹tests和src,每个文件夹中都有.py文件。

日志是

16:08:59.221 INFO: Sensor Cobertura Sensor for Python coverage [python]
16:08:59.221 DEBUG: Using pattern 'coverage.xml' to find reports
16:08:59.251 INFO: Python test coverage
16:08:59.255 INFO: Parsing report '/correctpath/coverage.xml'
16:08:59.373 DEBUG: 'src/delta.py' generated metadata as test  with charset 'UTF-8'
16:08:59.376 DEBUG: 'src/invoice.py' generated metadata as test  with charset 'UTF-8'
16:08:59.383 DEBUG: 'src/portfolio.py' generated metadata as test  with charset 'UTF-8'
16:08:59.395 DEBUG: Saving coverage measures for file 'src/p1.py'
16:08:59.420 DEBUG: Saving coverage measures for file 'src/__init__.py'
16:08:59.424 DEBUG: 'src/__init__.py' generated metadata as test  with charset 'UTF-8'
16:08:59.425 DEBUG: Saving coverage measures for file 'src/invoice.py'
16:08:59.426 DEBUG: Saving coverage measures for file 'src/delta.py'
16:08:59.428 INFO: Sensor Cobertura Sensor for Python coverage [python] (done) | time=207ms
16:08:59.429 INFO: Sensor JaCoCo XML Report Importer [jacoco]
16:08:59.435 INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
16:08:59.436 INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer

管道通过,但覆盖率为 0%。 我尝试了coverage和pytest库,以防其中一个的coverage.xml格式错误

感谢您的帮助!

python sonarqube pytest gitlab-ci sonarqube-scan
1个回答
0
投票

您必须更改声纳配置文件:

sonar.projectKey=XXXXX
sonar.qualitygate.wait=true
sonar.language=py
sonar.python.version=3.9
sonar.projectVersion=1.0
sonar.core.codeCoveragePlugin=cobertura
sonar.python.coverage.reportPaths=coverage.xml
#sonar.python.xunit.reportPaths=coverage.xml
sonar.verbose=true
sonar.sources=src/
sonar.tests=tests/
#sonar.test.inclusions=tests/*.py, src/*.py
© www.soinside.com 2019 - 2024. All rights reserved.