Pruebas de API
Las peticiones HTTP son expresiones: método en mayúsculas, URL y un bloque declarativo. Devuelven una respuesta como valor. HTTPX crea el cliente al necesitarlo y lo cierra después de cada test/fila.
Enviar una petición
var token = "ejemplo-local"
var response = POST "http://127.0.0.1:8765/users" {
headers { "Authorization": "Bearer ${token}" }
query { notify: true }
body json {
name: "Angel"
role: "tester"
}
}
expect response.status == 201
expect response.json.name == "Angel"
Métodos: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. El bloque es obligatorio, aunque esté vacío. headers, query y body json son opcionales, pueden ir en cualquier orden y aparecer una vez cada uno. Headers es un mapa de strings; query es un mapa; JSON acepta un valor serializable. El cuerpo JSON añade Content-Type: application/json salvo que lo reemplaces. Las comas entre propiedades son opcionales en mapas, también anidados; en listas siguen siendo obligatorias.
Reutilizar un payload cargado
flow submitUser(baseUrl: String) -> Map[String, Any] {
var payload = load("data/user.json")
return POST "${baseUrl}/users" { body json payload }
}
test "Crear usuario" {
const response = submitUser("http://127.0.0.1:8765")
expect response.status == 201
}
load() elige JSON, YAML o CSV por la extensión. Las rutas se resuelven desde el módulo que declara la carga. Puedes enviar peticiones en tests, flows y fixtures; están prohibidas dentro de fn e inicializadores del módulo. check y list nunca envían peticiones.
Campos de la respuesta
| Campo | Valor |
|---|---|
status |
Código HTTP entero |
json |
JSON decodificado, o null si el cuerpo está vacío/no es JSON |
text |
Texto de la respuesta |
headers |
Mapa con nombres de headers en minúsculas |
url |
URL final después de redirects |
Las respuestas se cargan completas. Se siguen redirects y se verifica TLS. No se usan implícitamente proxies del entorno. Las cookies duran dentro del test y se eliminan entre tests.
Respuestas negativas
var response = GET "http://127.0.0.1:8765/users/missing" {}
expect response.status == 404
expect response.json.error == "User not found"
HTTP 4xx/5xx son valores de respuesta. Fallos de conexión, timeout y TLS lanzan errores capturables. Los asserts determinan si la respuesta cumple lo esperado.
URL base y timeout
GET "/users/missing" {} une la URL base y el path. Una URL completa se utiliza directamente. El timeout se aplica a HTTPX, no al tiempo total del test.
Inicia python examples/demo_server.py y ejecuta tscr run examples/api.tscr. OAuth, multipart, retries, validación JSON Schema/OpenAPI y streaming quedan para futuras versiones. Usa env("TOKEN") en tests/flows para las credenciales.
Migración desde 0.1
api.get(...) y api.post(...) se retiraron en 0.2. Sustitúyelos por GET url {} y POST url { body json payload }. Los campos de respuesta se conservan. Consulta el changelog.