Vous recherchez moyen d'automatiser les tests de l'application kshell
-
21-08-2019 - |
Question
Je hérité d'une application shell-script qui est une combinaison de kshell scripts, awk et les programmes java. Je l'ai écrit tests JUnit pour les pièces de java.
Y at-il un bon moyen de faire quelque chose de similaire pour les scripts kshell et des programmes awk?
Je l'ai envisagé d'utiliser pour appeler les scripts, mais il semble qu'il devrait y avoir une meilleure façon JUnit et System.exec ().
La solution
J'ai trouvé shunit2 et va essayer.
Mise à jour des résultats d'essayer shUnit
shUnit fonctionne comme prévu. Les fichiers de script sont écrits avec des fonctions de test définies, puis un appel à shUnit.
Exemple:
#!/bin/sh
testFileCreated()
{
TESTFILE=/tmp/testfile.txt
# some code that creates the $TESTFILE
assertTrue 'Test file missing' "[ -s '${TESTFILE}' ]"
}
# load shunit2
. /path/to/shUnit/shunit2-2.1.5/src/shell/shunit2
Résultat
Ran 1 test.
OK
Le « OK » serait remplacé par « failed » si le fichier n'existait pas.
Autres conseils
Vous pouvez essayer Attendez-vous. Il a été conçu pour l'automatisation des programmes interactifs. Bien sûr Attendez-vous a été écrit sur le dessus de TCL, qui est un langage de script abominable. Donc, il y a des interfaces pour Python ( pexpect ) et peut-être d'autres langues qui sont plus programmeur amical. Mais il y a beaucoup de documents autour de la pose pour TCL / expect qui est toujours utile.
Ce n'est pas une réponse directe à votre question, mais vous pouvez envisager d'utiliser un Makefile simple pour exécuter des scripts bash avec des paramètres différents.
Par exemple, écrire quelque chose comme ceci:
cat >Makefile
test_all: test1 test2 test3
test1:
script1 -parameter1 -parameter2
test2: $(addprefix test2file_, $TESTFILES)
test2file_%:
script2 -filename $*
test3:
grep|awk|gawk|sed....
En appelant « faire test_all » vous exécuter tous les scripts automatiquement, et la syntaxe n'est pas si difficile à apprendre - il vous suffit de définir un nom de règle (test1, test_all ...) et les commandes qui lui sont associées.