gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 04:44:08 28 4
gpt4 key购买 nike

我想通过在生成的 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)” 和一个方案构建。在输出中我可以看到正在运行的测试模拟器在构建机器上启动。

看来我可能在项目设置中遗漏了一些东西,或者没有在 jenkins 工作中设置正确的东西。对于 XCode5,也许只有 TEST_AFTER_BUILD=YES 这样的东西。

最佳答案

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

执行以下操作:

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

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

    XCode setup

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

  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

    插入 [YOUR PROJECTNAME] 和 [YOUR PATH TO GCOVR]。如果您的 PROJECTNAME 或目标有里面有空格,这样会惹麻烦!确保所有路径都正确!

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

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

关于ios - 使用 Jenkins 在 IOS 中生成 gcda 文件以查看来自 XCTests 的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961854/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com