2014-04-07 6 views
13

Così mi è venuta l'idea di testare l'implementazione del tracciamento dello schermo (con Google Analytics) sulla mia app utilizzando l'automazione dell'interfaccia utente.Test del tracciamento dello schermo con automazione dell'interfaccia utente su iOS

L'idea originale era di creare uno script dell'interfaccia utente per passare attraverso gli schermi mentre si verificava se gli eventi di tracciamento venivano inviati di conseguenza. Ho bisogno di questo come a volte non sono in grado di comporre tutto fuori dai controller di visualizzazione o gli eventi non vengono inoltrati nell'ordine previsto. Indipendentemente da ciò, dovrei testare anche questo aspetto della mia app e ho pensato che l'automazione dell'interfaccia utente fosse la risposta.

Ho implementato uno script per passare attraverso gli schermi utilizzando lo strumento di automazione dell'interfaccia utente e funziona correttamente. Sono persino arrivato a utilizzare lo tuneup js per rendere il codice più snello e facile da seguire. Mi aspettavo di avere qualcosa di simile (in termini generali, la sintassi è solo una semplificazione):

Being on screen X 
    Tap button A 
Expect screen Y and tracking event for the screen Y 

Tuttavia, per quanto ho potuto verificare, testare il tracking schermo è qualcosa che non è possibile con l'automazione dell'interfaccia utente. O mi manca qualcosa?

Ho pensato di creare una vista invisibile che rimanga in cima a tutta la gerarchia della vista e cambiandone il nome ogni volta che viene caricato un nuovo schermo per consentirmi di testarlo con l'automazione dell'interfaccia utente, ma l'idea sembrava un po 'esagerata. ..

Cosa suggerisci? Cerchi un altro strumento di automazione dell'interfaccia utente? Lo fai con i test unitari invece?

Grazie in anticipo per qualsiasi aiuto

+0

Sarebbe possibile eseguire un test manuale di Google Analytics?Forse puoi testare tre dispositivi tre volte ciascuno; il modo in cui io e il mio compagno abbiamo fatto è stato analizzare i dati del primo o due giorni di download e ho chiesto agli amici quali pagine avevano visitato. – aug2uag

+0

riferimento che GoogleAnalytics può essere utilizzato nel simulatore: http://stackoverflow.com/a/19934264/1546710 – aug2uag

+1

Voglio renderlo automatico in modo da poterlo eseguire su un server come test di regressione. Volevo includere questo in una sorta di test del flusso di lavoro per verificare che nulla fosse rotto. –

risposta

2

È possibile utilizzare un UIAlertView e ispezionano le segnalazioni. Invece di inviare gli eventi di analisi, è possibile far apparire l'avviso in modo da poterlo verificare in UIAutomation.

I framework di astrazione di analisi come AnalyticsKit forniscono un modo semplice per modificare il provider di analisi. E AnalyticsKit ha anche un esempio per questo (dai un'occhiata alla classe AnalyticsKitDebugProvider). Quindi le modifiche al codice di produzione sono minime.

si potrebbe usare una configurazione di generazione in cui si imposta una variabile di generazione per controllare l'inizializzazione delle tue analisi

id<AnalyticsKitProvider> provider 
#ifdef USE_UI_AUTOMATION_ANALYTICS 
provider = [[TestAutomationProvider alloc] init]; 
#else 
provider = [[RealProvider alloc] initWithApiKey:API_KEY]; 
#endif 

[AnalyticsKit initializeLoggers:@[provider]]; 

In UIAutomation è possibile testare per l'avviso in arrivo. È possibile utilizzare assertions.js dalla confezione tuneup.js di scrivere una funzione come questa

function checkForAlert() 
{ 
    var alert = null; 
    retry(function() { 
      log("wait until alert appaers"); 
      alert = UIATarget.localTarget().frontMostApp().alert(); 
      assertNotNull(alert, "No alert found"); 
      assertTrue("The name you can choose for the alert" == alert.name()); 
      }, 5, 1.0); 
    return alert; 
}; 

Questo combina in attesa per l'avviso e testare se apparire finalmente. Se l'avviso non viene visualizzato, il test fallirà.

Nel tuo test si utilizza questo nel modo seguente:

var analyticAlert = checkForAlert() // if alert appears it will be in the var, otherwise the test fails at this point. 
analyticAlert.buttons()["OK"].tap(); // dismiss the alert 

Per fare questo lavoro è necessario anche impostare un gestore onAlert. Altrimenti, UIAutomation cercherebbe di chiudere immediatamente l'avviso. Questo deve essere fatto prima del codice di test. La gestione degli avvisi è spiegata nei documenti di UIAutomation.

function MyOnAlertHandler(alert) 
{ 
    if("The name you choose"==alert.name()) // filter all alerts created by analytics provider 
    { 
     return true; // handle alert in your test 
    } 

    return false // automaticly dismiss all other 
} 

UIATarget.onAlert = MyOnAlertHandler; // set the alert handler 
+0

Grazie per la risposta e per aver suggerito AnalyticsKit, sembra interessante, tuttavia, manca una documentazione. Devo controllare i loro commenti più tardi. L'idea di avere un UIAlertView è molto simile a quella di avere una vista nascosta e può sembrare più interessante e più facile della mia. Tuttavia dovrei distinguere tra questi avvisi e quelli che uso per comunicare errori o informazioni all'utente. Potresti pesare su questo? –

+0

Ho cercato di delineare in maniera più approfondita l'aspetto dei test. HTH – sofacoder

Problemi correlati