En este artículo veremos como ejecutar un test automatizado con Java/Selenium a través de un proyecto Maven, generando un feature de Cucumber y ejecutando el test invocando al servicio de Appium.
Requerimientos previos
Necesitaremos tener instalado :
- Maven : https://maven.apache.org/
- Appium Desktop : https://github.com/appium/appium-desktop
- Editor Java, en este caso se utilizará IntelliJ.
- Emulador o dispositivo físico Android.
Deberemos configurar las variables de entorno Maven en el sistema y añadirlas al PATH:
- M2 : C:\Maven\bin
- M2_HOME : C:\Maven
Construcción del Proyecto Maven
En primer lugar crearemos un nuevo proyecto de tipo Maven. No seleccionaremos ningún arquetipo en concreto:
Una vez creado el proyecto configuraremos las librerías que se utilizarán. Para ello abrimos el fichero "pom.xml" y añadimos las siguientes dependencias:
- Appium
- Junit
- Cucumber
NOTA : Es recomendable consultar la última versión del artefacto, consultando el respositorio oficial de Maven: https://mvnrepository.com/
Por último, compilaremos el proyecto para verificar que no existan errores.
Creación del escenario con Cucumber
Ahora crearemos el escenario de nuestro test mediante Cucumber.
Cucumber es una herramienta utilizada para implementar metodologías como BDD (Behaviour Driven Development) las cuales permiten ejecutar descripciones funcionales escritas en texto plano como pruebas de software automatizadas.
Estas descripciones funcionales, se escriben en un lenguaje específico y legible llamado "Gherkin”, el cual sirve como documentación al desarrollo y para las pruebas automatizadas.
Estos ficheros deben tener extensión ".feature". Cada feature está compuesto por un Background (opcional si se requieren pasos previos antes de ejecutar los escenarios) y por 1 a N escenarios.
En nuestro caso definiremos un escenario que acceda a la pantalla inicial de la aplicación móvil (Pantalla de Login), donde introduciremos el usuario y contraseña y verificará que el acceso ha sido correcto.
ANÁLISIS DEL FICHERO
Keyword : FEATURE
Indicamos un título y una breve descripción del feature. En este caso el feature se titula "Make login in the mobile application" y a modo de breve explicación indicamos "As a user I want to make login in the mobile appication".
Keyword : BACKGROUND
El keyword background es opcional. Solamente lo indicaremos en los casos en los que se requiera pasos previos a la ejecución de los escenarios definidos. En este caso necesitaremos un usuario y el acceso a la aplicación antes de ejecutar el escenario de login.
Otra alternativa es utilizar los keywords "Given" y "And" dentro de un escenario en concreto en vez de utilizar un Background. Todo depende de los casos a evaluar, aunque si los pasos previos se repiten en más de un escenario es mucho más coherente aplicar un Background que repetir los pasos previos en todos y cada uno de los escenarios.
Keyword : SCENARIO
Aquí definiremos de 1..N escenarios en función de lo que queramos probar sobre la misma pantalla. En este caso solamente probaremos que el login se efectúa de forma correcta, pero si quisiéramos probar también un login incorrecto, crearíamos un nuevo escenario dentro de este mismo feature.
Definiremos dos pasos con los keywords "When" y "Then". El primero indica que cuando (When) efectuemos login con el usuario y password. El seguno indica que entonces (Then) el login es correcto.
EJEMPLOS DE VARIANTES DEL FICHERO
Feature sin background previo :
Añadiendo un nuevo escenario :
Generación del código fuente en Java/Selenium y ejecución
Una vez tenemos configurado el proyecto con las librerías y creado el escenario, realizaremos la codificación en Java / Selenium y ejecutaremos el proyecto.
Fichero : params.properties
Para este proyecto, necesitaremos un fichero de properties, en el cual indicaremos la ruta donde se ubica la aplicación móvil a probar, el usuario y password que utilizaremos para el test, el identificador del dispositivo en el que haremos la prueba y la dirección de Appium local.
Adicionalmente también crearemos nuestra propia clase de lectura de ficheros de propiedades:
Fichero : Runcuketest.java
Creamos el fichero "RunCukeTest.java" el cual nos servirá ejecutar el proyecto a través de JUnit.
En este fichero indicaremos que ejecutaremos el test con Cucumber e informaremos la ruta donde se están ubicados los features del proyecto. Adicionalmente, también indicaremos los plugins de presentación del reporte de resultados.
Fichero : User.java
Ahora crearemos nuestro bean User el cuál tendrá dos campos :
- User
- Password
Crearemos su constructor y sus métodos accesores.
Fichero : BaseAppium.java
En esta clase codificaremos el código fuente para levantar una sesión de Appium en el dispositivo indicado en el fichero de propiedades.
Crearemos las capabilities necesarias a nivel del servicio de Appium y posteriormente las capabilities a nivel de driver. Una vez las tenemos definidas arrancamos una sesión del servidor Appium y una vez arrancada, creamos el objeto driver.
Fichero : Login.java
En esta clase crearemos el código fuente que obtenga los elementos de la pantalla a través del driver y les aplique su valor correspondiente. Codificaremos la acción de hacer login y de comprobación de login correcto. Por ultimo implementaremos la acción de logout.
Esta clase extiende de BaseAppium.java para poder tener acceso al driver generado y el cual se necesitará para obtener los elementos.
Fichero : LoginSteps.java
Por último, crearemos la implementación de los steps del feature. Indicaremos el código fuente a ejecutar según cada uno de los steps definidos en el fichero feature.
@Given ("^we are a user$") definirá la creación del objeto bean User recuperando el usuario y contraseña del fichero de propiedades.
@And ("^we enter to application$") definirá los pasos de creación del driver de Appium y carga de la aplicación en el dispositivo móvil.
@When ("^we make login with user and password $") definirá los pasos que realizarán el login con el usuario y contraseña recuperados del bean User.java.
@Then ("^the login is succesffull $") definirá los pasos de verificación de si es login se ha hecho o no correctamente.
Adicionalmente, incluiremos el keyword @After para definir los pasos a ejecutar después del test.
Así queda visualmente la estructura del proyecto:
Ejecución
Una vez compilado el proyecto podemos ejecutarlo a través del comando Maven:
- mvn clean test
O bien podemos crear una configuración de test en IntelliJ : Menú Run > Edit Configurations y crear una configuración de JUnit.
Proyecto de Ejemplo
En este repositorio tenéis todo lo que hemos comentado en este post:
https://github.com/cristinalopezgj/CucumberSeleniumAppiumProject
Si te ha gustado, ¡síguenos en Twitter!