ios - delivery - No se pueden ejecutar pruebas de interfaz de usuario Xcode(7.3) en Jenkins
jenkins continuous testing (1)
Lo que ocurre es que XCTest intenta enviar el evento de inicio del botón de inicio al dispositivo, pero no recibe la notificación de finalización durante 30 segundos.
No creo que tenga nada que ver con una notificación UIAlertView
bloqueando el botón Inicio para enviar el objetivo de prueba al fondo, ya que en mi experiencia dicho problema genera un mensaje de error diferente ( "Failed to background test runner within ..."
)
No estoy familiarizado con la solución de Jenkins, pero si sospecha que el tiempo de espera es demasiado corto, puede intentar cambiarlo de la siguiente manera (alguna forma hacky que encontré).
Agregue las siguientes líneas a un código que se ejecutará antes que [XCTestDriver _runSuite]
(por ejemplo, agregue su propia función __attribute__((constructor))
y coloque este código dentro):
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");
}
Estoy tratando de ejecutar las pruebas Xcode UI desde la línea de comandos en una máquina Jenkins que funciona en mi computadora local. Sin embargo, cuando trato de ejecutar las pruebas de UI en Jenkins, parecen no iniciar la aplicación en el simulador. Lo que ocurre es que el dispositivo se carga en el simulador, se abre el objetivo de la prueba de UI y la pantalla se pone negra. Entonces, nada parece suceder durante 30 segundos hasta que recibo un error de la siguiente manera (espero que la aplicación se inicie y la automatización comience):
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
¿No se pudo iniciar la aplicación porque mi máquina Jenkins no puede abrirla lo suficientemente rápido antes de que Xcode implique un error en la prueba? ¿O podría haber una notificación que bloquee el lanzamiento de la aplicación?