将 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 11 beta 无法在以证书问题结尾的设备上安装应用程序