Flask Test Client API
FlaskClient es un navegador simulado que puede enviar solicitudes y verificar respuestas sin iniciar un servidor.
Medianteapp.test_client()crear una instancia.
Crear cliente de prueba
| Método | Descripción |
|---|---|
| app.test_client(use_cookies=True) | Método de creación estándar. use_cookies=False deshabilita el manejo de cookies. |
| with app.test_client() as client: | Administrador de contexto. Limpia automáticamente el contexto de solicitud al salir. |
Métodos de solicitud
Todos los métodos devuelvenTestResponseobjeto (heredado de Response).
| Método | Descripción |
|---|---|
| get(path, **kwargs) | Enviar solicitud GET |
| post(path, **kwargs) | Enviar solicitud POST |
| put(path, **kwargs) | Enviar solicitud PUT |
| delete(path, **kwargs) | Enviar solicitud DELETE |
| patch(path, **kwargs) | Enviar solicitud PATCH |
| open(path, method, **kwargs) | Método de solicitud genérico, requiere especificar explícitamente el método |
Parámetros de solicitud (kwargs)
| Parámetro | Descripción |
|---|---|
| data | Cuerpo de la solicitud (cadena o bytes). Se usa para el envío de formularios. |
| json | Datos JSON, se serializan automáticamente y se establece Content-Type: application/json |
| query_string | Cadena o diccionario de parámetros de consulta de URL |
| headers | Diccionario de encabezados de solicitud |
| content_type | Content-Type personalizado |
| follow_redirects | bool, si se siguen automáticamente las redirecciones. Por defecto es False |
| buffered | bool, si se almacena en búfer la respuesta. Por defecto es False |
Objeto de respuesta (TestResponse)
| Atributo/Método | Descripción |
|---|---|
| status_code | Código de estado HTTP (int) |
| status | Texto de estado HTTP, por ejemplo "200 OK" |
| data | Cuerpo de la respuesta (bytes) |
| text | Obtener el cuerpo de la respuesta como texto (str) |
| get_json() | Analizar el cuerpo de la respuesta como JSON. Devuelve dict o list |
| headers | Encabezados de respuesta (objeto Headers) |
| location | URL de destino de la redirección (solo respuestas 3xx) |
| json_module | Módulo usado para la serialización JSON (por defecto app.json) |
Pruebas de sesión
| Método | Descripción |
|---|---|
| session_transaction(**kwargs) | Administrador de contexto para leer y escribir session directamente. Devuelve un objeto SessionMixin |
Ejemplo de código
Ejemplo
from app import create_app
app = create_app()
app.config["TESTING"] = True
def test_api():
with app.test_client() as client:
# Solicitud GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# Solicitud POST JSON
resp = client.post("/api/posts", json={
"title": Tutorial de EJEMPLO,
"body": Contenido de introducción
})
assert resp.status_code == 201
assert resp.get_json()["title"] == Tutorial de EJEMPLO
# Solicitud con parámetros de consulta
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Simular estado de sesión iniciada
with client.session_transaction() as sess:
sess["username"] = "ejemplo"
resp = client.get("/dashboard")
assert b"ejemplo" in resp.data
# Seguir redirección
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:
# Solicitud GET
resp = client.get("/api/posts")
assert resp.status_code == 200
data = resp.get_json()
assert isinstance(data, list)
# Solicitud POST JSON
resp = client.post("/api/posts", json={
"title": Tutorial de EJEMPLO,
"body": Contenido de introducción
})
assert resp.status_code == 201
assert resp.get_json()["title"] == Tutorial de EJEMPLO
# Solicitud con parámetros de consulta
resp = client.get("/search?q=flask")
assert b"flask" in resp.data
# Simular estado de sesión iniciada
with client.session_transaction() as sess:
sess["username"] = "ejemplo"
resp = client.get("/dashboard")
assert b"ejemplo" in resp.data
# Seguir redirección
resp = client.post("/login", data={
"username": "admin"
}, follow_redirects=True)
assert resp.status_code == 200