Le test qui échoue : déboguer l'automatisation comme un senior · Leçon 3 sur 6 · Module bonus

Rétrécir l'espace de recherche

Déboguer, c'est chercher. Chaque exécution devrait couper les suspects en deux — une variable à la fois.

Par Shahriyar · Mis à jour

Exécutez moins

▸ Select, repeat, stop early
pytest tests/test_checkout.py::test_guest_checkout   # exactly one test
pytest -k "checkout and not slow"                     # by name pattern
pytest --lf                                           # only what failed last run
pytest -x                                             # stop at the first failure

Découpez le flux

Un flux de 40 étapes qui échoue à l'étape 31 a quarante suspects. Copiez le test et arrêtez-le à l'étape 20. Passe → le problème est dans la moitié arrière. Échoue → l'avant. Continuez de couper en deux.

Le temps de la dichotomie

Vert il y a deux semaines, rouge aujourd'hui, personne ne sait pourquoi ? Laissez git trouver le commit — avec le test comme juge :

▸ git bisect with pytest as the oracle
git bisect start HEAD <last-known-good-sha>
git bisect run pytest -x -q tests/test_checkout.py
# git checks out the midpoint, runs the test, and walks
# straight to the first bad commit. Then: git bisect reset

Tuez le parallélisme

Échoue en parallèle mais passe en série (-n 0 pour pytest-xdist, -p no:randomly pour fixer l'ordre) ? Deux tests partagent quelque chose qu'ils ne devraient pas — un enregistrement, un utilisateur, un port.

Basé sur la doc pytest (sélection de tests, --lf) et git bisect

Toutes les leçons de Le test qui échoue : déboguer l'automatisation comme un senior

  1. Les quatre questions qui trient tout échec
  2. Lire le traceback comme un senior
  3. Rétrécir l'espace de recherche
  4. Instable ou cassé : prouvez-le avec un chiffre
  5. Ça n'échoue qu'en CI
  6. Le compte rendu : bug produit ou bug de test