pyTDD : développer par les tests

temps de lecture ~4 min
  1. 1. Principe
  2. 2. Installation
  3. 3. Configuration
  4. 4. à voir aussi

Développer nécessite de faire des tests, quelque soit le langage utilisé. Puisqu’il me manquait un petit outil simple pour optimiser mes séances de développement en python, je vous propose une permière version de l’outil pyTDD.

C’était également pour moi l’occasion de publier mon premier module sur pypi 😉

Principe

C’est un peu présomptueux, mais il me fallait une commande simple et rapide à utiliser. Le principe utilisé est très simple : l’outil pytdd ausculte la modification de fichiers dans l’environnement de travail et lorsqu’il détecte un tel évènement, il lance automatiquement une commande de votre choix.

L’objectif initial est de le combiner avec pytest pour travailler en mode TDD (Test Driven Development[1]) en spécifiant tout d’abord les tests du module que je souhaite faire avancer et par conséquent à chaque modification d’un fichier de source (ou de test), l’ensemble des tests est revalidé.

Auparavant j’utilisais la commande en ligne directement dans un shell, mais c’est assez fastidieux et je ne le faisais donc pas assez souvent. Résultat : de longues séries de travail sur la qualité du code et son fonctionnement. Puis je me suis forcé à utiliser le TDD sur certains sujets un peu plus vastes et sur lesquels nous sommes potentiellement plusieurs à intervenir. Dès lors l’écriture de tests devient indispensable à minima pour valider que les modifications apportées n’apportent pas de régression et dans le cas du TDD afin de spécifier le fonctionnement attendu et l’ensemble des cas limites. Afin d’avoir les tests qui s’exécutent fréquemment, j’utilisais souvent la commande watch. C’est bien, mais c’est riche, surtout lorsqu’il y a beaucoup de tests et encore avec un langage interprété efficace c’est pas très long, en java on oublie tout de suite.

Avec pytdd, tant qu’il n’y a pas de modification de source (sauvegarde donc), pas besoin de refaire une campagne de validation.

Ce genre de fonctionnement est souvent disponible dans les IDE modernes de développement, mais je suis de l’ancienne école et n’arrive pas vraiment à me défaire de mon vieil emacs.

Installation

L’installation est très simple : pip install pytdd dans votre environnement virtuel (ou pas) et dès lors la commande pytdd est disponible. Ceci est validé sur Linux, sur un Windows, je passe par l’interpréteur avec la commande python env\bin\pytdd.py, faudra que je trouve mieux ensuite si besoin et que certains soient optimisés.

Configuration

Par défaut, bien que fonctionnel l’outil ne sert à rien… Il vous faudra configurer le fichier pytdd.conf à l’endroit d’où vous l’exécutez, soit probablement la racine de votre projet. Ceci à minima afin de spécifier la commande que vous souhaitez utiliser.

pytdd.conf
1
2
3
4
5
[pytdd]
patterns = ["*py"]
ignore_patterns = ["*#*", "*~"]
cmd = ["pytest -x --ff tests/test*py"]
force_delay = 300

Les paramètres patterns et ignore_patterns permettent de filtrer les fichiers sur lesquels on observe les modifications, la cmd sera exécutée sur changement, ici on effectue les tests en commençant par la dernière erreur et on s’arrête dès qu’il y a une erreur. Enfin, le force_delay permet de forcer l’exécution de la commande à intervalle régulier.

Je ferais évoluer cet outil au fur et à mesure de mes besoins, vous pouvez bien entendu mettre la main à la pâte si vous le souhaitez (sources sur mon gitlab )

Photo Hans-Peter Gauster


  1. https://en.wikipedia.org/wiki/Test-driven_development ↩︎

Alexandre Chauvin Hameau

2019-06-02T20:57:28