Mocking & contrats : des tests rapides, hors-ligne, fiables
Si vos tests tapent une API en direct à chaque exécution, ils deviennent lents et instables — échouant quand le wifi hoquette, pas quand votre code est réellement cassé. Il y a une façon plus propre.
L'idée, en une ligne
Le mocking remplace le vrai appel réseau par une réponse toute prête que vous contrôlez, pour que le test vérifie votre logique au lieu de l'humeur d'internet.
Voyez-le à l'œuvre
La bibliothèque responses intercepte les appels requests. Décorez un test avec @responses.activate, enregistrez ce qu'une URL devrait renvoyer, et votre code tourne inchangé contre le faux. Ça brille pour les chemins difficiles à déclencher — forcez un 500 à la demande et prouvez que votre gestion d'erreur tient.
import requests, responses
def fetch_status(post_id):
r = requests.get(f"https://api.example.com/posts/{post_id}",
timeout=5)
return r.status_code
@responses.activate
def test_handles_server_error():
# register a fake 500 for this URL
responses.add(responses.GET,
"https://api.example.com/posts/1",
json={"error": "boom"}, status=500)
assert fetch_status(1) == 500 # our code saw the 500
assert len(responses.calls) == 1 # and made exactly one callLisez-le de haut en bas : vous avez dit à responses de répondre à cette URL avec un 500, exécuté votre fonction, puis vérifié qu'elle a vu le 500 et fait exactement un appel. Aucun réseau impliqué — rapide et répétable.
Avancé — monkeypatch et test de contrat
La fixture monkeypatch intégrée à pytest est le cousin de plus bas niveau : elle remplace n'importe quel attribut ou fonction pour un test, pratique quand ce que vous simulez n'est pas un simple appel HTTP. Un cran au-dessus se trouve le test de contrat (l'idée de Pact) : l'appelant et l'API s'accordent sur un contrat partagé — la forme exacte des requêtes et réponses — et chaque côté teste contre lui de son côté, attrapant les cassures avant que les deux ne se rencontrent.
Basé sur le README de la bibliothèque responses (getsentry/responses) et la doc pytest monkeypatch
Toutes les leçons de Automatisation d'API, de zéro à confiant
- Le modèle mental HTTP & votre première collection Postman
- Recréez-le en code : requests + pytest avec état partagé
- Faites confiance à la forme : validation de schéma & test négatif
- Passer la porte : clés d'API, Bearer/JWT & OAuth2
- SQL pour testeurs : prouvez que l'API a vraiment écrit dans la BD
- Mocking & contrats : des tests rapides, hors-ligne, fiables