Bats
À quoi il sert
Bats (Bash Automated Testing System) exécute des fichiers .bats dont chaque bloc @test "description" { ... } est un test écrit en Bash. La commande run lance l'outil à tester dans un sous-shell et range son code dans $status, sa sortie dans $output et ses lignes dans $lines ; le test échoue dès qu'une de ses commandes échoue. Les fonctions setup et teardown encadrent chaque test, setup_file et teardown_file chaque fichier, et $BATS_TEST_TMPDIR donne à chaque test un répertoire temporaire qui lui est propre. Les résultats sortent au format lisible ou en TAP (--tap), que les outils d'intégration continue savent agréger. Le projet maintenu est bats-core, issu en 2017 d'un fork du Bats original de Sam Stephenson, archivé depuis ; Ubuntu 24.04 fournit la version 1.10.0, Debian 13 la 1.11.1, avec les bibliothèques d'assertions bats-support et bats-assert en paquets séparés.
Quand le choisir
Pour tester un script Bash ou n'importe quel outil en ligne de commande depuis l'extérieur : codes de sortie, messages, fichiers produits, comportement face à une dépendance qui échoue (simulée par une doublure placée en tête du PATH). Pour du code Python, pytest est plus adapté ; pour des fonctions shell très nombreuses, ShellSpec offre un style plus structuré. Bats reste le choix le plus répandu, et le plus simple à lire pour qui connaît Bash.
Points d'attention
runavale le code de sortie :run commanderéussit toujours, il faut ensuite vérifier$status(ouassert_success,assert_failure 3). Depuis la version 1.5.0,run -3 commandefait échouer le test si le code n'est pas 3, à condition de déclarerbats_require_minimum_version 1.5.0.- Le corps d'un test s'exécute avec
set -e, mais une commande précédée de!ne fait pas échouer le test : utilisezrun !ourefute. - Chaque test tourne dans son propre processus : une variable affectée dans un test n'existe pas dans le suivant, et rien de ce que fait
runne remonte au test. bats_load_library bats-assertcherche dansBATS_LIB_PATH,/usr/lib/batspar défaut, là où les paquets Debian et Ubuntu installent les bibliothèques.- Un test ne doit jamais toucher un vrai service : fixez les chemins et les commandes externes par des variables d'environnement et des doublures, dans
$BATS_TEST_TMPDIR.
Par où commencer
La leçon Déboguer, analyser et tester du cours Bash pour l'automatisation, qui couvre publier-export par une suite Bats avec une doublure de aws, puis l'exécute dans make verifier et GitHub Actions. Puis la documentation de bats-core, en particulier la page Writing tests.