API du client de test Flask
FlaskClient est un navigateur simulé qui peut envoyer des requêtes et vérifier les réponses sans démarrer de serveur.
Viaapp.test_client()Créer une instance.
Créer un client de test
| Méthode | Description |
|---|---|
| app.test_client(use_cookies=True) | Méthode de création standard. use_cookies=False désactive la gestion des cookies |
| with app.test_client() as client: | Gestionnaire de contexte. Nettoie automatiquement le contexte de la requête à la sortie. |
Méthode de requête
Toutes les méthodes renvoientTestResponseobjet (hérite de Response).
| Méthodes | Description |
|---|---|
| get(path, **kwargs) | Envoyer une requête GET |
| post(path, **kwargs) | Envoyer une requête POST |
| put(path, **kwargs) | Envoyer une requête PUT |
| delete(path, **kwargs) | Envoyer une requête DELETE |
| patch(path, **kwargs) | Envoyer une requête PATCH |
| open(path, method, **kwargs) | Méthode de requête générique ; la méthode doit être explicitement spécifiée. |
Paramètres de requête (kwargs)
| Paramètre | Description |
|---|---|
| data | Corps de la requête (chaîne ou bytes). Utilisé pour la soumission de formulaire. |
| json | Données JSON, automatiquement sérialisées avec Content-Type: application/json défini |
| query_string | Chaîne ou dictionnaire de paramètres de requête d'URL |
| headers | Dictionnaire des en-têtes de requête |
| content_type | Content-Type personnalisé |
| follow_redirects | bool, indique s'il faut suivre automatiquement les redirections. La valeur par défaut est False. |
| buffered | bool, indique s'il faut mettre la réponse en mémoire tampon. La valeur par défaut est False. |
Objet Response (TestResponse)
| Attributs/Méthodes | Description |
|---|---|
| status_code | Code d'état HTTP (int) |
| status | Texte d'état HTTP, tel que "200 OK" |
| data | Corps de la réponse (bytes) |
| text | Obtenir le corps de la réponse sous forme de texte (str). |
| get_json() | Analyser le corps de la réponse en JSON. Renvoie un dict ou une list. |
| headers | En-têtes de la réponse (objet Headers) |
| location | URL cible de redirection (uniquement pour les réponses 3xx). |
| json_module | Module utilisé pour la sérialisation JSON (par défaut, app.json). |
Test de session
| Méthodes | Description |
|---|---|
| session_transaction(**kwargs) | Gestionnaire de contexte pour lire et écrire directement dans la session. Renvoie un objet SessionMixin. |
Exemples de code
Exemple
from app import create_app
app = create_app()
app.config["TESTING"] = True
def test_api():
with app.test_client() as client:
# Requête GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# Requête POST JSON
resp = client.post("/api/posts", json={
"title": "Tutoriel EXAMPLE",
"body": "Contenu de prise en main"
})
assert resp.status_code == 201
assert resp.get_json()["title"] == "Tutoriel EXAMPLE"
# Requête avec paramètres de requête
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Simuler l'état connecté
with client.session_transaction() as sess:
sess["username"] = "exemple"
resp = client.get("/dashboard")
assert b"example" in resp.data
# Suivre les redirections
resp = client.post("/login", data={
"username": "admin"
}, follow_redirects=True)
assert resp.status_code == 200
app = create_app()
app.config["TESTING"] = True
def test_api():
with app.test_client() as client:
# Requête GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# Requête POST JSON
resp = client.post("/api/posts", json={
"title": "Tutoriel EXAMPLE",
"body": "Contenu de prise en main"
})
assert resp.status_code == 201
assert resp.get_json()["title"] == "Tutoriel EXAMPLE"
# Requête avec paramètres de requête
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Simuler l'état connecté
with client.session_transaction() as sess:
sess["username"] = "exemple"
resp = client.get("/dashboard")
assert b"example" in resp.data
# Suivre les redirections
resp = client.post("/login", data={
"username": "admin"
}, follow_redirects=True)
assert resp.status_code == 200