Pruebas automatizadas con Appium - 1Adevelopers/FlorAppMovil GitHub Wiki

Este módulo (appium-tests) contiene las pruebas automatizadas de interfaz de la aplicación móvil FlorApp. Las pruebas usan Appium + Java (JUnit): abren la app en un celular Android real y ejecutan los mismos pasos que haría un usuario, verificando automáticamente el resultado.

Dato Valor
Herramienta Appium 3.8 + driver UiAutomator2 8.7
Lenguaje / framework Java 17 + JUnit 4
Cliente Appium io.appium:java-client:9.3.0
Dispositivo probado Samsung Galaxy J7 Pro (SM-J730GM) por USB
Responsables Eric Heredia, Kiara Fernández
Reporte LoginTest

1. ¿Cómo funciona?

LoginTest (Java/JUnit)  ──►  Servidor Appium (PC, puerto 4723)  ──►  Celular Android (USB)
 "tocá Iniciar sesión,         traduce las órdenes y                 la app ejecuta las
  escribí el email..."         controla el dispositivo               acciones sola
  1. La prueba en Java le envía órdenes al servidor Appium.
  2. Appium, mediante el driver UiAutomator2, controla el celular conectado por USB.
  3. La app se maneja sola: toca botones, escribe texto y navega entre pantallas.
  4. La prueba verifica (assert) que la app se comporte como dice el caso de prueba. Si una verificación no se cumple, la prueba falla.

Las pruebas están en un módulo aparte del código de la app (app), para no mezclar las pruebas con el código de producción.


2. Pruebas implementadas

ID automatización Caso de prueba Método Qué verifica
AUT-LOG-01 TC-LOG-01 – Autenticación exitosa con credenciales válidas LoginTest.testLoginExitoso Login correcto → se abre la Galería con el botón "Mi Perfil" en la barra de navegación (sesión activa) → LoginActivity queda cerrada

Relación entre los pasos del caso y el código (AUT-LOG-01)

Paso del TC-LOG-01 Qué hace la prueba
1-2. Abrir la app y presionar "Iniciar sesión" Espera que termine la bienvenida y toca btnLogin en la pantalla de ingreso
3-4. Ingresar correo y contraseña Escribe en etUsuario y etPassword
5. Presionar "Iniciar sesión" Oculta el teclado y toca btnLogin
6-7. Verificar Galería y sesión activa Espera txtIngreso (barra de navegación inferior), verifica que diga "Mi Perfil" y que la pantalla actual sea GaleriaActivity
8. Verificar que LoginActivity fue cerrada Presiona "Atrás" y verifica que no se vuelva a LoginActivity

Los elementos de la pantalla se buscan por su android:id, el mismo que figura en los archivos XML de los layouts (por ejemplo com.ispc.florappmovil:id/btnLogin).


3. Requisitos

Requisito Para qué
Android Studio (con su JDK 17 incluido) Compilar y ejecutar la prueba
Node.js LTS (v20.19 o superior) Appium funciona sobre Node.js
Appium y el driver UiAutomator2 Controlar el celular
Celular Android con depuración USB activada Dispositivo donde se ejecuta la prueba
App FlorApp instalada en el celular Es la app que se prueba
Backend Django funcionando (runserver 0.0.0.0:8000) El login consulta al servidor
Usuario de prueba registrado: [email protected] / UserPass123 Credenciales que usa la prueba

4. Instalación (una sola vez por computadora)

4.1 Node.js

Descargar e instalar la versión LTS desde nodejs.org. Comprobar en una terminal:

node -v
npm -v

4.2 Appium y el driver de Android

npm install -g appium
appium -v
appium driver install uiautomator2
appium driver list --installed

En la última lista tiene que aparecer uiautomator2.

4.3 Variables de entorno (Windows)

Buscar en Windows "Editar las variables de entorno de esta cuenta" y crear, en Variables de usuario:

Variable Valor (ejemplo)
ANDROID_HOME C:\Users\<usuario>\AppData\Local\Android\Sdk
JAVA_HOME C:\Program Files\Android\Android Studio\jbr

En la variable Path agregar dos líneas nuevas:

%ANDROID_HOME%\platform-tools
%JAVA_HOME%\bin

