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
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,
NICE!!!!. lo deconocias. gracias por la informacion. talves algun video haciendo algun test basico con la herramientas :D.