Sonarqube 客户端无法解析 pytest 覆盖率结果

gel*_*ara 5 python pytest sonarqube gitlab-ci gitlab-ci-runner

我正在尝试为 python 项目设置 gitlab ci 管道,但 sonarqube 客户端遇到一些问题,该客户端无法解析coverage.xml 文件

\n\n

我收到的错误如下:

\n\n
INFO: Python test coverage\nINFO: Parsing report \'/builds/core-tech/tools/nlu/mix-nlu-middleware/server/tests/cov.xml\'\nWARN: Invalid directory path in \'source\' element: /bolt-webserver/bolt\nWARN: Invalid directory path in \'source\' element: /bolt-webserver/tests\nERROR: Cannot resolve the file path \'base.py\' of the coverage report, the file does not exist in all <source>.\nERROR: Cannot resolve 404 file paths, ignoring coverage measures for those files\nINFO: Sensor Cobertura Sensor for Python coverage [python] (done) | time=74ms\nINFO: Sensor PythonXUnitSensor [python]\nINFO: Sensor PythonXUnitSensor [python] (done) | time=20ms\nINFO: Sensor JaCoCo XML Report Importer [jacoco]\n
Run Code Online (Sandbox Code Playgroud)\n\n

覆盖率文件 (cov.xml) 以此开头:

\n\n
<?xml version="1.0" ?>\n<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.3476" lines-covered="10369" lines-valid="29833" timestamp="1564079534753" version="4.4.2">\n    <!-- Generated by coverage.py: https://coverage.readthedocs.io -->\n    <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->\n    <sources>\n        <source>/bolt-webserver/bolt</source>\n        <source>/bolt-webserver/tests</source>\n    </sources>\n    <packages>\n        <package branch-rate="0" complexity="0" line-rate="0.55" name=".">\n            <classes>\n                <class branch-rate="0" complexity="0" filename="base.py" line-rate="0.5955" name="base.py">\n                    <methods/>\n                    <lines>\n                        <line hits="1" number="1"/>\n                        <line hits="1" number="2"/>\n                        <line hits="1" number="3"/>\n                        <line hits="1" number="4"/>\n                        <line hits="1" number="5"/>\n                        <line hits="1" number="7"/>\n                        <line hits="1" number="9"/>\n                        <line hits="1" number="10"/>\n  .......................\n
Run Code Online (Sandbox Code Playgroud)\n\n

声纳的称呼是这样的:

\n\n
- sonar-scanner -Dsonar.projectKey=mix-nlu-middleware -Dsonar.sources=./server -Dsonar.host.url=$SONAR_SERVER_HOST -Dsonar.login=$SONAR_LOGIN -Dsonar.python.coverage.reportPaths=server/tests/cov.xml -Dsonar.junit.reportPaths=server/tests/junit-report.xml\n
Run Code Online (Sandbox Code Playgroud)\n\n

项目树如下所示:

\n\n
.\n+-- CONTRIBUTING.md\n+-- gen_version.sh\n+-- package-lock.json\n+-- README.md\n+-- scripts\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n+-- server\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- alembic.ini\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- bolt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- Bolt.egg-info\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- conf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- dev-requirements.txt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- Dockerfile\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- Dockerfile-dev\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- http.log\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- MANIFEST.in\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- pytest.ini\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- requirements.txt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- scripts\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- sdks\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- ....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- server.log\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- setup.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- templates\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 +-- tests\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 +-- .....\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \\-- version.properties\n\\-- test.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道我在这里做错了什么吗?

\n\n

我还尝试在项目和文件系统的根文件夹中创建路径 /bolt-webserver/bolt 但仍然没有成功。

\n\n

“base.py”文件和 conv.xml 中提到的其他文件位于“/builds/core-tech/tools/nlu/mix-nlu-middleware/server/tests”下

\n

gel*_*ara 0

好的,问题似乎来自 cov.xml 内容。看来 sonarqube 无法仅根据名称找到测试文件: filename="base.py" 为了解决问题,我必须更新 cov.xml 以便文件名字段包含完整的文件路径。文件名=“/base.py”