Optimizando el testing automatizado de UI con Cypress

Sovos
January 12, 2022

Conversemos de DevSecOps

En esta nueva sección de nuestro blog compartiremos la visión y experiencia de nuestro equipo de expertos en el ámbito del desarrollo de software y las tecnologías de información en general, quienes tocarán distintos temas relacionados con las tecnologías y metodologías utilizadas por Sovos para crear e implementar un mejor software, y entregarán tips y datos orientados a aportar valor a quienes deben trabajar en este ámbito, fundamental para las compañías que crean y utilizan soluciones para impulsar el negocio de sus clientes.


 

Sergio Gómez, Principal QA Engineer

Optimizando el testing automatizado de UI con Cypress

A lo largo de los años hemos probado diferentes herramientas para crear test automatizados. Nuestros primeros intentos consistieron en automatizar smoke y regression tests utilizando herramientas que permiten simular acciones de los usuarios. En este tipo de pruebas se testean todos los componentes del sistema: UI, backend, base de datos, infraestructura y otros.

Al comienzo de los proyectos mantuvimos una buena cobertura y estabilidad, pero a medida que crecían los proyectos, los tiempos de ejecución se hacían más largos, el mantenimiento era más frecuente y los tests eran inestables. En muchas ocasiones los tests automatizados fallaban, pero esas fallas no estaban directamente relacionadas con bugs en el producto. Entonces empezamos a investigar herramientas que nos permitieran realmente encontrar problemas en nuestros productos y los reportaran rápidamente.

Una de estas herramientas fue Cypress I.O. En este artículo detallamos nuestra experiencia con la misma y las ventajas que encontramos. Para instalar y comenzar a usarla, pueden entrar al sitio oficial.

Cypress es un framework de test automatizado para UI modernas que permite escribir todo tipo de tests, incluyendo end-to-end, integration y unit tests, y cualquier otro que corra en el navegador. A diferencia de otras herramientas, no depende de aplicaciones de terceros (Webdrivers); Cypress detecta los browsers instalados en el sistema para ejecutarlos, por lo que no es necesario actualizar los webdrivers después de la actualización de dichos browsers.

La funcionalidad que nos pareció más útil fue la posibilidad de controlar el tráfico de red (Network traffic control) fácilmente. Esto permite interceptar todos los requests y retornar las respuestas que necesita el automated test. De esta manera, podemos trabajar en la integración de los componentes de la interfaz de usuario (UI) y no depender del backend. Como resultado, tenemos test más rápidos y estables que pueden ser integrados en el pipeline de desarrollo.

A continuación presentamos un ejemplo de cómo podemos interceptar los request de login de una aplicación para probar la reacción de la interfaz de usuario con diferentes respuestas. Lo primero que debemos hacer es identificar los elementos que usaremos en nuestro automated test. Necesitamos dos inputs para el nombre de usuario y password y un botón LOGIN. El botón se habilitará luego de completar el formulario y podremos hacer click en el mismo. Después, la UI disparará un request para chequear los datos ingresados.

 

sovos-automated-test

img-code-example-cypress-01

img-code-cypress-03

 

Para simplificar el ejemplo, vamos a suponer lo siguiente:

  • Username box tiene un atributo id=login-username
  • Password box tiene un atributo id=login-password
  • LOGIN button tiene un atributo id=login-btn
  • El request que se ejecuta tiene los siguientes atributos:
    1. URL: /api/v1/login
    2. Method: POST
    3. Body: { ‘username’: ’user@sovos.com’, ‘password’: ‘Passw@rd’ }
    4. Response
      1. i) Status Code: 200
      2. ii) Body: ‘true’

Ahora podemos escribir cómo quedaría el ejemplo usando los comandos de Cypress sin interceptar el request:

 

img-code-cypress-05

img-code-cypress-05

img-gif-cypress-06

 

En la imagen previa se puede observar cómo ejecuta Cypress los diferentes comandos. Utiliza cy.visit para navegar hasta la página deseada y cy.get para identificar a los elementos web usando como identificador sus respectivos IDs. Una vez identificado el elemento, usamos el comando type() para escribir un valor en el elemento y click() para enviar el formulario. Los requests ejecutados por la aplicación son identificados como (xhr) en el test runner. En este caso se ejecutó un request POST con URL igual a /api/v1/login pero no fue interceptado, por lo que fue validado por el backend. Una vez verificado, la respuesta es procesada por la UI, y si fue exitosa, muestra el texto Bienvenidos a la App.

Otra de las ventajas de Cypress es que espera en forma automática a que se cumpla una condición, por lo que no es necesario utilizar funciones de espera.

 

