2015-06-26 15 views
40

cercavo per framework di test per l'automazione dell'interfaccia utente Android e sono incappato in UI Automator e Espresso e questa è la parte Sono confuso su -Test Android: UIAutomator vs Espresso

  1. Entrambi sono mantenuti da Google
  2. entrambi sono utilizzati per i test funzionali UI
  3. entrambi sono Android quadri solo

Così le mie domande/dubbi qui sono -

  • Qual è la differenza principale tra UI Automator e Espresso?
  • Il codice sorgente deve essere modificato per integrare uno di questi quadri?
  • Un framework ha qualche vantaggio rispetto all'altro? In caso affermativo, qual è la struttura più adatta per l'automazione dell'interfaccia utente di un'app Android?

risposta

9

Se si sta testando solo un'applicazione, quindi Espresso.

Se si sta testando più di un'applicazione o la sua integrazione con altre applicazioni o sistemi, quindi UiAutomator.

+1

potrei avere bisogno di integrazione con il sistema per l'applicazione in prova, ma è una combinazione di '' UIAutomator' e Espresso' possibile? – Shikhar

+1

Sì, entrambi possono essere utilizzati –

1

Quando si utilizza UIAutomator è necessario utilizzare un 18+ API, mentre con Espresso, si può andare a partire da API 8.

Come afferma documentazione Android, test multi-applicazione dovrebbe essere fatto con UIAutomator mentre se solo vuoi che i test vengano eseguiti all'interno del tuo pacchetto di app puoi utilizzare Espresso.

Nella parte inferiore di this documentation's page, è possibile trovare l'introduzione, nonché esempi per entrambi questi stili di test.

+0

Il livello minimo di supporto API non è un problema, ma è sicuro che in caso di 'Espresso', il codice sorgente dell'app in prova debba essere modificato? – Shikhar

33

UIAutomator: potente e con buona integrazione del sistema operativo esterno, ad es. può attivare e disattivare il WiFi e accedere ad altre impostazioni durante il test, ma non ha compatibilità con le versioni precedenti, poiché richiede Jelly Bean o versioni successive. Ma manca anche l'accesso alla vista dettagliata, quindi si potrebbe dire che potrebbe essere più un puro test black-box. Dove come Espresso ha accesso per visualizzare gli interni (vedi sotto). Questo è consigliato su developer.android.com per "Test dell'interfaccia utente per più app"

Espresso - è un po 'più leggero rispetto all'automatico ui e supporta 2.2 Froyo e su di esso ha anche un api fluente con potente hamcrest (https://github.com/hamcrest) integrazione rendendo il codice più leggibile ed estensibile (è più recente di Ui automator). Non ha accesso ai test di integrazione del sistema ma ha accesso per visualizzare gli interni, ad es. può testare una webview (utile per i test delle app ibride, o test pesanti webview). Test leggermente più grigio rispetto a UI Automator. Questo è consigliato su developer.android.com per "Test dell'interfaccia utente per una singola app". A partire da Android Studio 2.2 questo offre ora la registrazione del test dell'interfaccia utente (come UIAutomator)

+1

Il supporto minimo del livello API non è un problema ma, supponendo che non richieda alcuna integrazione di sistema durante il test, non è possibile ottenere le stesse funzionalità utilizzando 'UIAutomator' stesso? – Shikhar

+2

No. Se non si esegue il test di sistema/cross-app, personalmente andrei su Espresso. per esempio. espresso-web 2.2 è stato appena rilasciato e consente di testare le visualizzazioni Web che non sono supportate da UI Automator. L'espresso sembra ricevere molta più attenzione. Vedi https://code.google.com/p/android-test-kit/wiki/ReleaseNotes –

25

In realtà, non è necessario scegliere. UIAutomator ed Espresso usano lo stesso runner di strumentazione, quindi puoi usare i comandi di entrambi in un singolo test. Espresso ha varietà di matchers, affermazioni e azioni su interfaccia utente, che Automator non avere:

Espresso 2.1 Cheat Sheet

Espresso è in esecuzione in thread separato ed è veramente veloce rispetto ad altri framework di test.

come riepilogo: utilizzare entrambi nei test, Espresso è principale e UIAutomator come strumento aggiuntivo per l'integrazione del sistema operativo.

+0

+1 Per menzionare che puoi utilizzare entrambi. Anche se non utilizzi UIAutomator ed Espresso nello stesso test case, puoi certamente usarli entrambi in casi di test separati nella stessa suite. –

4

Ho trovato un articolo interessante, che parla del perché dovresti usarli entrambi. Date un'occhiata a:

http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html

Già Espresso è abbastanza per me, ma per alcuni motivi come le notifiche di test applicazioni Mi sarebbe in poche settimane imparare uiautomator.

Passa un po 'di tempo per

  • controllare esempi di Google di utilizzare questi quadri:

https://github.com/googlesamples/android-testing/tree/master/ui

  • letto una documentazione di questi quadri:

http://developer.android.com/training/testing/ui-testing/espresso-testing.html

http://developer.android.com/training/testing/ui-testing/uiautomator-testing.html

1

Per ottenere una nozione veloce di come entrambe le cose funzionano diamo un esempio. Proviamo a trovare e fare clic su un pulsante con il titolo "Start" sul Lollipop usando UIAutomator e Espresso:

  • UIAutomator: Bisogna cercare maiuscolo "Start", perché sui pulsanti Lollipop sono resi maiuscolo. device.findObject(new UiSelector().text("START")).click();
  • Espresso: Si potrebbe semplicemente usare R.string.start e non avrebbe bisogno di preoccuparsi di come la stringa è effettivamente reso dalla piattaforma. Non ti interessa se la vista ha textAllCaps=true o è ellipizzato. onView(withText(R.string.start)).perform(click());

TL: DR;

UIAutomator cerca viste nello stile di livello inferiore a quello espresso - attraverso il meccanismo di Strumentazione e attraversare l'albero AccessibilityNodeInfo della gerarchia vista. L'espresso al suo turno attraversa tipicamente la gerarchia della vista stessa.

0

Un vantaggio chiave dell'utilizzo di Espresso è che fornisce la sincronizzazione automatica delle azioni di test con l'interfaccia utente dell'app che si sta testando. Espresso rileva quando il thread principale è inattivo, quindi è in grado di eseguire i comandi di test al momento opportuno, migliorando l'affidabilità dei test. Questa funzionalità evita anche di dover aggiungere soluzioni temporanee, come Thread.sleep() nel codice di test.

Il framework di test Espresso è un'API basata su strumentazione e funziona con il runner di prova AndroidJUnitRunner.

Fonte: https://developer.android.com/training/testing/ui-testing/espresso-testing.html

Problemi correlati