我对某些UI测试的不稳定有问题。我希望能够在多个模拟器中多次运行一个特定的测试。这个想法是将此解决方案应用于本地主机,然后应用于 CI 服务器。
一个完美的解决方案是,如果有任何选项,我可以将 PR 中的某些测试标记为flaky
然后在xcodebuild test
运行它们而不明确指定它们的名称。
我知道有一个选项可以并行运行测试,但我想在模拟器的副本上多次运行一个测试,而不是在它们之间分发测试。我想它应该更简单。
我发现我可以多次运行 XCTest 套件吗? 描述的主题是如何使用measureBlock
运行连续测试,但我不确定如何指定运行次数。 我的背景是 C#,我只能访问Repeat(x)
和案例Category
,我可以在测试运行期间指定。我正在寻找类似的东西。
将测试类别标记为Flaky
->应用属性Retry(10)
->使用命令工具运行具有Flaky
类别的所有测试
寻找一些想法,我可以做些什么来为我的iOS测试实现这种解决方案。
对于重新运行片状UI测试的问题,简短的回答是否定的,XCTest和xcodebuild不支持此选项。所以这在原生上是不可能的。
更长的答案是 -是的,这是可能的,只是不容易实现。
您将需要:
- CI 环境,它将使用全套测试运行
xcodebuild
命令 - Python脚本,用于从测试结果(或其他此类语言)中获取失败的测试
- 对 CI 运行程序的管理访问权限(或至少 R/W 访问权限)
怎么办?
您的测试将在第一个xcodebuild test...
运行(有些测试将在此过程中失败)。您将让这些完成,并且您将解析(使用由您编写的脚本)那些失败的测试。您可以从例如StandardOutputAndError.txt
文件(如何找到它?),这就是为什么您需要完全访问 CI 运行器的原因。
脚本从结果文件中分析失败的测试后,可以使用该脚本构造新的xcodebuild
命令,该命令将仅运行因失败而分析的测试。新xcodebuild
将使用only-testing:
标志(是的,您可以在一个xcodebuild
中有多个)来指定测试,它应该运行(如何使用这些标志?
在此之后,您构建的新xcodebuild
命令将返回到 CI 环境并在那里执行。我正在处理类似的事情(在 python 脚本中构造xcodebuild
以仅根据 iOS 项目中的更改运行测试并在 CI 中执行它),我的问题应该可以帮助您处理执行和 CI 环境。
总而言之:不,没有本地支持,但是是的,如果你足够勇敢,它可以做到:-)
希望,这有所帮助。
E:哦,不 - 你不能(也不应该)为此使用measureBlock
。这些用于性能测试,没有重新运行失败测试等功能。