将 Xcode 11 testresult .xcresult 转换为 JUnit?

Posted

技术标签:

【中文标题】将 Xcode 11 testresult .xcresult 转换为 JUnit?【英文标题】:Convert Xcode 11 testresult .xcresult to JUnit? 【发布时间】:2020-04-30 13:37:27 【问题描述】:

自 Xcode 11 以来,自动测试(单元测试或 UITests)生成的输出文件已变为 .xcresult(参见下面的屏幕截图)。

在 Xcode 11 之前,在 test 文件夹中创建了一个 TestSummaries.plist 文件,用于构建 JUnit 文件。

JUnit 文件随后在 Jenkins CI 中用于: - 显示测试结果 - 发送电子邮件通知团队成员失败。 - 保存结果及其参数的存档

但现在似乎没有可用的命令行工具来解析包含以下内容的 .xcresult 文件: - 测试结果 - 代码覆盖率 - 截图(对这些不太感兴趣)

我试过 xcpretty:https://github.com/xcpretty/xcpretty 但那只是说已经执行了 0 个测试,而实际上执行了 68 个测试

不确定这是否重要,但我使用 .xctestplan 及以下 xcodebuild 命令

xcodebuild -scheme Debug -workspace MyApp.xcworkspace -destination 'platform=ios Simulator,OS=12.4,name=iPhone Xs Max' test -testPlan UnitTests

我还看到 Xcode 11 附带了一个命令行工具,它解决了部分难题:

$ xcrun xcresulttool --path ResultBundle.xcresult --format json > ResultBundle.json

但这只会解析一层

我还查看了xcparse,它们似乎在正确的轨道上,例如,它解决了解析 .xcresult 文件并获取代码覆盖率和屏幕截图,但它们不知何故没有包括最重要的部分.xcresult (对于我们公司来说)是测试的结果。就像 47 成功了 4 失败了,这些都失败了,那部分。

总结:如何将 .xcresult 转换为 JUnit 文件?

奖励:我看到Apple通过调用包含了.xcresult格式的详细说明:

xcrun xcresulttool formatDescription

Apple 这样做是为了让 .xcresult 格式的未来更改可以由第三方库自动处理,因此生成 JUnit 文件的解决方案很好,生成 JUnit 文件并以某种方式与“xcrun xcresulttool”一起使用的解决方案formatDescription" 更好,因为它是未来的证明:)

【问题讨论】:

我还没有尝试过,但看起来很有希望。 github.com/fastlane-community/trainer 【参考方案1】:

我使用 xcpretty 工具将结果转换为 JUnit 格式,这对我有用。但我不使用测试计划。

也许我在 jenkins CI 中使用的命令可以帮助您进一步

xcodebuild -derivedDataPath DerivedData -scheme "<MyShema>" -destination 'platform=iOS Simulator,name=iPad Pro (9.7-inch),OS=13.5' test | /usr/local/bin/xcpretty --report junit

之后报告保存在build/reports/junit.xml

编辑:

我在这个网站https://www.raywenderlich.com/2841-beginning-automated-testing-with-xcode-part-2-2 上发现了一个有趣的工具,用于转换为junit 测试结果。 (https://github.com/ciryon/OCUnit2JUnit)

【讨论】:

在使用并行测试模拟器时有效

以上是关于将 Xcode 11 testresult .xcresult 转换为 JUnit?的主要内容,如果未能解决你的问题,请参考以下文章

XCode 6 和不带 XC 的 Ad-Hoc 分发:配置

将构建更改为 Xcode beta

使用 Xcode 11 模拟位置

Xcode 11 beta 无法在以证书问题结尾的设备上安装应用程序

Xcode:运行 XC 单元测试时,模块名称“”不是有效标识符

如何从 XCUITest(来自 Xcode 11)中的 xcresult 文件中提取详细信息?