Yarn : Scénarios d’exécutions de programmes en ligne de commandes
Suivez-moi aussi sur Identi.ca ou sur Twitter
Ceux qui me suivent sur Twitter auront peut-être vu passer un tweet au sujet de Yarn, logiciel fort sympathique que j’ai vraiment découvert le week-end dernier à la Mini-Debconf UK à Cambridge.
Yarn permet de définir des scénarios d’exécutions de programmes en ligne de commande. Le scénario ainsi écrit sera ensuite joué et le résultat de l’exécution présenté de manière synthétique.
1. Syntaxe d’un scénario à travers un exemple
Petit exemple avec un scénario permettant de vérifier la bonne exécution de Brebis, le logiciel de vérification de sauvegarde. Le but est de :
- mettre en place un environnement de test
- exécuter le test
- vérifier l’exécution du test
Voici comment se présente le fichier de scénario de Brebis, ce dernier suit la syntaxe Markdown :
SCENARIO basic brebis execution GIVEN setting up brebis AND generating with brebis WHEN brebis is ready THEN verify brebis job IMPLEMENTS GIVEN setting up brebis hg clone http://hg.brebisproject.org $DATADIR/brebis mkdir -p $DATADIR/brebis/yarn-test cp $DATADIR/brebis/functional-tests/expected-generated-list-for-tar-archive/expected-generated-list-for-tar-archive.tar.gz $DATADIR/brebis/yarn-test IMPLEMENTS GIVEN generating with brebis $DATADIR/brebis/brebis.py -G $DATADIR/brebis/yarn-test/expected-generated-list-for-tar-archive.tar.gz IMPLEMENTS WHEN brebis is ready $DATADIR/brebis/brebis.py -c $DATADIR/brebis/yarn-test -l $DATADIR/brebis/yarn-test/brebis.log IMPLEMENTS THEN verify brebis job if [ -s $DATADIR/brebis/yarn-test/brebis.log ]; then return 1; else return 0; fi
2. Résultat de l’exécution du scénario
Le résultat de l’exécution du scénario est synthétique et précise les conditions d’exécution du scénario :
$ yarn brebis-scenario
Scenario test suite PASS, with 1 scenarios (4 total steps), in 16.4 seconds
3. Détails de l’implémentation du scénario
Les 5 premières lignes représentent votre scénario. Il porte avant tout un nom défini par le mot-clé SCENARIO, l’étape suivante GIVEN est en général à consacrer à la mise en place de votre environnement de test. Il est possible d’enchaîner ici plusieurs groupes d’instructions à l’aide de AND.
Une fois notre environnement de test mis en place, nous lançons le test à l’aide de WHEN. Enfin nous vérifions le résultat de notre exécution lors de l’étape THEN.Il est à noter que si des opérations sont à réaliser après le test, vous pouvez utiliser le mot-clé FINALLY.
On remarque également l’utilisation de la variable $DATADIR, initialisé par Yarn qui fournit le chemin vers un répertoire temporaire qui par défaut sera supprimé à la fin de votre scénario.
À chaque étape précédemment citée, nous associons des commandes shell à l’aide du mot-clé IMPLEMENTS. Nous faisons ainsi la correspondance entre les titres de nos étapes et les commandes exécutées. Il s’agit dans l’exemple des lignes qui commencent juste après la ligne contenant le THEN.
On voit que la première partie du fichier définie des étapes, avec une syntaxe qui permet d’obtenir des ordres proches du langage naturel. La seconde partie du fichier fournit la correspondance entre ces ordres et leur implémentation concrète en commandes shell. C’est simple et efficace.
4. Encore quelques mots sur un projet prometteur
Yarn est codé en Python et déjà disponible dans Debian dans le paquet cmdtest. Les sources sont facilement accessibles. Je pense que si vous êtes à la recherche de ce type d’outil, Yarn a pris d’emblée les bonnes directions. Le projet est encore jeune (documentation à améliorer, de nombreus points à faire évoluer) mais la base est là et son upstream est à l’écoute des suggestions (et des patchs) :)
Quelques liens pour la route :
- Page web du projet Cmdtest/Yarn
- Code source de Cmdtest/Yarn
- Le README de Yarn
Et vous ? Que pensez-vous de Yarn ? N’hésitez pas à réagir comme d’habitude dans les commentaires.