Ir al contenido

Modelo de ejecución

Cada solicitud puede llevar dos snippets opcionales de JavaScript:

  • Un pre-request script se ejecuta antes de enviar la solicitud. Puede leer y modificar el método, la URL, el body y las cabeceras de la solicitud; leer y escribir variables de entorno; emitir logs; y definir tests.
  • Un post-response script se ejecuta tras llegar la respuesta. Puede leer la respuesta (estado, cabeceras, body, timing, tamaño, JSON/XML parseado), leer y escribir variables de entorno, loguear y correr tests. No puede modificar la solicitud — ese tren ya pasó.

Los scripts se escriben en JavaScript y corren dentro de un sandbox aislado y síncrono. Tienen acceso a un único global, fp.

El sandbox protege contra footguns accidentales —APIs asíncronas, loops desbocados, imports de Node por error— pero no está diseñado para contener un script malicioso. Trata un archivo .http de una fuente no confiable igual que tratarías un script de shell de la misma fuente: léelo antes de ejecutarlo.

MiembroFasesPropósito
fp.request.method / url / bodypre: lectura/escritura · post: solo lecturaMutar la solicitud en curso antes de enviar.
fp.request.headers.get/getAll/set/add/remove/count/toObjectpre: completo · post: solo lecturaAcceso a cabeceras case-insensitive. getAll / add / count son conscientes de duplicados (leen o escriben nombres repetidos); toObject pierde información.
fp.response.status / statusText / body / timingMs / sizeBytessolo postCampos de respuesta de solo lectura. sizeBytes se mide después de decodificar una respuesta comprimida.
fp.response.decodingStatussolo postResultado de decodificar el body según Content-Encoding: 'decoded', 'not-required', 'unsupported' o 'failed' (en los dos últimos casos el body queda tal como se recibió).
fp.response.headers.get/getAll/count/toObjectsolo postCabeceras de respuesta de solo lectura. getAll / count exponen duplicados (p. ej. Set-Cookie).
fp.response.json()solo postParsea el body como JSON (tope 10 MB). Lanza un error cuando el body no se pudo decodificar.
fp.response.xml2Json(options?)solo postParsea el body como XML a un árbol de objetos (tope 10 MB). Lanza un error cuando el body no se pudo decodificar.
fp.environment.get/set/remove/toObjectambasLee/escribe el entorno persistido.
fp.variables.get/setambasLee/escribe variables efímeras por envío.
fp.test(name, fn)ambasDefine una aserción de test.
fp.expect(value)ambasAserciones fluidas estilo Chai.
fp.log/warn/error(...)ambasCaptura líneas de log (también expuestas vía console.log/warn/error).

El sandbox es deliberadamente acotado. Lo siguiente no está disponible a propósito:

  • Promises, async/await, setTimeout, setInterval, queueMicrotask ni ninguna otra primitiva asíncrona — los scripts deben completarse de forma síncrona.
  • eval(), new Function(), compilación de WebAssembly.
  • Acceso a filesystem, red, SO o entorno.
  • Globals del DOM, internals del runtime ni ninguna API de extensión.

Los scripts CPU-bound se cortan en seco a los 5 segundos. Los parsers de JSON y XML topean su entrada en 10 MB cada uno, así una respuesta enorme no puede colgar la app.