En el ciclo de vida del software hay un apartado dedicado al testeo, es decir, a crear esa «red de seguridad» que nos ayuda a chequear que todo funciona como es debido.

Conforme el software va creciendo se crearán más pruebas para cubrir esas nuevas piezas de código y existirá un proceso ó “test runner” que será el encargado de hacer pasar todas esas pruebas de manera que a más pruebas más tiempo necesitará para completar el testeo. Y entonces surgirá la siguiente pregunta: ¿Cómo puedo acelerar la ejecución de los tests?

En el caso que nos ocupa en Angular, si usamos el testing con Jasmine y Karma, se irán ejecutando todos los specs que tenga el proyecto uno tras otro hasta terminar, no solo en el ordenador del propio desarrollador, sino también en el CI/CD pipeline.

Si ahora sobre una instancia se ejecutan todos los tests, se podrían abrir «n» instancias y sobre cada una de esas repartir los tests que tengamos bajo unas ciertas premisas o configuración. De esa forma se acortaría el tiempo de ejecución de todos los tests.

Karma-parallel

Karma-parallel habilita la posibilidad de crear varias instancias (ó «executors«) y repartir los tests a cada uno de los “executors” mediante una fragmentación («sharding») de los tests.

Su configuración a priori es bastante sencilla, puesto que basta instalarlo en el proyecto (package.json) y configurarlo en el archivo karma.conf tal como se especifica en su sitio web.

Habrá que realizar algún tuneado seguramente según se vaya a ejecutar en local (desarrollo) o en el CI/CD pipeline dado que con toda probabilidad tendrán características diferentes: memoria, CPU’s, ….

Aquí os dejo una comparativa realizada sobre un i7 con 16 GB de RAM y 4 núcleos (8 procesadores lógicos) con Windows 10 64 bits ejecutando un total de 3262 tests.

Sin karma-parallel:

Tiempo de ejecución con Karma
Tiempo de ejecución con Karma

Con Karma-parallel configurado con 4 executors:

Tiempo de ejecución con Karma-parallel
Tiempo de ejecución con Karma-parallel

La ejecución del executor que más ha tardado es de unos 57 segundos

Como se puede apreciar se ha bajado de los 06:34 minutos a los 00:57 segundos ganando tiempo en la ejecución de los tests.