无法在Jenkins中运行Xcode(7.3)UI测试
我试图在我的本地计算机上工作的Jenkins机器上从命令行运行Xcode UI测试。 但是,当我尝试在Jenkins中运行UI测试时,他们似乎无法在模拟器中启动应用程序。 发生的情况是设备在模拟器中加载,UI测试目标打开,屏幕变黑。 然后似乎没有任何事情发生30秒,直到我得到如下错误(我希望应用程序启动并自动开始):
2016-04-22 11:44:54.549 XCTRunner[33303:299557] Running tests... 11:44:54.707 XCTRunner[33303:299590] _XCT_testBundleReadyWithProtocolVersion:minimumVersion: reply received 11:44:54.711 XCTRunner[33303:299587] _IDE_startExecutingTestPlanWithProtocolVersion:16 2016-04-22 11:45:24.730 XCTRunner[33303:299557] *** Assertion failure in void _XCTFailInCurrentTest(NSString *, ...)(), /Library/Caches/com.apple.xbs/Sources/XCTest_Sim/XCTest-10112/XCTestFramework/Classes/XCTestCase.m:63 2016-04-22 11:45:24.732 XCTRunner[33303:299557] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '_XCTFailInCurrentTest should only be called while a test is running. Failure description: Failed to receive completion for <XCDeviceEvent:0x7f88c85972c0 page 12 usage 64 duration 0.01s within 30.0s' *** First throw call stack: ( 0 CoreFoundation 0x0000000102369d85 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000101ddddeb objc_exception_throw + 48 2 CoreFoundation 0x0000000102369bea +[NSException raise:format:arguments:] + 106 3 Foundation 0x0000000101a27e1e -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 169 4 XCTest 0x0000000101875bbf _XCTFailInCurrentTest + 375 5 XCTest 0x000000010189717c -[XCUIDevice _dispatchEventWithPage:usage:duration:] + 847 6 XCTest 0x00000001018c2612 XCInitializeForUITesting + 575 7 XCTest 0x000000010186191d -[XCTestDriver _runSuite] + 141 8 XCTest 0x00000001018627d1 -[XCTestDriver _checkForTestManager] + 259 9 XCTest 0x00000001018aca9a _XCTestMain + 628 10 CoreFoundation 0x000000010228f2ec __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 11 CoreFoundation 0x0000000102284f75 __CFRunLoopDoBlocks + 341 12 CoreFoundation 0x00000001022846d2 __CFRunLoopRun + 850 13 CoreFoundation 0x00000001022840f8 CFRunLoopRunSpecific + 488 14 GraphicsServices 0x0000000104424ad2 GSEventRunModal + 161 15 UIKit 0x000000010271ff09 UIApplicationMain + 171 16 XCTRunner 0x00000001017e68ad XCTRunner + 6317 17 libdyld.dylib 0x0000000104c4692d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException Build step 'Execute shell' marked build as failure Finished: FAILURE
应用程序是否无法启动,因为我的Jenkins机器无法在Xcode隐式未通过测试之前足够快地打开它? 或者是否有通知阻止应用程序启动?
会发生什么是XCTest尝试将Home按钮按下事件发送到设备,但是没有收到完成通知30秒。
我不认为它与通知UIAlertView
阻止Home按钮将测试目标发送到后台有任何关系,因为根据我的经验,这样的问题会引发不同的错误消息( "Failed to background test runner within ..."
)。
我不熟悉Jenkins解决方案,但如果您怀疑超时太短,可以尝试按如下方式更改它(我找到了一些hacky方式)。
[XCTestDriver _runSuite]
添加到先前将运行的代码[XCTestDriver _runSuite]
(例如,添加您自己的__attribute__((constructor))
函数并将此代码放入其中:
extern __attribute__((weak)) void* _XCTSetEventConfirmationTimeout(NSTimeInterval); // Change the default 30 seconds timeout. long MY_NEW_EC_TIMEOUT = 120; NSLog(@"Trying to call _XCTSetEventConfirmationTimeout(%ld)", MY_NEW_EC_TIMEOUT); if (&_XCTSetEventConfirmationTimeout) { NSLog(@"_XCTSetEventConfirmationTimeout address found"); _XCTSetEventConfirmationTimeout(MY_NEW_EC_TIMEOUT); NSLog(@"_XCTSetEventConfirmationTimeout successfully called"); } else { NSLog(@"_XCTSetEventConfirmationTimeout address not found"); }