Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并显示错误“错误:无法合并配置文件。”

问题描述 投票:0回答:2

这是我们在面对问题时的设置方法。

  • 我们有一个项目,同时具有 UI 和单元测试。
  • 使用快速通道。
  • 使用在 aws ec2 实例上运行的 Jenkins 进行 CI/CD 实施。
  • 最近我们转向了 Xcode12(我知道!!!但是,迟到总比不到好)

问题陈述:

迁移到 xcode12 后,jenkins 管道无法生成

Coverage.profdata
文件,而
Slather
将使用该文件来导出代码覆盖率指标。是的,运行 xcode11 时没有发生。

我们在将

xcodebuild
命令指向适当的命令行工具版本后使用它(在本例中为 12.4)。

首先我们使用(获取模拟器 ID 后)构建应用程序

xcodebuild build-for-testing -workspace Example.xcworkspace -scheme ExampleUITests -derivedDataPath ./derivedData -destination 'platform=iOS Simulator,id=<simulator_id>'

然后我们使用

运行测试
xcodebuild test-without-building -workspace Example.xcworkspace -scheme ExampleUITests -enableCodeCoverage YES -destination 'platform=iOS Simulator,id=<simulator_id>' -derivedDataPath ./derivedData

所有 UI 测试都成功运行,但在测试套件完成时最终出现以下语句。

warning: <Path_to_derived_data>/Build/ProfileData/<Some_UUID>/<Filename>.profraw: Invalid instrumentation profile data (file header is corrupt)
error: No profiles could be merged.

P.S:这不会发生在我的本地计算机上。仅在 Jenkins ec2 实例中的 mac 上。

ios jenkins code-coverage xcodebuild xcode-ui-testing
2个回答
0
投票

我们也遇到过类似的问题。我们还使用了 fastlane。

对我们有用的修复是确保我们删除以前版本中的任何工件。你所描述的情况与我们遇到的情况非常相似。第一次运行单元测试会生成一些覆盖工件,之后执行 UI 测试也会生成覆盖工件,然后 xcov/slather 无法解析这些工件。

因此,您可以检查删除导出数据中的

Logs/Test
文件夹是否有帮助吗?如果它没有尝试完全清除派生数据,然后检查这是否有助于解决 CI 上的问题。

参见 相关主题 xcov


0
投票

Evan 我在覆盖范围中遇到了问题...我们有 10 个软件包,但我想测试并获得到目前为止仅 1 个软件包的覆盖范围..但是 corbertura.xml 显示了其他软件包的数据,而这些数据在 slather 文件中未提及..为什么它没有创建适当的包?因为声纳没有获取/发布覆盖统计数据

© www.soinside.com 2019 - 2024. All rights reserved.