吾八哥博客

您现在的位置是:首页 > DevOps > 测试工具 > 正文

测试工具

配置Docker+Sonarqube+MySQL的Python代码分析平台(下)

吾八哥2018-05-01测试工具8811

上篇里我们搭建了SonarQube代码分析平台的运行环境,今天我们就来尝试来一个具体的实战内容,选取一个项目将代码分析结果显示在sonar平台里,今天这里我选取的是Python项目。

sonar插件安装

    Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。今天这里就简单介绍下插件的安装方法了,咱们就拿中文语言插件来试试,安装插件之前首先要登录系统,点击右上角“Login in”然后输入默认的用户名密码都为“admin”。中文语言插件安装方法为:Administration -> Marketplace,然后输入"chines"即可自动搜索到中文语言包,点击后面的"Install"等待安装完成,截图如下:

QQ截图20180501174333.png

安装完成后会提示重启sonar系统,点击提示里的重启按钮等待重启完成再次进去sonar管理界面就是中文界面的了。其他的插件安装方法也是类似的。Python代码的项目的扫描插件为SonarPython,检查下如果未安装则同样的方法安装一下。

配置SonarQube Scanner

    SonarQube Scanner作为代码扫描的工具,通过它将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。 可以认为SonarQube Scanner就是SonarQube的客户端。下载地址以及使用说明连接为:

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner 

    我这里下载的是Windows版本,将其解压到磁盘的某个文件夹内,然后将其路径配置为环境变量即可。“conf\sonar-scanner.properties”里的“sonar.host.url”是用于修改sonar服务器的配置信息的,我这里都是本机所以保持默认,实际的工作场景不一定是本机,所以到时候记得修改并且去掉注释符号就行。现在来找一个Python代码项目,在项目文件夹的根目录下放置“sonar-project.properties”配置文件,具体配置信息为:

sonar.projectKey=Python-Test
sonar.projectName=Python-Test
sonar.projectVersion=1.0
sonar.sources=itchat
sonar.language=py
sonar.sourceEncoding=UTF-8

按照配置信息的节点名称很好理解是表示什么意思的,这里就不具体去标注了。需要注意的就是sonar.sources是用于指定源码的文件夹的,相对于该配置文件的目录。然后命令行切换到该项目的文件夹目录,执行命令“sonar-scanner”等待扫描完成即可,如果出错了会有错误信息提示的。按照错误提示去解决即可,一般来说配置文件写对了都没什么问题的。上面的扫描过程执行成功后,会在sonar的web界面里展示该项目的代码扫描结果,如图:

QQ图片20180501231201.png

Pylint报告

    Pylint是一个Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准和有潜在问题的代码。安装方法为:“pip install pylint”,命令行生成报告的方法为:

pylint <module_or_package> -r n --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" > <report_file>

sonar-project.properties文件配置修改说明为:

Property

Scope

Example

Description

sonar.python.pylintSystem-wide/usr/local/bin/pylint

Path to the pylint executable to use in pylint analysis. Set to empty to use the default one (default is pylint).

It must to be set on Windows. Use either masked backslashes or slashes as path separators; examples: C:\\Python26\\Scripts\\pylint.bat or C:/Python/26/Scripts/pylint.bat

sonar.python.pylint_configProject-wide.pylintrc

Path to the pylint configuration file (relative to project root or absolute) to use in pylint analysis. Set to empty to use the default.

sonar.python.pylint.reportPathProject-widepylint-report.txt

SINCE 1.4

Ant pattern describing the path to Pylint report, relative to projects root. No default value. The report have to conform to format "{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}".


覆盖率报告

    对于Python代码项目,sonar的覆盖率需要通过python插件coverage来完成,官方地址为:https://pypi.org/project/coverage/  首先在Python里通过“pip install coverage”来安装该插件,具体使用方法可以参考官方文档:https://coverage.readthedocs.io/en/coverage-4.5.1/  ,大概的步骤即为通过coverage插件来生成coverage.xml文件,然后SonarQube Scanner扫描代码的时候就能将覆盖率报告传送到sonar系统了。而生成coverage.xml的方法我们可以通过coverage插件提供的coverage命令来完成,根据官方文档得知可以使用如下方法:

coverage erase
coverage run --branch --source=<python packages> <program> 
coverage xml -i

按照上述命令执行后,得到了coverage.xml文件,然后修改sonar-project.properties配置文件,修改说明如下:

sonar.python.coverage.reportPathProject-wide*coverage-*.xml

SINCE 1.1

Ant pattern describing the path to coverage reports, relative to projects root. Leave unset to use the default ("coverage-reports/*coverage-*.xml").

The reports have to conform to the Cobertura XML format.


单元测试报告

    Python里单元测试报告要借助nose,连接为:https://nose.readthedocs.io/en/latest/  该连接里都有具体的安装说明,生成单元测试报告的方法为:

nosetests --with-xunit [tests to execute]

sonar-project.properties文件需要做如下配置修改,注意版本的说明。

Property

Scope

Example

Description

sonar.python.xunit.reportPathProject-widenosetests.xml

SINCE 1.1

Ant pattern describing the path to unit tests execution reports, relative to projects root. Leave unset to use the default ("xunit-reports/xunit-result-*.xml").

Reports have to conform to the JUnit Report XML format.

sonar.python.xunit.skipDetailsProject-widetrue

SINCE 1.4

When enabled the test execution statistics is provided only on project level. Use this mode when paths in report are not found. Disabled by default.

简单总结

    完成了上述步骤后,sonar-project.properties文件则修改为如下:

sonar.projectKey=Python-Test
sonar.projectName=Python-Test
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=py
sonar.sourceEncoding=UTF-8

sonar.python.pylint=/usr/local/bin/pylint
#sonar.python.pylint=C:\\Python36\\Scripts\\pylint.bat
sonar.python.pylint_config=.pylintrc
sonar.python.pylint.reportPath=pylint-report.txt
sonar.python.coverage.reportPath=*coverage-*.xml
sonar.python.xunit.reportPath=nosetests.xml
sonar.python.xunit.skipDetails=true

配置文件修改好后,则可以重新执行“sonar-scanner”来检测代码质量了。一个针对于Python项目的代码质量分析平台也算是能工作了,大家可以自己动手试试。如果遇到问题欢迎在群里沟通交流!