Cómo acelerar las pruebas de JavaScript

Aprenda a acelerar sus pruebas con Selenium y WebdriverIO

Si está interesado en pruebas automatizadas, lo más probable es que tenga una aplicación en crecimiento o un equipo de ingeniería en crecimiento y necesite una forma confiable de probar su aplicación.

Si ya tiene una solución de prueba automatizada, conoce los dolores de las pruebas lentas y escamosas. Los desarrolladores que recién comienzan a desarrollar una estrategia de prueba automatizada querrán comenzar con una base sólida para evitar la refactorización más adelante. Independientemente de la categoría en la que pertenezca, espero proporcionarle algunos consejos sobre cómo hacer que sus pruebas de IU automatizadas se ejecuten lo más rápido y sin problemas posible.

Hay una lista exhaustiva de características que proporciona nuestra aplicación, y probar estas características es primordial. Para evitar la regresión y permitir que los ingenieros fusionen el código con confianza, hemos configurado nuestra canalización de compilación para ejecutar muchos conjuntos de pruebas diferentes, siendo las más importantes nuestras pruebas automatizadas de IU. Estas pruebas de IU son críticas porque prueban cómo un usuario realmente interactuará con nuestra aplicación. Nos estamos asegurando de que el nuevo código que se agregó no cause que falle una prueba existente.

vista rápida

El software que utiliza nuestro equipo es Selenium Webdriver, NodeJS y WebdriverIO.

Selenium es una tecnología que automatiza los navegadores y nos permite crear pruebas basadas en el navegador.

WebdriverIO es un marco de prueba que utiliza NodeJS para proporcionar una API extensa para escribir pruebas automatizadas.

Aquí hay varios consejos útiles que nuestro equipo front-end ha implementado para hacer que nuestras pruebas automatizadas de IU sean una herramienta más efectiva contra la regresión.

Deshabilitar capturas de pantalla

Lo primero es verificar su archivo de configuración webdriverIO. En nuestro proyecto notamos que después de cada función "it", webdriverIO capturaría una captura de pantalla. Nuestra carpeta de salida de prueba contenía aproximadamente 10-30 capturas de pantalla dependiendo de cuántas acciones hubo en cada prueba.

Esto es excelente al depurar una prueba, pero el problema es que capturar capturas de pantalla puede ralentizar sus pruebas. Descubrimos que al deshabilitar las capturas de pantalla, nuestro tiempo de ejecución de prueba se redujo en un 40%. Una configuración adicional que puede ayudar a reducir el tiempo y el tamaño del archivo es que puede establecer el tamaño de la ventana gráfica para su ejecución de prueba. Esto le permite probar solo el tamaño de pantalla que necesita.

// browser.saveScreenshot

Registro de errores

La actualización del registro de errores no tendrá un gran efecto en su ejecución de prueba, pero facilitará la depuración de las pruebas y le permitirá encontrar los errores más rápido. Tener registros de salida de Webdriverio solo si se produce un error también puede ayudar a reducir el ruido en los archivos de registro.

Nivel de verbosidad de registro: silencioso | detallado | comando | datos | resultado | error

Establecer varias instancias

Establecer varias instancias le permitirá tener dos o más sesiones de navegador ejecutando sus pruebas. En lugar de ejecutarlos uno tras otro, puede ejecutar pruebas al mismo tiempo, lo que acortará la ejecución general de la prueba. Es importante tener en cuenta que cada prueba debe poder ejecutarse individualmente, lo que significa que no se basa en una prueba previa para configurar o desglosar datos.

MaxInstances: 3,
capacidades: [{
    browserName: 'chrome',
}]

Diferentes archivos de configuración

Puede aprovechar al máximo los puntos anteriores creando diferentes configuraciones para diferentes entornos. Por ejemplo: nuestro equipo tiene una configuración webdriverio local que no toma capturas de pantalla ni registra mensajes de error.

También redujimos el tiempo de espera global para que podamos fallar más rápido. Nuestra estrategia es completar la primera prueba lo más rápido posible. Luego, volveremos a ejecutar todas las pruebas fallidas, pero esta vez usando la configuración detallada webdriverio que tomará capturas de pantalla para las pruebas fallidas y restablecerá el tiempo de espera global.

webdriverio.local.conf.js
webdriverio.ci.conf.js
webdriverio.test.conf.js

Organización de la suite de pruebas

En nuestra carpeta de prueba tenemos dos subcarpetas que contienen todas nuestras pruebas. Nuestro equipo ejecuta dos instancias de navegador para que Webdriver sepa ejecutar cada una de las subcarpetas en paralelo. Es importante controlar el tiempo de prueba de cada carpeta para que se completen en una cantidad de tiempo similar y usted esté maximizando las instancias.

Evitar Browser.pause ()

Browser.pause puede causar resultados de prueba escamosos y no se debe confiar en que espere llamadas de API, páginas para cargar y acciones, ya que se pueden completar en diferentes cantidades de tiempo cada prueba ejecutada.

En cambio, WebdriverIO proporciona una extensa espera para API. Puede esperar a que los elementos sean visibles, existan, o puede escribir su propia función personalizada que esperará a que una condición sea verdadera antes de pasar al siguiente paso en su prueba.

browser.waitUntil (condición, tiempo de espera, timeoutMsg, intervalo)

Métodos auxiliares reutilizables

Crear métodos auxiliares reutilizables no ahorrará tiempo de prueba, pero ahorrará tiempo de desarrollo. Si tiene muchas pruebas que necesitan ejecutar una acción similar, como iniciar sesión o hacer clic en algo y esperar un resultado, lo mejor es crear un método auxiliar personalizado. Puede crear su método para aceptar parámetros y esperar resultados diferentes según la página que esté probando.

Cromo sin cabeza

Google integró el modo sin cabeza en Chrome en la versión 60. Chrome sin cabeza también reducirá en gran medida su tiempo de prueba porque ejecuta sus pruebas sin una interfaz de usuario. Aún puede capturar capturas de pantalla y ver cómo se ve su aplicación en modo sin cabeza, así que no se preocupe, todavía puede depurar de manera efectiva. Si cambia a ejecutar sus pruebas de WebdriverIO en Chrome sin cabeza, asegúrese de verificar todas sus pruebas existentes. Nuestro equipo tuvo algunos problemas con la descarga de archivos.

browserName: 'chrome',
    'goog: chromeOptions': {
        args: ['--headless', '--disable-gpu']
    }

Nuestro equipo hizo el cambio de Casper.js a WebdriverIO hace varios años y ha disfrutado de la flexibilidad que ha proporcionado WebdriverIO. Estamos constantemente haciendo nuestra configuración más eficiente. Las pruebas de IU automatizadas se escriben para evitar la regresión y son la última línea de defensa antes de que el nuevo código llegue a los usuarios.

Esperemos que pueda incorporar algunas de estas estrategias a su propio proyecto y lograr una ejecución de prueba más rápida.

¡Cuanto más rápido podamos fallar, más rápido podremos arreglarlo!