566 - Testing en Bash facil con bashunit

566 - Testing en Bash facil con bashunit

el testing te ayudará a mejorar tu programación y a ahorrar mucho tiempo, y este #testing lo puedes hacer en #bash en #linux con @bashunit

1:25
-3:15

Soy muy consciente que el tema que voy a abordar hoy no es algo que estuvieras esperando como agua de mayo. Es mas, probablemente si no estás en el mundo del desarrollo puede ser que te suene hasta a chino, incluso, si solo haces tus scripts por pura diversión, cacharreo o similares, pienses que esto no es para ti, pero, nada mas lejos de la realidad. ¿Cuantas veces te ha pasado que algo que pensabas que funcionaba realmente no lo hacía?. Con independencia de si tus scripts son para cacharreo o son para tema profesional, te puedo asegurar y te aseguro, que el testing te va a ahorrar mucho, pero que mucho tiempo. Es mas, la llegada del testing a mi vida ha sido un antes y un después. Pero es que hacer testing con Bash nunca ha sido tan fácil como con bashunit.

Testing en Bash facil con bashunit

Sobre el testing

En primer lugar y antes de meternos en mas berenjenales, te estarás preguntando ¿que esto del testing?, ¿en que me puede ayudar a mi?.

Pues te va a sorprender mi respuesta, porque el testing es testear tus scripts. Así de sencillo y así de complejo. Voy con un par de ejemplos,

Imagina que tienes que hacer un script que tiene que realizar un par de tareas. Por ejemplo, convertir una palabra en mayúsculas y que descargue un archivo, por decir dos. El testing tiene que asegurar que tu script realiza estas dos cosas, y en caso contrario te dará un error.

Otro caso interesante, es cuando además de hacer las dos tareas anteriores, tienes que añadir una tarea adicional. El testing tiene que asegurar, no solo que se realiza esta última tarea, sino que las dos anteriores se siguen realizando. Con lo que es algo interesante.

Ojalá esto del testing lo hubiera empezado a aplicar con mas empeño hace años, cuantos disgustos y frustaciones me habría ahorrado.

Sobre bashunit

bashunit es una herramienta de prueba dedicada diseñada específicamente para scripts de Bash. Te proporciona pruebas en tu código base de Bash, asegurando que tus scripts funcionen de manera confiable y como se pretende.

Tiene una API intuitiva y una muy buena documentación, y esto te simplificará el proceso para que implementes y gestiones tus pruebas. Y lo mejor de todo es que se trata de un marco de trabajo que es completamente independiente del tamaño y la complejidad del proyecto en Bash que estés afrontando.

Instalación y uso

La instalación es tremendamente sencilla. Tan solo tienes que ejecutar la siguiente instrucción en un directorio donde quieras empezar con tus pruebas y listo,

curl -s https://bashunit.typeddevs.com/install.sh | bash

Esto lo que hace se crear un directorio lib dentro del directorio en el que te encuentras. A partir de aquí crear el directorio tests, y comienzas a implementar todos las pruebas que necesites para verificar que tus procesos se comportan como se espera de ellos.

Por ejemplo,

.
├── lib
│   └── bashunit
└── tests
    └── example_test.sh

Dentro de example_test.sh tengo lo siguiente,

function test_bashunit_is_working() {
  assert_equals "bashunit funciona" "bashunit funciona"
}

Solo nos queda probar que todo funciona, algo tan sencillo como ejecutar el siguiente comando,

./lib/bashunit ./tests

Lo que te devolverá algo como lo que te muestro a continuación,

bashunit - 0.10.1
Running ./tests/example_test.sh
✓ Passed: Bashunit is working

Tests:      1 passed, 1 total
Assertions: 1 passed, 1 total
All tests passed
Time taken: 107 ms

Consideraciones

Para que todo funcione como esperas los archivos tienen que terminar con test.sh, y las funciones que se encuentran en cada archivo tienen que comenzar con test. De esta forma, si tienes archivos o funciones auxiliares no se tendrán en cuenta.

Además existen una serie de funciones especiales,

  • set_up es una función, que en caso de existir, se ejecuta antes de cada una de las funciones test de tu archivo.
  • tear_down esta función es la homóloga de la anterior, pero se ejecuta justo después de cada una de las funciones test de tu archivo.
  • set_up_before_script en este caso, esta función se ejecuta una vez única vez antes de todos los scripts que se encuentran en el archivo.
  • tear_down, la homóloga de la anterior, pero en este caso se ejecuta una única vez depués de todos los scripts que se encuentran en el archivo.

Sobre las pruebas assertions, tiene mas de cuarenta, diría yo, porque lo cierto es que no las he contado. Pero van desde las típicas de assert_equals hasta assert_is_directory pasando por assert_string-starts_with, solo por citar unas pocas.

También tienes una serie de funciones especiales que te permiten o sobreescribir el comportamiento de un comando, o reescribir la salida del comando, o asegurar que se ha llamado, y similares.

Conclusión

Como ves se trata de un potente framework, perfectamente documentado y fácil de utilizar. Mi recomendación es que, si estás haciendo scripts en Bash, le des un ojo, porque estoy seguro que te gustará lo que vas a encontrar. Pero, no solo esto, sobre todo, recuerda el ahorro de tiempo y la reducción de frustraciones que te va a permitir evitar utilizando una herramienta tan potente como esta.


Más información,

1 comentario en “Testing en Bash facil con bashunit

  1. NE
    NEFASQUE hace 6 meses

    NICE!!!!. lo deconocias. gracias por la informacion. talves algun video haciendo algun test basico con la herramientas :D.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *