python - 将python测试运行信息导入sonarqube

标签 python sonarqube nose sonarqube-scan

我有一个具有如下结构的Python项目,我正在尝试将其导入SonarQube:

root
    sonar-project.properties
    src
    test
        nosetests.xml

所有测试文件都在测试文件夹中。 osetests.xml是用nose(tests)(1.3.7)生成的xml报告。

我的 sonar-scanner.properties 文件如下所示

sonar.projectKey=python-sonar
sonar.projectName=python-sonar
sonar.projectVersion=1.0
sonar.sources=src
sonar.tests=test
sonar.language=py
sonar.sourceEncoding=UTF-8
#I want the details so this is false.
sonar.python.xunit.skipDetails=false
sonar.python.xunit.reportPath=test/nosetests.xml
sonar.python.coverage.itReportPath=test/cover.xml

当尝试将项目导入 SonarQube 时,所有测试均出现以下错误,并且没有测试信息导入到 SonarQube 中。

WARN: The resource for 'unittests.testcase' is not found, drilling down to the details of this test won't be possible.

深入研究细节,我发现问题是 PythonXUnitSensor 在反射(reflect)测试用例名称的路径上查找测试文件。例如,测试位于路径 test/unitests/testcase 中,如果它在 XML 报告中具有名称 test.unitests.testcase ,则会导入它。然而,nosetests 将其命名为 unitests.testcase,因此它不会被导入。

我正在寻找一种干净的方法来解决这个问题,以便它可以在 CI 中使用并重用。我不想编辑报告,我正在寻找一种正确生成报告或按原样导入报告的方法。

最佳答案

这似乎最好在 nosetest 级别解决,即让 nosetests.xml 报告完全限定的路径。这将使 SonarPython(以及可能的其他工具)正确地进行匹配。

简单的方法:在 test 下添加一个空的 __init__.py 并重新运行测试。这将使 test 成为类路径的一部分,并且 nosetests.xml 应该报告 test.unitests.testcase

关于python - 将python测试运行信息导入sonarqube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812997/

相关文章:

python - Anaconda 中的 Jupyter 实验室不工作 :Error executing Jupyter command 'lab' : [WinError 5] Access is denied

python - 使用 Python/Selenium 抓取动态/Javascript 生成的网站

来自生成器的 Python Nose 测试未同时运行

python - Nose vs pytest - 应该让我选择的(主观)差异是什么?

python - setUpModule、tearDownModule 和 imports 可能在 Nose 底下乱序

python - pymssql - 获取格式化的 sql 而不是执行

python - 'PySide.QtCore.Signal' 对象没有属性 'connect'

java - Sonarqube 未涵盖主要代码

gradle - 找不到根项目参数的方法 sonarqube()

java - SonarQube 支持 Java9 吗?