Faites confiance à la forme : validation de schéma & test négatif
Vérifier un champ à la fois, c'est comme relire un formulaire en ne lisant que la case du nom. Des classes entières de bugs passent. Il y a une façon plus rapide et plus sûre.
L'idée, en une ligne
Au lieu de piquer les champs un par un, décrivez la forme que toute la réponse devrait avoir, puis vérifiez la réponse contre elle en une seule ligne. Pydantic v2 le fait pour vous.
Comment repérer quand vous en avez besoin
- Une clé a été renommée et votre test ne l'a jamais remarqué
- Un nombre est arrivé comme une chaîne (
"123"au lieu de123) - Un champ est revenu null là où vous attendiez du texte
- Vous écrivez cinq asserts pour vérifier un seul corps de réponse
Voyez-le à l'œuvre
Vous définissez un BaseModel avec des champs typés. Les champs requis n'ont pas de défaut ; les optionnels utilisent Optional[str] = None. Passez la réponse à Model.model_validate(data) (ou model_validate_json pour du JSON brut). Si chaque champ correspond, vous récupérez un objet typé propre. Si quelque chose cloche, Pydantic lève une ValidationError qui liste tous les problèmes d'un coup.
import requests
from pydantic import BaseModel
from typing import Optional
class Post(BaseModel):
id: int
userId: int
title: str
body: Optional[str] = None # optional field
BASE = "https://jsonplaceholder.typicode.com"
def test_response_matches_schema():
r = requests.get(f"{BASE}/posts/1", timeout=5)
post = Post.model_validate(r.json()) # raises if shape is wrong
assert post.id == 1Lisez-le de haut en bas : vous avez déclaré à quoi un Post devrait ressembler, puis passé la réponse au modèle. Une ligne a remplacé une poignée de vérifications de champs.
Avancé — test négatif et mode strict
Pydantic est serviable et convertit sensément — la chaîne "123" devient l'entier 123. Quand un type doit être exact, activez le mode strict pour qu'il ne convertisse pas en douce. Les vérifications de schéma s'associent aussi naturellement au test négatif : les chemins où les choses devraient échouer exprès.
- Envoyez un mauvais payload, attendez 400
- Retirez l'en-tête d'auth, attendez 401
- Demandez un id inexistant, attendez 404
Basé sur la doc officielle Pydantic v2 (Models & validation)
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