生成gcda文件以使用Jenkins查看IOS中XCTests的代码覆盖率

Sta*_*alk 5 xcode continuous-integration code-coverage ios jenkins

我想通过在生成的gcda文件上运行gcovr来查看代码覆盖率.Jenkins似乎将生成的gcda文件放在Users /../ Library/developer/Xcode/DerivedData /../../../ i386中.我希望它们在Users/Shared/Jenkins/workspace /../ build/example.build/Debug-iphonesimulator/example.build/Objects-normal/i386

当我在本地使用XCode运行我的IOS项目时,它会生成gcda文件,我可以查看我的覆盖范围.我运行xcode 5,所有测试都是用XCTest创建的.

我为调试和发布设置了'Generate Test Coverage Files = YES'和'Instrument Program Flow = YES',基本上我根据这篇文章做了一切

在Jenkins中,我使用xcode插件来构建.它有两个构建命令.第一个使用目标"example"和配置调试构建.第二个Xcode构建命令使用目标"ExampleTests",配置调试,参数"test -destination OS = 7.0,name ="iPhone Retina(4英寸)"和一个方案构建.在输出中我可以看到正在运行的测试并且模拟器从建筑机械上开始.

似乎我在项目设置中遗漏了一些东西,或者没有在jenkins工作中设置正确的东西.对于XCode5,可能只有TEST_AFTER_BUILD = YES之类的东西.

小智 3

正如您所认识到的 .gcda 文件被放置在“错误”的目录中。

请执行下列操作:

  1. 在 Xcode 项目中选择应用程序目标,然后转到“编辑器 -> 添加构建阶段 -> 添加运行脚本构建阶段”
  2. 将此脚本粘贴到脚本字段中:

    echo "Creating derivedDataDirectory file"
    echo "${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}" > ${PROJECT_DIR}/derivedDataDirectory
    
    Run Code Online (Sandbox Code Playgroud)

    XCode 设置

    (这将创建一个包含派生数据目录路径的文件)

  3. 转到您的 jenkins 项目,单击“添加构建步骤”并选择“执行 shell”。

  4. 将此脚本粘贴到“命令”字段中:

    #CopyCodeCoverageFile
    echo "Start copying code coverage Files"
    
    projectname="[YOUR PROJECTNAME]"
    
    source=$(cat ${WORKSPACE}/$projectname/derivedDataDirectory)
    
    cp -a $source/. ${WORKSPACE}/$projectname/
    
    
    #CodeCoverage
    echo "Start CodeCoverage"
    
    cd ${WORKSPACE}/$projectname
    
    [YOUR PATH TO GCOVR]/gcovr -r /private/tmp/workspace/${JOB_NAME}/$projectname --xml > ${WORKSPACE}/$projectname/test-reports/coverage.xml
    
    Run Code Online (Sandbox Code Playgroud)

    插入 [您的项目名称] 和 [您的 GCOVR 路径]。如果您的 PROJECTNAME 或目标中有空格,这会造成麻烦!确保所有路径都正确!

  5. 这对我有用,如果你所有的路径都是正确的,它应该对你有用。我使用 XCode 5 在 Jenkins 上运行 XCTests。这应该与您的设置相同。如果您不使用 gcovr 为 cobertura 生成代码覆盖率,您可以删除脚本中的最后一步。如果您在使用 gvovr 时遇到问题,请尝试使用 gcovr 3.0 而不是 3.1!

如果某些内容不适合您或者您找到了更好的解决方案,请告诉我!