使用并行运行和xcodebuild验证不稳定的UI测试

时间:2019-06-05 03:34:38

标签: swift xcode xctest xcodebuild

我对某些UI测试的脆弱性有疑问。我希望能够在多个模拟器中多次运行一个特定的测试。想法是将此解决方案应用于本地主机,然后应用于CI服务器。

一个完美的解决方案是,如果有任何选项可以将我的PR中的某些测试标记为flaky,然后在xcodebuild test期间运行它们而无需明确指定其名称。

我知道可以并行运行测试,但是我想在模拟器的副本上多次运行一个测试,而不是在它们之间分发测试。我想这应该更简单。

我发现了Can I run an XCTest suite multiple times?主题,其中描述了如何使用measureBlock运行连续测试,但是我不确定如何指定运行次数。 我的背景是C#,我只能访问Repeat(x)和案例Category,可以在测试运行期间指定它们。我正在寻找类似的东西。

将测试类别标记为Flaky->应用属性Retry(10)->使用命令工具运行所有Flaky类别的测试

寻找一些想法,我该怎么做才能为我的iOS测试实现这种解决方案。

1 个答案:

答案 0 :(得分:0)

重新运行不稳定的UI测试问题的简短答案是,XCTest和xcodebuild不支持此选项。因此,这是不可能的。

更长的答案是-,有可能,只是不容易实现。

您将需要:

  1. CI环境,它将使用完整的测试集运行xcodebuild命令
  2. 从测试结果(或其他类似语言)中获取失败测试的python脚本
  3. 对CI运行器的管理访问权限(或至少具有R / W访问权限)

如何做到?

您的测试将在第一个xcodebuild test...中运行(有些会失败)。您将完成这些测试,并使用您自己编写的脚本来解析那些失败的测试。您可以从例如StandardOutputAndError.txt文件(how do you find it?),这就是为什么您需要完全访问CI运行器的原因。

脚本从结果文件解析失败的测试后,您可以使用该脚本构建新的xcodebuild命令,该脚本将仅运行已解析的测试,因为它们失败了。新的xcodebuild将使用only-testing:标志(是的,您可以在多个xcodebuild中使用多个)来指定测试,它应该运行(how to use these flags?)。

此后,新的构造xcodebuild命令将返回到CI环境并在其中执行。我正在处理类似的事情(在python脚本中构造xcodebuild以便仅根据iOS项目中的更改运行测试并在CI中执行测试),my question应该可以帮助您实现执行和CI环境。

总结一下:,对此没有本机支持,但,如果您足够勇敢,可以做到这一点:-)

希望,这有帮助。

E:哦,不,您不能(也不应)使用measureBlock。这些仅用于性能测试,没有诸如重新运行失败的测试之类的功能。