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 |
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
- La prueba en Java le envía órdenes al servidor Appium.
- Appium, mediante el driver UiAutomator2, controla el celular conectado por USB.
- La app se maneja sola: toca botones, escribe texto y navega entre pantallas.
- 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.
| 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 |
| 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).
| 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 |
Descargar e instalar la versión LTS desde nodejs.org. Comprobar en una terminal:
node -v
npm -v
npm install -g appium
appium -v
appium driver install uiautomator2
appium driver list --installed
En la última lista tiene que aparecer uiautomator2.
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.
appium driver doctor uiautomator2
Tiene que terminar con "0 required fixes needed". Los avisos opcionales (bundletool, ffmpeg, gstreamer) no son necesarios para estas pruebas.
-
Encender el servidor Appium en una terminal y dejarla abierta:
Tiene que aparecer:
appiumAppium REST http interface listener started on http://0.0.0.0:4723 -
Encender el backend Django (
python manage.py runserver 0.0.0.0:8000). - Conectar el celular por USB, desbloqueado y con la pantalla encendida.
- Tener la app instalada con la última versión (botón ▶ Run del módulo
app).
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.
Desde la carpeta raíz del proyecto:
gradlew.bat :appium-tests:test
(En Git Bash: ./gradlew :appium-tests:test)
- 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.
| 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. |
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'.
- Agregar un método con
@TestenLoginTest(o crear una clase nueva en el mismo paquete). - 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) - Buscar los elementos con el método auxiliar
id("nombreDelId"), usando elandroid:iddel layout. - Usar
espera.until(...)para esperar que los elementos aparezcan, en lugar de pausas fijas. - Ejecutar la prueba, guardar el informe HTML como evidencia y hacer un commit con el formato
test(modulo): descripción.