This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

[BASH] BATS - Testing framework para bash

  • 5 Replies
  • 2052 Views

0 Members and 1 Guest are viewing this topic.

Offline tt0ne'

  • *
  • Underc0der
  • Posts: 6
  • Actividad:
    0%
  • Country: ar
  • Reputación 1
    • View Profile

[BASH] BATS - Testing framework para bash

  • on: January 26, 2022, 08:12:29 pm
Buenas, underc0ders.
Hoy les traigo un framework para bash que permite probar que los scripts que escriben para UNIX funcionen de la manera esperada.

De manera muy basica explicaré como funciona:

Como primer paso, tenemos que instalar bats en la maquina que correrá los tests:

Code: (bash) You are not allowed to view links. Register or Login
$ git clone https://github.com/sstephenson/bats.git
$ cd bats
$ ./install.sh /usr/local

Luego definimos un archivo bats, el cual deberá ser escrito con una sintaxis particular para definir los test cases.

En mi caso, llamaré el archivo addition.bats

Code: (bash) You are not allowed to view links. Register or Login
$ touch addition.bats
Utilizando el ejemplo del repositorio oficial, unos tests cases muy simples se definirian así:
Nota: tenemos que avisarle al archivo bats que el interprete que tiene que utilizar es bats y no bash:

Code: (bash) You are not allowed to view links. Register or Login
#!/usr/bin/env bats

@test "addition using bc" {
  result="$(echo 2+2 | bc)"
  [ "$result" -eq 4 ]
}

@test "addition using dc" {
  result="$(echo 2 2+p | dc)"
  [ "$result" -eq 4 ]
}

Luego, utilizamos bats para ejecutar el file con los tests:

Code: (bash) You are not allowed to view links. Register or Login
$ bats addition.bats
 ✓ addition using bc
 ✓ addition using dc

2 tests, 0 failures

Personalmente, me sirvió mucho para probar que los outputs de un CLI personalizado fueran los esperados y además que se pudiera instalar en la maquina de forma exitosa (si se utiliza la función setup  de bats, se ejecutará una función para setupear el ambiente cada vez que se corran los tests y fallará si la salida del script es igual a 1).

El framework ofrece muchisimas cosas mas como librerias que se pueden cargar con un load que permiten hacer asserts muchos mas complicados.

Un test un poco mas producido podria ser, un test que crea un virtual environment en python3 y llama a un paquete para que corra determinados comandos desde un cli:
NOTA: las librerias de assert deben ser descargadas e incluidas en el proyecto para poder ser cargadas con un load

Code: (bash) You are not allowed to view links. Register or Login
#!/usr/bin/env bats

load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'

setup() {
  apt install -y python3-venv
  python3 -m venv my_env
  source my_env/bin/activate
  apt install python3-pip
  python3 -m pip install --index-url https://pypi.org/simple/ custom-cli
}

@test "Invoking get command from custom CLI should list custom data types" {
  export CUSTOM_URL="https://custom-api-url.com/"
  SECRET_KEY=$(sops -d --extract '["secret-key"]' file.enc)
  export CUSTOM_SECRET_KEY="$SECRET_KEY"
  run python3 -m custom-cli get object --type "*"
  assert_output -p "type1"
  assert_output -p "type2"
  assert_output -p "type3"
  assert_output -p "type4"
  assert_output -p "type5"
  [ "$status" -eq 0 ]
}

Espero sea util para alguien, saludos!

Link del repositorio oficial: You are not allowed to view links. Register or Login



Online ANTRAX

  • *
  • Administrator
  • Posts: 5831
  • Actividad:
    43.33%
  • Country: ar
  • Reputación 43
  • ANTRAX
  • Twitter: @Underc0de
    • View Profile
    • Underc0de
    • Email

Re: [BASH] BATS - Testing framework para bash

  • on: January 26, 2022, 08:25:46 pm
Esta buenisimo! No lo conocía!
Me sorprende como un Framework de hace 10 años aún funcione!

Gracias por compartirlo!
ANTRAX


Offline jioxep

  • *
  • Colaborador
  • *
  • Posts: 10
  • Actividad:
    6.67%
  • Country: ar
  • Reputación 2
  • SELECT * FROM VIDA WHERE FELICIDAD = TRUE;
  • Twitter: @jioxep
    • View Profile
    • Email

Re: [BASH] BATS - Testing framework para bash

  • on: January 26, 2022, 08:30:43 pm
Zarpado, gracias por tu aporte!

Me quedo con la palabra "setupear" jaja

Offline tt0ne'

  • *
  • Underc0der
  • Posts: 6
  • Actividad:
    0%
  • Country: ar
  • Reputación 1
    • View Profile

Re: [BASH] BATS - Testing framework para bash

  • on: January 26, 2022, 09:09:49 pm
You are not allowed to view links. Register or Login
Zarpado, gracias por tu aporte!

Me quedo con la palabra "setupear" jaja

No sé si existe una mejor palabra para describir eso en castellano  ;D

Offline tt0ne'

  • *
  • Underc0der
  • Posts: 6
  • Actividad:
    0%
  • Country: ar
  • Reputación 1
    • View Profile

Re: [BASH] BATS - Testing framework para bash

  • on: January 26, 2022, 09:14:13 pm
You are not allowed to view links. Register or Login
Esta buenisimo! No lo conocía!
Me sorprende como un Framework de hace 10 años aún funcione!

Gracias por compartirlo!
ANTRAX

 Esperemos siga funcionando  ::)

Online DtxdF

  • *
  • Moderador Global
  • Posts: 1102
  • Actividad:
    70%
  • Country: 00
  • Reputación 27
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • View Profile
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email

Re: [BASH] BATS - Testing framework para bash

  • on: January 27, 2022, 03:29:10 am
Ojalá lo fuera conocido antes, aunque mejor tarde que nunca. Muchas gracias por el aporte @tt0ne'

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.