Proceso de login interceptado por Cypress

Para continuar con nuestro ejemplo, podemos utilizar el comando cy.intercept() para interceptar los requests generados por la UI y devolver respuestas deseadas. De esta manera, los requests no serán procesados por el servicio y solo probaremos cómo reacciona la aplicación de acuerdo a diferentes respuestas.

 

Caso positivo: login exitoso usando Stub

 

img-code-cypress-07

img-code-cypress-08

img-gif-cypress-09

 

En este ejemplo se puede observar cómo se utiliza el comando cy.intercept(). Cuando la UI lo ejecute, Cypress interceptará el request y lo comparará con lo que hemos definido. La comparación se realizará por el tipo de método (POST) y por la URL (/api/v1/login). Si coincide, devolverá el valor definido en la constante validLogin. Como la respuesta preestablecida es la cadena ‘true’’, esperamos que la UI muestre un texto de bienvenida.

En este ejemplo se puede comparar la velocidad de ejecución entre los dos casos. El primero demoró unos 5 segundos, porque la UI necesitaba la respuesta del servicio de login para mostrar el mensaje. En el segundo caso fue más rápido, porque fue interceptado por Cypress y devolvió una respuesta inmediatamente.

 

Caso negativo: Login no fue exitoso usando Stub

Para testear un caso negativo podríamos modificar la respuesta del request para simular un login inválido. En este caso es necesario cambiar el valor de status code de la respuesta para que la UI muestre un mensaje de error: Username/Password values are invalid. El automated test queda de la siguiente manera:

 

img-code-cypress-010

img-code-cypress-011

img-gif-cypress-12

 

En síntesis, podemos afirmar que Cypress es una herramienta muy útil para el tipo de test que necesitamos para nuestros productos, porque son más rápidos, estables y confiables. Cuando se rompen los tests, es porque se realizó algún cambio en el código fuente o porque no se realizó el mantenimiento adecuado en el código de los tests. Gracias a esto, los falsos positivos originados por problemas con la base de datos, demoras en el tráfico de red, usuarios inválidos, servicios caídos y otros factores ya no representan un problema.

Links de interés:

Cypress: https://www.cypress.io/

Cypress en Github: https://github.com/cypress-io

Suscríbase para más información

Manténgase actualizado con las últimas noticias relacionadas a los impuestos y el cumplimiento de la normativa tributaria que pueden impactar los procesos y las operaciones de su empresa.

Autor

Sovos

Sovos se creó para resolver las complejidades de la transformación digital de los impuestos, con ofertas completas y conectadas para la determinación de impuestos, los controles continuos de las transacciones, los informes fiscales y mucho más. Entre los clientes de Sovos se encuentran la mitad de las empresas de la lista Fortune 500, así como empresas de todos los tamaños que operan en más de 70 países. Los productos SaaS de la empresa y la plataforma Sovos S1, de su propiedad, se integran con una amplia variedad de aplicaciones empresariales y procesos de cumplimiento de la normativa gubernamental. Sovos tiene empleados en toda América y Europa, y es propiedad de Hg y TA Associates.
Comparta este post

firma electrónica en méxico
Factura electrónica México Servicios de confianza
November 21, 2024
¿Qué es la firma electrónica en México y cuáles son sus ventajas?

La firma electrónica en México es un recurso indispensable para que las empresas agilicen y aseguren procesos de documentación.

firma electrónica
Firma electrónica Perú
September 12, 2024
¿Qué es la firma electrónica y cuáles son sus beneficios para las empresas en Perú?

La firma electrónica es una herramienta que permite validar la autenticidad de documentos y transacciones realizadas de forma digital.

huella dactilar
Chile Verificación de identidad
September 6, 2024
Beneficios del uso de la huella dactilar en trámites bancarios: legalidad, seguridad y transparencia

Las fortalezas de la huella dactilar como método biométrico son muy valoradas en una de las industrias más reguladas: la banca.

dni electrónico
Latinoamérica Verificación de identidad
August 23, 2024
Obligatoriedad del DNI electrónico en Perú: beneficios y su impacto en la seguridad y eficiencia de los procesos de verificación de identidad

El DNI electrónico ofrece múltiples ventajas que reducen el riesgo de fraude y usurpación de identidad | Lee más aquí.

verificación identidad chile
Chile Verificación de identidad
August 22, 2024
Verificación de identidad en Chile: Resolución N°566/2024 establece requisitos mínimos a aplicar por las empresas de telecomunicaciones

Requisitos mínimos de verificación de identidad en Chile a aplicar por las empresas de telecomunicaciones | Lee más aquí.