Recréez-le en code : requests + pytest avec état partagé
Postman est génial pour fouiller à la main. Mais un examinateur veut une suite qui se lance elle-même, de la même façon, à chaque fois. Bonne nouvelle — le même flux CRUD passe en Python presque à l'identique.
L'idée, en une ligne
La bibliothèque requests envoie les appels HTTP, et pytest exécute vos vérifications et vous dit quand l'une échoue. Ensemble ils transforment vos clics Postman en code versionné.
Les gestes que vous utiliserez
- Chaque verbe est une fonction :
requests.get,requests.post(url, json=payload),requests.put,requests.delete - Lisez la réponse avec
r.status_codeetr.json() - Envoyez une query string avec
params=et des en-têtes avecheaders= - Ajoutez toujours
timeout=pour qu'un serveur bloqué ne puisse pas figer toute votre suite
Voyez-le à l'œuvre
Les vraies API sont à état : vous créez un enregistrement, puis lisez, mettez à jour et supprimez ce même id. Un requests.Session() garde les réglages partagés (comme les en-têtes par défaut) à travers les appels, et une fixture pytest — un setup réutilisable — passe cette session à chaque test.
import requests, pytest
BASE = "https://jsonplaceholder.typicode.com"
@pytest.fixture
def session():
s = requests.Session()
s.headers.update({"Accept": "application/json"})
return s # reused across the calls in one test
def test_create_then_read(session):
# CREATE
r = session.post(f"{BASE}/posts",
json={"title": "qa", "userId": 1}, timeout=5)
assert r.status_code == 201
new_id = r.json()["id"] # carry this id forward
# READ the same resource
r = session.get(f"{BASE}/posts/{new_id}", timeout=5)
assert r.status_code == 200Lisez-le de haut en bas : vous avez créé un enregistrement, saisi l'id qu'il a renvoyé, puis utilisé cet id pour relire l'enregistrement. Cette chaîne créer-puis-réutiliser est la colonne vertébrale de toute la suite.
Avancé — comment pytest trouve et rapporte
pytest découvre automatiquement tout fichier nommé test_*.py et toute fonction nommée test_, puis exécute vos lignes assert. Quand un assert échoue, il affiche les deux côtés de la comparaison — donc un mauvais code de statut se lit comme un rapport de bug prêt à l'emploi au lieu d'une erreur cryptique.
Basé sur le quickstart officiel de Requests et la doc pytest
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