160 votes

Tests unitaires des scripts bash

Nous avons un système qui a des scripts bash en plus du code Java. Puisque nous essayons de tester tout ce qui pourrait éventuellement casser, et que ces scripts bash peuvent casser, nous voulons les tester.

Le problème est qu'il est difficile de tester les scripts bash.

Existe-t-il un moyen ou une meilleure pratique de tester les scripts bash? Ou devrions-nous cesser d'utiliser des scripts bash et rechercher des solutions alternatives testables?

55voto

ire_and_curses Points 32802

Il est en fait un framework de test unitaire pour les scripts. Je n'ai pas utilisé moi-même, mais il pourrait être la peine de vérifier.

Des questions similaires ont été posées avant:

38voto

Janus Troelsen Points 5121

Test Bash compatible TAP : Système de test automatisé Bash

31voto

nimcap Points 2738

J'ai obtenu la réponse suivante à partir d'une discussion de groupe:

il est possible d'importer (comprendre, quoi que ce soit) une procédure (fonction, quel que soit son nom), en externe, fichier. C'est la clé de la rédaction d'un script de test: vous casser votre script dans les procédures indépendantes qui peut ensuite être importé dans les deux votre script en cours et de vos tests script, et puis vous avez votre course script d'être aussi simple que possible.

Cette méthode est, comme l'injection de dépendance pour les scripts et les sons raisonnable. En évitant les scripts bash et l'utilisation de plus testable et moins obscur langue est préférable.

6voto

Jim Dennis Points 5454

Pourquoi dites-vous qu'il est "difficile" de tester les scripts bash?

Quel est le problème avec les wrappers de test comme:

  #!/bin/bash
 set -e
 errors=0
 results=$($script_under_test $args<<ENDTSTDATA
 # inputs
 # go
 # here
 #
 ENDTSTDATA
 )
 [ "$?" -ne 0 ] || {
     echo "Test returned error code $?" 2>&1
     let errors+=1
     }

 echo "$results" | grep -q $expected1 || {
      echo "Test Failed.  Expected $expected1"
      let errors+=1
 }
 # and so on, et cetera, ad infinitum, ad nauseum
 [ "$errors" -gt 0 ] && {
      echo "There were $errors errors found"
      exit 1
 }
 

6voto

spbnick Points 1819

L'époxy est un Bash framework de test, j'ai conçu principalement pour tester d'autres logiciels, mais je l'utilise pour tester bash de modules, y compris lui-même et de Carton.

Principaux avantages sont relativement faibles codage des frais généraux, illimité affirmation de nidification et la souplesse de sélection des assertions pour vérifier.

J'ai fait une présentation en la comparant à BeakerLib - un cadre de travail utilisé par certains au Chapeau Rouge.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X