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.
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 failureDé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 resetTuez 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