Execution engine
For each test, executeTest runs these steps:
- Clone the variable scope and add request variables.
- Run the pre-request script in the sandbox.
- Run the protocol call (HTTP, GraphQL, gRPC, WebSocket, MCP, LLM, RAG or agent) under a timeout and abort signal, recording spans; a flow block (delay, condition, script, sub-flow, log, set, assert) runs its own step instead. A data-changing call to an environment marked as production without the caller's consent is refused here, before anything is sent.
- Run the test script.
- Run checks (assertions, evaluators and implicit limits) against a normalised check context.
- Extract values into runtime variables.
- Classify the result: an execution exception means
error, a failed check meansfailed, otherwisepassed.
runTests pulls tests from an async iterator with backpressure, schedules them on a semaphore, handles dependencies with deferred promises, retries with backoff, streams redacted results to JSONL, and aggregates statistics incrementally with exact percentiles.
Every error is normalised to a kind (NetworkError, TimeoutError, AuthenticationError, …) with what, why and suggested fixes.
