2016-04-06 9 views
9

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.

enter image description here

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 è:

  1. In Xcode, clicca prodotto> Archivio
  2. selezionare l'archivio nella finestra Organizzatore e fare clic sul pulsante Esporta
  3. Selezionare " Salva per distribuzione ad hoc "e fai clic su successivo
  4. Seleziona" utilizza risorse di firma locali "per il provisioning
  5. Seleziona" Esporta un'app per tutti i dispositivi compatibili "
  6. "Includi manifesta per l'installazione over-the-air" è deselezionata
  7. "Ricostruire da codice binario che" sia selezionata
  8. 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):

  1. In Xcode, selezionare "iOS Generic Device" come l'obiettivo di build
  2. Clicca prodotto> costruire per> T esting
  3. 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
  4. Creare una nuova directory chiamata "Payload" sul desktop
  5. Copiare il file nella directory MyTestAppUITests-Runner.app Payload
  6. destro clic Payload e selezionare "Comprimi 'Payload'"
  7. 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:

  1. Nel mio progetto di test, fare clic su "Crea un nuovo run"
  2. Selezionare Android/iOS
  3. caricare il file MyTestApp.ipa generato in precedenza (da Esportazione l'Archivio) e fare clic su Avanti
  4. Selezionare "XCTest UI" dalla lista, e caricare il file mytestapp-uitests.ipa

enter image description here

  1. Select pool di dispositivi che si compone di iPad Air 2, iPad Air, e iPad 2 con iOS 9.2.1 tutti
  2. Stato Lasciare dispositivo con le impostazioni predefinite
  3. 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?

+0

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

+0

Trovato il problema: mi mancava il profilo sviluppatore di caratteri jolly. – Jure

risposta

4

Lavoro per il team AWS Device Farm. L'analisi citata di seguito è sulla strada giusta.

Which to me looks like the MyAppUITests-Runner.app application hasn't included a configuration file which allows it to target the correct application. So I suspect it's something to do with the process I am using to build and upload the application and its UI Tests.

Attualmente stiamo fissazione di un problema in cui i test non vengono raccolti se il file .xctestconfiguration manca dalla .ipa.

Una soluzione per questo problema fino a quando non viene risolto per farti correre è quello di eseguire le prove a livello locale che genererà il file nella cartella di .xctestconfiguration/Plugin .app

Prima di imballaggi per il caricamento di fattoria dispositivo solo assicurarsi che il file xctestconfiguration sia presente sotto il pacchetto .app

I test di Fuzz funzionano perché non utilizza il codice di test. Prende solo la tua app e esegue un test fuzz personalizzato contro di essa.

Un'altra nota sulla posizione di * -Runner.app è che dovresti essere in grado di trovarlo nella cartella Prodotti da Xcode ma finché puoi ottenerlo le cose dovrebbero andare bene.

Aggiornamento Questo problema è stato risolto dal tempo originale del post e non v'è la necessità di avere un file xctestconfiguration nel test corridore.

+1

Grazie. Se qualcun altro deve farlo in futuro, il file .xctestconfiguration si trova sotto il pacchetto UITests.xctests, all'interno della cartella PlugIns del pacchetto UITests-Runner.app. – telomere

+0

Ehi. Quando ti rendi conto che sarà risolto. Grazie! –

+3

@NikofTime, per eseguire i test localmente, intendo utilizzare un simulatore? Perché così facendo genera il file .xctestconfiguration in 'Debug-iphonesimulator' NON' Debug-iphoneos'. Quando ispeziono il file .xctestconfiguration generato usando xxd, vedo che fa riferimento a percorsi che sono unici per la mia macchina di sviluppo. Infine, quando copio il file generato nella mia cartella * -Runner.app/PlugIns, è destinato a trovarsi nella cartella .xctest o accanto ad esso? –

1

Ho il problema simile. Sto scavando un po 'di più, sembra che il sotto potrebbe essere il motivo per cui il test fallisce.

"Could not receive XCTest bundle ready message from testmanagerd, error code -7”

Sembra che i metodi di installazione e di smontaggio siano per default eseguiti e quindi passati. Non ne sono sicuro. Ma cercherò di ottenere più informazioni dai log.

+0

Hai trovato altre informazioni su questo? Ricevo costantemente questo errore quando provo a eseguire test Ui su Amazon Device Farm – nerowolfe

0

Una soluzione più semplice è cambiare la posizione della cartella dei dati derivati ​​- (in Xcode Preferneces -> Posizioni.

Derived Data Folder Location Change ad esempio l'ho messo nel mio cartella Utente (simile ai miei documenti)

questo errore è andato via subito dopo aver combattuto senza successo per ore. (sembra un bug Xcode)

Problemi correlati