美文网首页SonarQube
iOS-SonarQue——使用slather生成覆盖率报告

iOS-SonarQue——使用slather生成覆盖率报告

作者: Aaron升 | 来源:发表于2021-04-12 20:40 被阅读0次

    传送门

    Demo源码:https://gitee.com/hcsaaron/cssonar-demo

    《iOS-SonarQue——安装及使用》

    《iOS-SonarQue——展示OCLint分析结果》

    当前文章:《iOS-SonarQue——使用slather生成覆盖率报告》

    系统环境

    Mac OS 10.15.6

    前言

    《iOS-SonarQue——展示OCLint分析结果》中已经成功在SonarQube后台展示出OCLint的分析报告了,但是覆盖率依然没任何体现。

    接下来我们就要用slather生成覆盖率报告。

    关于slather

    请看源码介绍:https://github.com/SlatherOrg/slather

    安装slather(用于生成覆盖率报告)

    sudo gem install slather
    

    如果安装报错,需要更新ruby,请移步《Mac更新ruby版本》

    用上面命令安装完后,会出现-bash: slather: command not found,搞了很久都不知道为什么。最后用下面方式安装完后就可以使用slather命令了:

    sudo gem install -n /usr/local/bin slather
    

    更新脚本

    编辑run-sonar.sh脚本,在/bin/sh sonar-scanner -X前面增加单测编译、生成覆盖率报告的shell代码

    # 运行单元测试
    xcodebuild -workspace ${PROJECT_NAME} -scheme ${TEST_TARGET_NAME} -configuration Debug -enableCodeCoverage YES -destination 'platform=iOS Simulator,name=iPhone 8' test
    # 生成单测覆盖率报告
    slather coverage -x --output-directory sonar-reports --scheme ${TARGET_NAME} --workspace ${PROJECT_NAME} CSSonarDemo.xcodeproj
    
    # 重命名覆盖率报告(sonar-swift插件默认指定路径为`sonar-reports/coverage*.xml`)
    mv sonar-reports/cobertura.xml sonar-reports/coverage.xml
    

    由于slather coverage只能指定输出文件夹,默认文件名是cobertura.xml,而SonarQube的sonar-swift插件的覆盖率报告路径指定默认为sonar-reports/coverage*.xml,因此将其进行重命。
    如果不想进行重命名操作,也可以修改SonarQube后台指定的路径及文件命名。

    最终完整脚本为:

    PROJECT_NAME="CSSonarDemo.xcworkspace"
    TARGET_NAME="CSSonarDemo"
    
    TEST_TARGET_NAME="CSSonarDemoTests"
    UITEST_TARGET_NAME="CSSonarDemoUITests"
    
    rm -rf sonar-reports
    
    mkdir sonar-reports
    
    rm -rf ./build/derivedData
    
    xcodebuild clean -UseModernBuildSystem=NO
    
    xcodebuild -workspace ${PROJECT_NAME} -scheme ${TARGET_NAME} -UseModernBuildSystem=NO -derivedDataPath ./build/derivedData -configuration Debug COMPILER_INDEX_STORE_ENABLE=NO | xcpretty -r json-compilation-database -o compile_commands.json
    
    # 生成OCLint分析报告
    oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html
    oclint-json-compilation-database -e Pods -- -report-type pmd -o sonar-reports/oclint.xml \
    -max-priority-1=9999 \
    -max-priority-2=9999 \
    -max-priority-3=9999 \
    
    # 运行单元测试
    xcodebuild -workspace ${PROJECT_NAME} -scheme ${TEST_TARGET_NAME} -configuration Debug -enableCodeCoverage YES -destination 'platform=iOS Simulator,name=iPhone 8' test
    # 生成单测覆盖率报告
    slather coverage -x --output-directory sonar-reports --scheme ${TARGET_NAME} --workspace ${PROJECT_NAME} CSSonarDemo.xcodeproj
    
    # 重命名覆盖率报告(sonar-swift插件默认指定路径为`sonar-reports/coverage*.xml`)
    mv sonar-reports/cobertura.xml sonar-reports/coverage.xml
    
    # Sonar扫描
    /bin/sh sonar-scanner -X
    

    在工程目录中再次执行以下命令:

    sh run-sonar.sh
    

    执行完成后,来看SonarQube后台,可以看到首页中的项目除了有15个异味,还呈现出覆盖率。进入具体项目,点击覆盖率,可以查看到具体覆盖情况。

    SonarQube首页 覆盖率情况

    参考资料

    slather源码:https://github.com/SlatherOrg/slather

    相关文章

      网友评论

        本文标题:iOS-SonarQue——使用slather生成覆盖率报告

        本文链接:https://www.haomeiwen.com/subject/kgcxlltx.html