API tests your app writes for you.

Record in development. Get YAML flows in your repo. Run them on every pull request.

  1. 1Install

    The CLI and a recorder that runs in development only.

  2. 2Record

    Use your app on localhost. Each journey becomes a YAML flow in api-tests/.

  3. 3Run on every PR

    Writes the GitHub Actions workflow. Your flows run on each pull request.

A test is a file you can read.

Each flow lives in api-tests/ and goes through review like your code. Your coding agent can edit it too.

api-tests/checkout.yamlflow.yamlexcerpt
- request:    name: Login    method: POST    url: '{{ #env:APP_URL }}/api/auth/login'1    body: { email: '{{ #env:TEST_EMAIL }}', password: '{{ #env:TEST_PASSWORD }}' }2    assertions:      - response.status == 200- request:    name: CreateOrder    depends_on: Login    method: POST    url: '{{ #env:APP_URL }}/api/orders'    headers: { Authorization: 'Bearer {{ Login.response.body.token }}' }3    body: { productId: 42, quantity: 1 }    assertions:      - response.status == 2014
  1. 1

    One address for every run

    APP_URL points the flow at localhost, a preview, or the app CI starts.

  2. 2

    No secrets in the file

    Recorded secrets become environment references, listed in .env.example.

  3. 3

    Steps feed each other

    The login token goes into the next request. The recording maps it for you.

  4. 4

    Plain assertions

    Status codes and fields you can read in review, and edit like any other code.

One check. One comment.

On every pull request, the comment names the flow and the step that failed or got slower. It updates in place on each push.

Comment @stresseur why is it failingto see what the step returned and which assertion failed.

The comment Stresseur posts on the pull request: browse 31% slower, gate failed. A table compares browse (+31%, 59.9 to 78.2 ms, ListProducts +18.1 ms) and checkout (±0%), and gives the command to run the flow locally.
The comment on GitHub, updated in place on each push.

The same flow, as a load test.

Any recorded flow can run under load, locally or from the cloud. See load testing.

What it doesn't do.

It's not an API client for sending requests by hand. Keep yours for that. Stresseur turns the way you already use your app into tests that run without you.

Start free.

Free

$0

1 private repo plus public repos. Pull request checks that warn.

Team

$499 /month

Unlimited repos, gates that fail the check, Slack alerts. Per workspace, not per member.

New workspaces get a 14-day Team trial, no card. All plans