XCTests在模拟器上间歇性地无法启动应用程序

19

有人遇到并解决以下问题吗:

XCTests在模拟器中进行UI测试时,偶尔无法启动应用程序。我正在通过fastlane运行,每次测试运行都会出现不同的失败情况。

操作系统:10.12.3 iOS模拟器版本:10.0 Xcode 8.2.1 Fastlane 2.11.0

尝试通过在测试的设置和启动之间添加3秒的延迟来修复它,但仍然出现,虽然可能不是经常出现,但仍然存在...

UI测试失败 - 尝试启动失败 <XCUIApplicationImpl: 0x600000231b20 no.something.bb.debug at /Users/server/Library/Developer/Xcode/DerivedData/ex-gmtcdujyggxwfrarizpgaromjfxj/Build/Products/Debug-iphonesimulator/BB.app>: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "请求 打开“no.something.bb.debug”失败。" UserInfo={NSLocalizedDescription=请求打开“no.something.bb.debug”失败, NSLocalizedFailureReason=由于原因(应用程序“no.something.bb.debug”正在安装或卸载,因此无法启动),服务委托(SBMainWorkspace)拒绝了请求。 BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x6080002598f0 {Error Domain=FBSOpenApplicationErrorDomain Code=6 "应用程序“no.something.bb.debug”正在安装或卸载,因此无法启动。" UserInfo={BSErrorCodeDescription=Busy, NSLocalizedFailureReason=应用程序“no.something.bb.debug”正在安装或卸载,因此无法启动。}}}


当您从Xcode运行UI测试而不是直接从Fastlane运行时,您的UI测试是否有效? - HardikDG
在我的情况下,使用XCode在本地机器上的测试总是成功的,但是在使用XCode服务器运行时,每个测试有大约3%的机会失败。由于我们有超过200个UI测试,因此服务器上的构建几乎总是会失败。(在2周内我们只有1次成功的构建)@HardikDG - Edwin Vermeer
将机器升级为SSD并允许5次失败可以消除大部分错误,尽管有时仍会出现,但不像以前那样频繁...(只允许5次尝试并没有帮助,但升级+重试的组合有效)。 - David Karlsson
2个回答

3

我遇到了同样的问题。我发现有一个rader可以解决这个问题。在评论中,我找到了一个提示,我在一个函数中实现了重试。

参数数组是一个枚举值的数组,其中基本类型为String。我将其用于应用程序参数。

不幸的是,这仍然不能完全证明。在我的情况下,失败次数大大减少,但并没有消失。

var app: XCUIApplication = XCUIApplication()
public func tryLaunch<T>(_ arguments: [T], _ counter: Int = 10) where T: RawRepresentable {
    sleep(3)
    XCUIApplication().terminate()
    sleep(3)

    app = XCUIApplication()
    app.launchArguments = arguments.map { $0.rawValue as! String }
    app.launch()
    sleep(3)
    if !app.exists && counter > 0 {
        tryLaunch(arguments, counter - 1)
    }
}

上述函数包含在https://github.com/evermeer/UITestHelper中。

请参考以下链接:https://github.com/lionheart/openradar-mirror/issues/16226 和 https://openradar.appspot.com/29735288。 - Edwin Vermeer
1
即使不是完美的解决方案,这个方法也很棒,@Edwin。看起来它已经减少了我收到的“Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.test.SomeTest-Runner"`的数量。谢谢! - Laser Hawk
@EdwinVermeer,那么你是在每个测试方法之前调用tryLaunch吗? - regetskcob

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接