使用并行运行和 xcodebuild 验证片状 UI 测试

问题描述 投票:0回答:2

我的一些 UI 测试不稳定。我希望能够在多个模拟器中多次运行一项特定测试。我们的想法是将此解决方案应用于本地主机,然后应用于 CI 服务器。

一个完美的解决方案是,如果有任何选项,我可以在 PR 中将某些测试标记为

flaky
,然后在
xcodebuild test
期间运行它们,而无需明确指定其名称。

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

我发现我可以多次运行XCTest套件吗?描述的主题是如何使用

measureBlock
来运行连续测试,但我不确定如何指定运行次数。 我的背景是 C#,我只能访问
Repeat(x)
和 case
Category
,我可以在测试运行期间指定它们。我正在寻找类似的东西。

将测试类别标记为

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

寻找一些想法,我可以做些什么来为我的 iOS 测试实现这种解决方案。

swift xcode xctest xcodebuild
2个回答
0
投票

重新运行片状 UI 测试问题的简短答案是,XCTest 和 xcodebuild 不支持此选项。所以原生是不可能的。

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

您将需要:

  1. CI 环境,它将运行
    xcodebuild
    命令以及全套测试
  2. python 脚本,用于从测试结果中获取失败的测试(或其他此类语言)
  3. 对 CI 运行程序的管理访问权限(或至少 R/W 访问权限)

如何做?

您的测试将在第一个

xcodebuild test...
中运行(有些测试会在此过程中失败)。您将让这些完成,然后您将解析(使用您编写的脚本)那些失败的测试。您可以从例如获取此信息
StandardOutputAndError.txt
文件(如何找到它?),这就是为什么您需要完全访问 CI 运行程序。

在您的脚本从结果文件中解析失败的测试后,您可以使用该脚本构造新的

xcodebuild
命令,该命令将仅运行已解析的测试,因为它们失败了。新的
xcodebuild
将使用
only-testing:
标志(是的,您可以将多个
xcodebuild
合二为一)来指定测试,它应该运行(如何使用这些标志?)。

此后,您新构造的

xcodebuild
命令将返回到 CI 环境并在那里执行。我正在处理类似的事情(在 python 脚本中构造
xcodebuild
,仅根据 iOS 项目的更改运行测试并在 CI 中执行它),我的问题应该可以帮助您解决执行和 CI 环境。

总而言之:,没有对此的原生支持,但是是的如果你足够勇敢的话,这是可以做到的:-)

希望,这有帮助。

E: 哦,不 - 你不能(也不应该)为此使用

measureBlock
。这些用于性能测试,没有重新运行失败测试之类的功能。


0
投票

如果您将测试套件迁移到测试计划中,现在就可以实现(Xcode 通常建议自动执行此操作,但这里是 Apple 提供的指南。)

测试计划配置具有“测试重复模式”选项:

  • “直到失败”(重复直到测试失败)
  • “失败重试”(重复直到通过)
  • “Up Until Maximum Repetitions”(运行设定次数)
  • “无”(测试运行一次)
© www.soinside.com 2019 - 2024. All rights reserved.