En este post te comparto una investigación que realizó Luis Zambra de Abstracta, donde vamos a comparar dos herramientas de test automation: Selenium Webdriver y WebdriverIO, revisando los aspectos más relevantes, Por último compararemos la ejecución de un test case sencillo en ambos frameworks, a modo de evaluación y para ayudar a establecer un criterio para decidir entre estas excelentes herramientas (en el caso de Selenium Webdriver consideramos solo la opción con JavaScript para que sea más similar la comparación).
Herramientas a comparar
Al seleccionar una herramienta open source de automatización de pruebas Selenium suele ser de las opciones más consideradas, en parte por su gran comunidad y versatilidad al soportar varios lenguajes, siendo uno de ellos Javascript (donde recibe el nombre de WebdriverJS). Aquí es donde entra WebdriverIO como alternativa puesto que es una implementación del protocolo webdriver de W3C también en el lenguaje Javascript.
Tuve la oportunidad de conocer esta última herramienta en un taller interno de Abstracta brindado por Alexis Alvarez y Pablo Calvo, y posteriormente lo puse en práctica en un proyecto donde pude sacarle bastante provecho a sus capacidades. Estas experiencias me permitieron ver que Selenium Webdriver y WebdriverIO comparten varias similitudes, pero tienen algunos puntos de comparación bastante interesantes para destacar.
Comparativa de WebdriverIO y Selenium Webdriver
A continuación, les comparto una tabla comparativa basada en información compartida por las comunidades que sustentan ambas herramientas, además de estadísticas y experiencias personales:
WebdriverIO | Selenium Webdriver | |
Release inicial | 2013 | 2008 |
Último release (a la fecha 23 de Abril de 2020) | 17 Apr 2020 | 18 Mar 2020 |
Frecuencia en los releases | Muy alta (más de 20 releases en los últimos 30 días). | No muy frecuentes (aproximadamente una cada 2 meses). |
Popularidad | Creciendo pero aún muy por debajo de Selenium Webdriver. | El más popular actualmente, tanto en descargas como en búsquedas. |
Soporte de Applitools (testing visual) | Si | Si |
Facilidad de setup | Muy sencillo de hacer gracias a su test runner, el cual nos generará un config file con todo lo necesario. | Setup sencillo, pero lograr lo mismo que el config file de WebdriverIO lleva un poco más de trabajo. |
Ejecuciones en paralelo | Si, se pueden configurar fácilmente desde el archivo de configuración. | Si, pero lograrlo es un poco más trabajoso. |
Ejecutar tests en forma sincrónica | Si, esto se puede configurar en el archivo de configuración. | Si, se puede lograr mediante webdriver-sync. |
Facilidad para escribir / mantener los tests | Muy similar a Selenium, aunque su sintaxis en varios comandos es más simple y más fácil de leer. | Su API permite crear tests robustos y está muy bien documentada. |
Browsers | Chrome Firefox Edge Internet Explorer Safari | Chrome Firefox Edge Internet Explorer Safari Opera |
Facilidad de manejo de browsers | WebdriverIO maneja las instancias de browsers que le pidamos por sí solo. | Requiere que las instancias de browsers sean manejadas desde el código. |
Mobile apps | Si, con WebdriverIO también se puede automatizar en mobile mediante Appium (ver documentación). | No, pero existen otras alternativas (aquí hay un artículo interesante al respecto). |
Desktop applications | Si, mediante Appium (aquí hay un artículo al respecto). | Si, mediante Appium. |
Cross-browsing (Saucelabs, Browserstack, etc.) | Si | Si |
Ofrecen Recorders | Si | Si |
Lenguajes disponibles | Javascript | Java Python Ruby C# JavaScript Perl PHP |
Generación de reportes | Se pueden integrar herramientas para esto fácilmente con el test runner, donde tiene muchas opciones. | No soporta generación de reportes de forma nativa, pero se pueden integrar varias herramientas para esto (ejemplos en Java). |
Comparando en la práctica
Como comparativa adicional, vamos a ver cómo preparar un test sencillo con ambas, Selenium Webdriver y WebdriverIO, donde trataremos de pasar el juego 1to50 (planteado por Fede en un desafío aquí en su blog) en el menor tiempo posible y sacando captura al final para verificar el tiempo. Para hacer la comparativa lo más justa posible utilizaremos WebdriverJS (Selenium Webdriver para JavaScript) y el mismo browser (Google Chrome) en ambos frameworks.
Dejamos el código de las dos soluciones publicadas en este repositorio de GitHub.
Los resultados se pueden ver en la siguiente tabla.
WebdriverIO | Selenium Webdriver | |
Tiempo de ejecución del script | 19.2s. | 19.1s. |
Tiempo invertido en escribir el código (aproximado) | 20 min. | 30 min. |
Tiempo invertido para pasar el juego | 4.301s. | 4.601s. |
Estas fueron las mejores puntuaciones que pude conseguir (más allá de la eficiencia de mi algoritmo que es el mismo en las dos soluciones y las prestaciones de mi máquina), no hay una diferencia muy significativa entre ambas.
Dos herramientas muy recomendables
En definitiva, ambas herramientas me parecen opciones excelentes. Por un lado WebdriverIO tiene varios puntos a favor, como su sintaxis más simple, su manejo de browser simplificado y demás. Por otro lado Selenium Webdriver destaca más respecto al soporte de su comunidad y la gran cantidad de documentación que tiene (muchos ejemplos y problemas resueltos). Esto último me da a pensar que es más fácil aprender a hacer tests en Selenium Webdriver, aunque no haya una gran diferencia entre ambos.
¿Cuál es tu experiencia?
Justamente estoy explorando en el mundo de la automatización y, aunque empecé con Selenium con Python, me animaré a sumar JS en la ecuación para poder incorporar webdriverIO, veo positivamente la evolución de este framework.