Fundamentos del Testing en Android
El ecosistema abierto de Android crea oportunidades y desafios para los testers. La libertad que permite a miles de fabricantes personalizar Android tambien crea el desafio de fragmentacion que define el QA en Android.
Ciclo de Vida del Activity
El ciclo de vida del Activity es el concepto mas importante para testers Android. Los Activities (pantallas) pasan por transiciones de estado especificas que frecuentemente causan bugs.
Estados del Activity
Created → Started → Resumed → Paused → Stopped → Destroyed
| Callback | Cuando Se Llama | Foco de Testing |
|---|---|---|
onCreate | Activity creado por primera vez | Inicializacion, carga de datos |
onStart | Activity se vuelve visible | Configuracion de UI |
onResume | Activity obtiene foco | Refrescar datos, resumir operaciones |
onPause | Otro activity viene al frente | Guardar datos transitorios |
onStop | Activity ya no es visible | Liberar recursos pesados |
onDestroy | Activity siendo destruido | Limpieza |
Cambios de Configuracion
Cuando la configuracion del dispositivo cambia, Android destruye y recrea el Activity:
- Rotacion de pantalla (portrait ↔ landscape)
- Cambio de idioma
- Cambio de tamano de fuente
- Toggle de dark mode
- Modo multi-ventana entrar/salir
Esta es la fuente #1 de bugs especificos de Android. Prueba cada pantalla despues de:
- Rotar el dispositivo durante una operacion
- Cambiar el tamano de fuente en configuracion
- Alternar dark mode
- Entrar y salir del modo pantalla dividida
Herramientas de Testing Android
ADB (Android Debug Bridge)
ADB es la herramienta de linea de comandos para comunicarse con dispositivos Android:
# Gestion de dispositivos
adb devices # Listar dispositivos
adb install app.apk # Instalar APK
adb install -r app.apk # Reinstalar (mantener datos)
adb uninstall com.example.app # Desinstalar
# Screenshots y grabacion
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png ./
adb shell screenrecord /sdcard/video.mp4
# Gestion de apps
adb shell am start -n com.example/.MainActivity
adb shell am force-stop com.example
adb shell pm clear com.example
# Debugging
adb logcat # Ver logs
adb logcat *:E # Solo errores
Espresso
Espresso es el framework de testing de UI in-process de Google:
@Test
fun testLoginFlow() {
onView(withId(R.id.emailInput))
.perform(typeText("user@example.com"), closeSoftKeyboard())
onView(withId(R.id.passwordInput))
.perform(typeText("password123"), closeSoftKeyboard())
onView(withId(R.id.signInButton))
.perform(click())
onView(withText("Welcome"))
.check(matches(isDisplayed()))
}
UI Automator
UI Automator funciona fuera del proceso de la app, permitiendo interaccion a nivel de sistema:
@Test
fun testNotificationInteraction() {
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
device.openNotification()
val notification = device.findObject(UiSelector().text("New message"))
notification.click()
onView(withId(R.id.messageView))
.check(matches(isDisplayed()))
}
Testing Especifico de Fabricantes
Los fabricantes de Android agregan comportamientos custom que pueden romper apps:
Samsung (One UI)
- Optimizacion agresiva de bateria mata apps en segundo plano
- Manejo custom de notificaciones
- Panel Edge con interacciones adicionales
- Secure Folder crea una instancia separada de la app
Xiaomi (MIUI)
- Permiso “Autostart” requerido para procesos en segundo plano
- Gestor de permisos custom
- Gestion agresiva de RAM
- Comportamiento custom de la bandeja de notificaciones
Huawei (EMUI/HarmonyOS)
- Sin Google Play Services (usa HMS)
- Sistema custom de push notifications
- Gestion agresiva de energia
- Lista de apps protegidas
Escenarios de Testing Especificos de Android
Boton Atras y Navegacion
El boton atras de Android debe probarse en cada pantalla:
Checklist:
□ Atras desde cada pantalla navega a la pantalla anterior esperada
□ Atras desde la primera pantalla sale de la app o muestra confirmacion
□ Atras durante una operacion (cargando, guardando) maneja correctamente
□ Atras despues de deep link abre la pantalla padre correcta
□ Navegacion por gestos funciona identicamente al boton
Testing Multi-Ventana y Plegables
Escenarios:
□ App en modo pantalla dividida renderiza correctamente
□ App maneja redimensionamiento de ventana suavemente
□ Datos se preservan al entrar/salir de pantalla dividida
□ App en plegable: layout plegado vs desplegado
□ Drag and drop entre app y otra app en pantalla dividida
Testing de Intents y Deep Links
# Probar deep link
adb shell am start -a android.intent.action.VIEW -d "myapp://product/12345" com.example.app
# Probar intent de compartir
adb shell am start -a android.intent.action.SEND --es android.intent.extra.TEXT "Contenido compartido" -t text/plain com.example.app
Ejercicio: Caza de Fragmentacion Android
Escenario: Tu app funciona perfectamente en un Google Pixel 8 pero los usuarios reportan problemas en Samsung y Xiaomi.
- Push notifications no aparecen en dispositivos Xiaomi
- Reproduccion de musica en segundo plano se detiene despues de 10 minutos en Samsung
- App crashea en rotacion mientras se llena un formulario multi-paso
Solucion
Problema de notificaciones Xiaomi: MIUI requiere permiso “Autostart”. La app debe detectar Xiaomi y guiar al usuario a habilitarlo.
Audio en segundo plano Samsung: One UI mata procesos agresivamente. La app debe agregarse a “Apps sin monitoreo” o solicitar desactivar optimizacion de bateria.
Crash en rotacion: El Activity se destruye y recrea. Si los datos no se guardan en ViewModel, se pierden. Usar ViewModel para sobrevivir cambios de configuracion.
Tips Profesionales
Tip 1: Mantiene ADB en tu PATH y usalo diariamente. Limpiar datos, simular condiciones de red y capturar logs via ADB es mas rapido que cualquier herramienta GUI.
Tip 2: Prueba en Samsung primero para Android. Samsung representa 30-40% del mercado Android. Si funciona en Samsung, cubriste tu segmento mas grande.
Tip 3: Siempre prueba rotacion con datos en pantalla. Rota mientras llenas un formulario, miras un video, en un chat o durante un flujo de pago.
Puntos Clave
- El ciclo de vida del Activity y los cambios de configuracion son la fuente #1 de bugs especificos de plataforma
- ADB es una herramienta esencial — aprende los comandos clave
- Espresso prueba in-process para velocidad; UI Automator cruza limites de proceso
- Personalizaciones de fabricantes crean bugs especificos que Android stock no exhibe
- Siempre prueba rotacion, navegacion atras y modo multi-ventana