【问题标题】:How to get python unit test results in SonarQube?如何在 SonarQube 中获取 python 单元测试结果?
【发布时间】:2015-01-08 08:08:18
【问题描述】:

我正在使用 SonarQube 4.5。我已经运行了nosetests 来运行python 单元测试并创建了一个名为nosetests.xml 的xunit xml 文件。我正在通过 Sonar Jenkins 插件运行 Sonar Runner。我设置了以下声纳属性:

sonar.projectKey=yauis
sonar.projectName=YAUIS
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=py
sonar.python.xunit.reportPath=nosetests.xml
sonar.python.pylint=/usr/bin/pylint
sonar.python.coverage.reportPath=coverage.xml
sonar.python.coveragePlugin=cobertura

我在 SonarQube Runner 日志中看到以下内容:

...
15:31:20.355 INFO  - Sensor PythonXunitSensor...
15:31:20.363 INFO  - Processing report '/var/lib/jenkins/jobs/yauis/workspace/nosetests.xml'
15:31:20.363 INFO  - Parsing report '/var/lib/jenkins/jobs/yauis/workspace/nosetests.xml'
15:31:20.480 INFO  - Sensor PythonXunitSensor done: 125 ms
...

这是来自nosetests.xml 的sn-p:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="nosetests" tests="30" errors="30" failures="0" skip="0">
    <testcase classname="nose.failure.Failure" name="runTest" time="0.000">
        <error type="exceptions.ImportError" message="cannot import name get_data_parameter&#xA;-------------------- &gt;&gt; begin captured logging &lt;&lt; --------------------&#xA;py.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/rest_framework/fields.py:686: DeprecationWarning: The `blank` keyword argument is deprecated. Use the `required` keyword argument instead.&#xA;  super(DateTimeField, self).__init__(*args, **kwargs)&#xA;&#xA;py.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/rest_framework/fields.py:465: DeprecationWarning: The `blank` keyword argument is deprecated. Use the `required` keyword argument instead.&#xA;  super(CharField, self).__init__(*args, **kwargs)&#xA;&#xA;py.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/cassandra/cqltypes.py:63: UserWarning: The blist library is not available, so a normal set will be used in place of blist.sortedset for set collection values. You can find the blist library here: https://pypi.python.org/pypi/blist/&#xA;  &quot;The blist library is not available, so a normal set will &quot;&#xA;&#xA;--------------------- &gt;&gt; end captured logging &lt;&lt; ---------------------"><![CDATA[File "/usr/lib/python2.7/unittest/case.py", line 327, in run
    testMethod()
  File "/var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/nose/loader.py", line 414, in loadTestsFromName
    addr.filename, addr.module)
  File "/var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/var/lib/jenkins/jobs/yauis/workspace/src/adminapi/urls.py", line 8, in <module>
    from views import AdminApiViewHandler
  File "/var/lib/jenkins/jobs/yauis/workspace/src/adminapi/views.py", line 9, in <module>
    from common.ViewUtils import json_response, get_data_parameter
  File "/var/lib/jenkins/jobs/yauis/workspace/src/common/ViewUtils.py", line 13, in <module>
    from common.utils import get_application_uri
  File "/var/lib/jenkins/jobs/yauis/workspace/src/common/utils.py", line 550, in <module>
    from common.managers.formfactormanager import FormfactorModifier
  File "/var/lib/jenkins/jobs/yauis/workspace/src/common/managers/formfactormanager.py", line 3, in <module>
    from common.ViewUtils import get_data_parameter
'cannot import name get_data_parameter\n-------------------- >> begin captured logging << --------------------\npy.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/rest_framework/fields.py:686: DeprecationWarning: The `blank` keyword argument is deprecated. Use the `required` keyword argument instead.\n  super(DateTimeField, self).__init__(*args, **kwargs)\n\npy.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/rest_framework/fields.py:465: DeprecationWarning: The `blank` keyword argument is deprecated. Use the `required` keyword argument instead.\n  super(CharField, self).__init__(*args, **kwargs)\n\npy.warnings: WARNING: /var/lib/jenkins/jobs/yauis/workspace/.pyenv/local/lib/python2.7/site-packages/cassandra/cqltypes.py:63: UserWarning: The blist library is not available, so a normal set will be used in place of blist.sortedset for set collection values. You can find the blist library here: https://pypi.python.org/pypi/blist/\n  "The blist library is not available, so a normal set will "\n\n--------------------- >> end captured logging << ---------------------']]></error>
    </testcase>
...

SonarQube 中未显示单元测试结果。我错过了什么?

【问题讨论】:

    标签: python unit-testing configuration sonarqube


    【解决方案1】:

    这是 SonarQube 4.2+ 的一个已知问题,已修复但尚未发布:SONARPY-37

    您应该继续关注并等待 Python 插件的 1.4 版本。

    【讨论】:

    • 此修复程序是否已放入主干?我们正在运行 SonarQube 4.5.1 版
    • 好吧,如果你看看我在回答中提到的 JIRA 票证,你就会看到你的问题的答案......
    猜你喜欢
    • 2017-12-11
    • 2016-10-25
    • 2022-01-23
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多