test support android android-espresso uiautomator android-uiautomator

support - android testing



Pruebas de Android: UIAutomator vs Espresso (7)

Cuando use UIAutomator debe usar una API de 18+ mientras que con Espresso, puede bajar hasta API 8.

Como dice la documentación de Android, las pruebas de aplicaciones múltiples deben hacerse con UIAutomator, mientras que si solo desea que las pruebas se ejecuten dentro de su propio paquete de aplicaciones, puede usar Espresso.

Al final de la página de esta documentación , puede encontrar la introducción, así como ejemplos de ambos estilos de prueba.

Estaba buscando marcos de prueba para la automatización de la interfaz de usuario de Android y me topé con UI Automator y Espresso y esta es la parte que me confunde:

  1. Ambos son mantenidos por Google
  2. Ambos se utilizan para pruebas de IU funcionales
  3. Ambos son marcos solo para Android

Entonces mis preguntas / dudas aquí son:

  • ¿Cuál es la principal diferencia entre UI Automator y Espresso ?
  • ¿Tendrá que modificarse el código fuente para integrar alguno de estos marcos?
  • ¿Un marco tiene alguna ventaja sobre el otro? En caso afirmativo, ¿qué marco es el más adecuado para la automatización de la interfaz de usuario de una aplicación de Android?

En realidad, no necesitas elegir. UIAutomator y Espresso usan el mismo corredor de instrumentación, por lo que puede usar comandos de ambos en una sola prueba. Espresso tiene una variedad de coincidencias, afirmaciones y acciones en la interfaz de usuario, que el automatizador no tiene:

Hoja de trucos de espresso

Espresso se ejecuta en subprocesos separados y es realmente rápido en comparación con otros marcos de prueba.

Como resumen: use ambos en sus pruebas, Espresso es principal y UIAutomator como una herramienta adicional para la integración del sistema operativo.


Encontré un artículo interesante, que habla sobre por qué deberías usarlos a ambos. Echa un vistazo a:

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

Espresso ya es suficiente para mí, pero por algunas razones, como probar las notificaciones de la aplicación, en unas pocas semanas aprendería a uiautomator .

Pase algo de tiempo para

  • Consulte los ejemplos de Google sobre el uso de estos marcos:

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

  • lea una documentación de estos marcos:

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

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


Para tener una idea rápida de cómo funcionan ambas cosas, demos un ejemplo. Intentemos encontrar y hacer clic en un botón con el título "Inicio" en Lollipop usando UIAutomator y Espresso :

  • UIAutomator : debe buscar mayúsculas "START" porque en Lollipop los botones se representan en mayúsculas. device.findObject(new UiSelector().text("START")).click();
  • Espresso : simplemente usaría R.string.start y no necesitaría preocuparse de cómo la cadena representa realmente la cadena. No le importa si la vista tiene textAllCaps=true o está elipsizada. onView(withText(R.string.start)).perform(click());

TL: DR;

UIAutomator busca vistas en un estilo de nivel inferior que Espresso , a través del mecanismo de Instrumentación y atravesando el árbol AccessibilityNodeInfo de la jerarquía de vistas. Espresso, a su vez, generalmente atraviesa la propia jerarquía de vistas.


Si está probando solo una aplicación, entonces espresso.

Si está probando más de una aplicación o su integración con otras aplicaciones o sistemas, UiAutomator.


UIAutomator: es potente y tiene una buena integración del sistema operativo externo, por ejemplo, puede encender y apagar WiFi y acceder a otras configuraciones durante la prueba, pero carece de compatibilidad con versiones anteriores, ya que requiere Jelly Bean o superior. Pero también carece de acceso a la vista detallada, por lo que se podría decir que puede ser más una prueba de caja negra pura. Donde como Espresso tiene acceso para ver elementos internos (ver más abajo). Esto se recomienda en developer.android.com para "Prueba de IU para múltiples aplicaciones"

Espresso: es un poco más liviano en comparación con el ui automator y es compatible con 2.2 Froyo y hasta también tiene una API fluida con una potente integración de Hamcrest ( https://github.com/hamcrest ) que hace que el código sea más legible y extensible (es más nuevo que Ui automatizador). No tiene acceso a las pruebas de integración del sistema, pero tiene acceso para ver las partes internas, por ejemplo, puede probar una vista web (útil para pruebas de aplicaciones híbridas o pruebas pesadas de vistas web). Ligeramente más pruebas de caja gris en comparación con UI Automator. Esto se recomienda en developer.android.com para "Probar la interfaz de usuario para una sola aplicación". A partir de Android Studio 2.2, ahora ofrece grabación de prueba de IU (como UIAutomator)


Una ventaja clave de usar Espresso es que proporciona una sincronización automática de las acciones de prueba con la interfaz de usuario de la aplicación que está probando. Espresso detecta cuando el hilo principal está inactivo, por lo que puede ejecutar sus comandos de prueba en el momento adecuado, mejorando la confiabilidad de sus pruebas. Esta capacidad también lo libera de tener que agregar soluciones temporales, como Thread.sleep () en su código de prueba.

El marco de prueba de Espresso es una API basada en instrumentación y funciona con el corredor de prueba AndroidJUnitRunner.

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