La ruta del SDK se ve en Android Studio: File → Settings → Languages & Frameworks → Android SDK → Android SDK Location.

Cerrar y volver a abrir la terminal, y comprobar (con el celular conectado por USB):

echo %ANDROID_HOME%
"%JAVA_HOME%\bin\java" -version
adb devices

adb devices tiene que mostrar el celular con el estado device.

4.4 Revisión automática

appium driver doctor uiautomator2

Tiene que terminar con "0 required fixes needed". Los avisos opcionales (bundletool, ffmpeg, gstreamer) no son necesarios para estas pruebas.


5. Ejecutar las pruebas

5.1 Antes de cada ejecución

  1. Encender el servidor Appium en una terminal y dejarla abierta:
    appium
    
    Tiene que aparecer: Appium REST http interface listener started on http://0.0.0.0:4723
  2. Encender el backend Django (python manage.py runserver 0.0.0.0:8000).
  3. Conectar el celular por USB, desbloqueado y con la pantalla encendida.
  4. Tener la app instalada con la última versión (botón ▶ Run del módulo app).

5.2 Desde Android Studio

Abrir appium-tests/src/test/java/com/ispc/florappmovil/appium/LoginTest.java y hacer clic en el triángulo verde ▶ junto al método (testLoginExitoso) o junto a la clase (LoginTest) para ejecutar todas sus pruebas.

5.3 Desde la terminal

Desde la carpeta raíz del proyecto:

gradlew.bat :appium-tests:test

(En Git Bash: ./gradlew :appium-tests:test)

5.4 Ver el resultado

  • En Android Studio, pestaña Run: tilde verde = prueba aprobada; cruz roja = prueba fallida, con el motivo.
  • Informe HTML generado por Gradle:
    appium-tests/build/reports/tests/test/index.html
    

Importante: al empezar, la prueba borra los datos de la app (noReset = false), para arrancar siempre sin una sesión guardada. Los usuarios del backend no se borran.


6. Problemas frecuentes

Síntoma / mensaje Causa probable y solución
Connection refused o Could not start a new session al empezar El servidor Appium no está encendido. Ejecutar appium en una terminal.
adb ... install ... timed out after 20000ms (primera ejecución) El celular tarda en instalar las apps auxiliares de Appium o muestra un aviso de Play Protect esperando respuesta. La prueba ya amplía el tiempo a 120 s; mirar el celular y tocar "Instalar de todos modos" si aparece el aviso.
TimeoutException esperando txtIngreso El login no funcionó: revisar que el backend Django esté encendido, que la IP en local.properties sea correcta y que el usuario de prueba esté registrado.
TimeoutException esperando txtIngreso al inicio El celular estaba bloqueado o con la pantalla apagada. Desbloquearlo y repetir.
adb devices no muestra el celular Revisar el cable USB y que la depuración USB esté activada. Aceptar el aviso de "¿Permitir depuración USB?" en el celular.
java -version muestra 1.8 No afecta: Appium usa el Java indicado en JAVA_HOME. Comprobar con "%JAVA_HOME%\bin\java" -version.

7. Estructura del módulo

appium-tests/
├── .gitignore              # ignora la carpeta build/ (archivos generados)
├── build.gradle            # dependencias: java-client de Appium y JUnit
├── README.md               # esta documentación
└── src/test/java/com/ispc/florappmovil/appium/
    └── LoginTest.java      # AUT-LOG-01 (TC-LOG-01)

El módulo se registra en el settings.gradle de la raíz con include ':appium-tests'.


8. Cómo agregar una prueba nueva

  1. Agregar un método con @Test en LoginTest (o crear una clase nueva en el mismo paquete).
  2. Nombrarlo según el caso que automatiza y registrar el ID en la planilla de casos de prueba (columna "Herramienta e ID del test"), por ejemplo: Appium + Java (JUnit) – AUT-LOG-02 (LoginTest.testLoginContrasenaIncorrecta)
  3. Buscar los elementos con el método auxiliar id("nombreDelId"), usando el android:id del layout.
  4. Usar espera.until(...) para esperar que los elementos aparezcan, en lugar de pausas fijas.
  5. Ejecutar la prueba, guardar el informe HTML como evidencia y hacer un commit con el formato test(modulo): descripción.
⚠️ **GitHub.com Fallback** ⚠️