【问题标题】:Generating gcda files to view the code-coverage from XCTests in IOS with Jenkins使用 Jenkins 生成 gcda 文件以查看 IOS 中 XCTests 的代码覆盖率
【发布时间】:2013-11-26 12:44:23
【问题描述】:

我想通过对生成的 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'进行调试和发布,基本上我已经按照this post做所有事情了

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

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

【问题讨论】:

  • 我也有同样的情况。当我在构建机器上运行测试构建步骤时,我找不到任何 .gcda 文件。但我可以在我的机器上找到它们。我认为这些文件是在派生数据文件夹中生成的,而不是在 Jenkins 的工作区中生成的。

标签: ios xcode jenkins continuous-integration code-coverage


【解决方案1】:

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

执行以下操作:

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

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

    XCode setup

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

  3. 进入你的jenkins项目,点击“Add build step”并选择“Execute 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!

如果有什么不适合你或者你找到了更好的解决方案,请告诉我!

【讨论】:

  • 自从我发布问题以来已经有一段时间了,目前我无法对其进行测试。逻辑很清楚,我会相信你的话;)
猜你喜欢
  • 2011-06-06
  • 2012-11-01
  • 2020-04-25
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2013-09-29
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多