我对某些UI测试的脆弱性有疑问。我希望能够在多个模拟器中多次运行一个特定的测试。想法是将此解决方案应用于本地主机,然后应用于CI服务器。
一个完美的解决方案是,如果有任何选项可以将我的PR中的某些测试标记为flaky
,然后在xcodebuild test
期间运行它们而无需明确指定其名称。
我知道可以并行运行测试,但是我想在模拟器的副本上多次运行一个测试,而不是在它们之间分发测试。我想这应该更简单。
我发现了Can I run an XCTest suite multiple times?主题,其中描述了如何使用measureBlock
运行连续测试,但是我不确定如何指定运行次数。
我的背景是C#,我只能访问Repeat(x)
和案例Category
,可以在测试运行期间指定它们。我正在寻找类似的东西。
将测试类别标记为Flaky
->应用属性Retry(10)
->使用命令工具运行所有Flaky
类别的测试
寻找一些想法,我该怎么做才能为我的iOS测试实现这种解决方案。
答案 0 :(得分:0)
重新运行不稳定的UI测试问题的简短答案是否,XCTest和xcodebuild不支持此选项。因此,这是不可能的。
更长的答案是-是,有可能,只是不容易实现。
您将需要:
xcodebuild
命令如何做到?
您的测试将在第一个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
。这些仅用于性能测试,没有诸如重新运行失败的测试之类的功能。