Sto provando a configurare i nostri XCUITest iOS per l'esecuzione su AWS Device Farm, ma non importa come li compili e li carichi, i test non verranno eseguiti. Eseguono e passano quando vengono eseguiti localmente in XCode, ma non vengono eseguiti su AWS Device Farm.Creazione di test dell'interfaccia utente XCTest per AWS Device Farm
Ho impostato l'app in assoluto più semplice che riesca a provare a isolare questo problema. Consiste in una singola vista con una singola etichetta e un test dell'interfaccia utente che verifica che l'etichetta esista.
Ecco l'errore visualizzato nell'interfaccia di AWS Device Farm.
Scavando nei file di log rivela questo (in "Applicazione Output" file di log):
2016-04-03 19:07:39.842 XCTRunner[195:28521] Running tests...
2016-04-03 19:07:39.868 XCTRunner[195:28521] Unable to load configuration data from specified path ; error: The file name is invalid.
2016-04-03 19:07:39.872 XCTRunner[195:28521] Looking for test bundles in /var/mobile/Containers/Bundle/Application/883D7F70-E525-4478-9E5E-C87F72A83879/MyTestAppUITests-Runner.app/PlugIns
2016-04-03 19:07:39.875 XCTRunner[195:28521] Found test bundle at /var/mobile/Containers/Bundle/Application/883D7F70-E525-4478-9E5E-C87F72A83879/MyTestAppUITests-Runner.app/PlugIns/MyTestAppUITests.xctest
2016-04-03 19:07:39.878 XCTRunner[195:28521] Looking for configurations in /var/mobile/Containers/Bundle/Application/883D7F70-E525-4478-9E5E-C87F72A83879/MyTestAppUITests-Runner.app/PlugIns/MyTestAppUITests.xctest
2016-04-03 19:07:39.879 XCTRunner[195:28521] No configurations found, creating a default configuration that will run all tests.
2016-04-03 19:07:39.993 XCTRunner[195:28521] XCTestConfigurationHook: Using Test MyTestAppUITests/testExample
2016-04-03 19:07:39.995 XCTRunner[195:28521] XCTestConfigurationHook: Using Test MyTestAppUITests/testExample
2016-04-03 19:07:39.995 XCTRunner[195:28521] XCTestConfigurationHook: Using Test MyTestAppUITests/testExample
Test Suite 'Selected tests' started at 2016-04-03 19:07:40.008
Test Suite 'MyTestAppUITests' started at 2016-04-03 19:07:40.014
Test Case '-[MyTestAppUITests testExample]' started.
2016-04-03 19:07:40.021 XCTRunner[195:28521] *** Assertion failure in -[XCUIApplication init], /Library/Caches/com.apple.xbs/Sources/XCTest_iOS/XCTest-10112/XCTestFramework/UI Testing/XCUIApplication.m:72
2016-04-03 19:07:40.022 XCTRunner[195:28521] XCTestConfigurationHook: Ignoring skipped tests
2016-04-03 19:07:40.023 XCTRunner[195:28521] XCTestConfigurationHook: Using Test MyTestAppUITests/testExample
2016-04-03 19:07:40.025 XCTRunner[195:28521] XCTestConfigurationHook: Using Session ID 75B97C9E-6F14-4F88-A242-64B79C9A0F04
<unknown>:0: error: -[MyTestAppUITests testExample] : failed: caught "NSInternalInconsistencyException", "No target application path specified via test configuration: <XCTestConfiguration: 0x1652af60>
testBundleURL:file:///var/mobile/Containers/Bundle/Application/883D7F70-E525-4478-9E5E-C87F72A83879/MyTestAppUITests-Runner.app/PlugIns/MyTestAppUITests.xctest/
testBundleRelativePath:(null)
productModuleName:(null)
testsToSkip:(null)
testsToRun:MyTestAppUITests/testExample
reportResultsToIDE:no
sessionIdentifier:<__NSConcreteUUID 0x1655e5c0> 75B97C9E-6F14-4F88-A242-64B79C9A0F04
pathToXcodeReportingSocket:(null)
disablePerformanceMetrics:no
treatMissingBaselinesAsFailures:no
baselineFileURL:(null)
baselineFileRelativePath:(null)
targetApplicationPath:(null)
targetApplicationBundleID:(null)
reportActivities:no
testsMustRunOnMainThread:no
initializeForUITesting:no
"
(
0 CoreFoundation 0x22c9<redacted> + 150
1 libobjc.A.dylib 0x22436e17 objc_exception_throw + 38
2 CoreFoundation 0x22c8ffe1 <redacted> + 0
3 Foundation 0x23463b19 <redacted> + 92
4 XCTest 0x002625a1 -[XCUIApplication init] + 216
5 MyTestAppUITests 0x01d8a4b7 -[MyTestAppUITests setUp] + 182
6 XCTest 0x002433bf __24-[XCTestCase invokeTest]_block_invoke_2 + 198
7 XCTest 0x00274661 -[XCTestContext performInScope:] + 308
8 XCTest 0x002432f3 -[XCTestCase invokeTest] + 184
9 XCTest 0x00243a4f -[XCTestCase performTest:] + 566
10 XCTest 0x00241375 -[XCTestSuite performTest:] + 460
11 XCTest 0x00241375 -[XCTestSuite performTest:] + 460
12 XCTest 0x0024e88d -[XCTestObservationCenter _observeTestExecutionForBlock:] + 716
13 XCTest 0x00275c7f _XCTestMain + 1150
14 CoreFoundation 0x22c535b1 <redacted> + 12
15 CoreFoundation 0x22c5306d <redacted> + 216
16 CoreFoundation 0x22c515e1 <redacted> + 784
17 CoreFoundation 0x22ba4bf9 CFRunLoopRunSpecific + 520
18 CoreFoundation 0x22ba49e5 CFRunLoopRunInMode + 108
19 GraphicsServices 0x23df0ac9 GSEventRunModal + 160
20 UIKit 0x26e34ba1 UIApplicationMain + 144
21 XCTRunner 0x000fa255 XCTRunner + 33365
22 libdyld.dylib 0x22853873 <redacted> + 2
)
Test Case '-[MyTestAppUITests testExample]' failed (0.239 seconds).
Test Suite 'MyTestAppUITests' failed at 2016-04-03 19:07:40.256.
Executed 1 test, with 1 failure (1 unexpected) in 0.239 (0.242) seconds
Test Suite 'Selected tests' failed at 2016-04-03 19:07:40.259.
Executed 1 test, with 1 failure (1 unexpected) in 0.239 (0.251) seconds
Il che mi sembra l'applicazione MyAppUITests-Runner.app non ha incluso un file di configurazione che consente di indirizzare l'applicazione corretta. Quindi sospetto che abbia a che fare con il processo che sto usando per creare e caricare l'applicazione e i suoi test dell'interfaccia utente.
Il processo che sto usando per generare il file IPA L'applicazione è:
- In Xcode, clicca prodotto> Archivio
- selezionare l'archivio nella finestra Organizzatore e fare clic sul pulsante Esporta
- Selezionare " Salva per distribuzione ad hoc "e fai clic su successivo
- Seleziona" utilizza risorse di firma locali "per il provisioning
- Seleziona" Esporta un'app per tutti i dispositivi compatibili "
- "Includi manifesta per l'installazione over-the-air" è deselezionata
- "Ricostruire da codice binario che" sia selezionata
- Esporta l'IPA in una cartella sul desktop
Il processo che uso per generare il file UITests IPA è (seguenti istruzioni da http://docs.aws.amazon.com/devicefarm/latest/developerguide/test-types-ios-xctest-ui.html):
- In Xcode, selezionare "iOS Generic Device" come l'obiettivo di build
- Clicca prodotto> costruire per> T esting
- Aprire la cartella Dati derivati XCode per il progetto, andare su Build> Intermedi> Debug-iphoneos. Questo contiene 2 file: MyTestApp.app e MyTestAppUITests-Runner.app
- Creare una nuova directory chiamata "Payload" sul desktop
- Copiare il file nella directory MyTestAppUITests-Runner.app Payload
- destro clic Payload e selezionare "Comprimi 'Payload'"
- Rinominare il file generato Payload.zip a mytestapp-uitests.ipa
ho anche provato che comprende sia MyTestApp.app e MyTestAppUITests-Runner.app nel mytestapp-uitests.ipa file, ma questo non funziona neanche.
Per eseguire i test in Fattoria di dispositivo:
- Nel mio progetto di test, fare clic su "Crea un nuovo run"
- Selezionare Android/iOS
- caricare il file MyTestApp.ipa generato in precedenza (da Esportazione l'Archivio) e fare clic su Avanti
- Selezionare "XCTest UI" dalla lista, e caricare il file mytestapp-uitests.ipa
- Select pool di dispositivi che si compone di iPad Air 2, iPad Air, e iPad 2 con iOS 9.2.1 tutti
- Stato Lasciare dispositivo con le impostazioni predefinite
- Click Inizia Run
Nota che se uso lo stesso file dell'applicazione ipa e corro il built-in test Fuzz, questi lavori senza problemi - riesco a vedere le schermate con il mio test app con la sua singola etichetta.
Non riesco a vedere nulla di ovvio che mi manca. Cosa devo fare per farlo funzionare?
Ehi @telomere, ho una domanda sul processo per generare il runner UITests - Sto avendo problemi con la firma del codice quando provo a fare Product> Build For> Testing. Ricevo l'errore CodeSign: la firma del codice è richiesta per il tipo di prodotto "UI Testing Bundle" in SDK "iOS 9.3" anche se ho selezionato Do not Code Sign sul target del test dell'interfaccia utente. Hai dovuto creare un nuovo ID app per farlo funzionare? – Jure
Trovato il problema: mi mancava il profilo sviluppatore di caratteri jolly. – Jure