5

我想通过在生成的 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 插件进行构建。它有两个构建命令。第一个使用目标“示例”和配置调试构建。第二个 Xcode 构建命令使用目标“ExampleTests”、配置调试、参数“test -destination OS=7.0,name=”iPhone Retina (4-inch)”和一个方案构建。在输出中我可以看到正在运行的测试模拟器在构建机器上启动。

似乎我在项目设置中错过了一些东西,或者在詹金斯的工作中没有设置正确的东西。对于 XCode5,可能只有 TEST_AFTER_BUILD=YES 之类的东西。

4

1 回答 1

3

如您所见, .gcda 文件放在“错误”目录中。

请执行下列操作:

  1. 在您的 Xcode-Project 中选择您的应用程序目标,然后转到“Editor -> Add Build Phase -> Add Run Script Build Phase”
  2. 将此脚本粘贴到脚本字段中:

    echo "Creating derivedDataDirectory file"
    echo "${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}" > ${PROJECT_DIR}/derivedDataDirectory
    

    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
    

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

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

告诉我是否有什么不适合您或您找到了更好的解决方案!

于 2014-01-08T10:47:50.837 回答