๐Ÿ™Testfile

Testfile, a self-documenting definition how to run your tests & a tooling to run them locally, on your CI/CD infrastructure, or in the cloud

A YAML file that describes the whole test setup, with the services your tests depend on โ€” which makes runs reproducible, on your machine and on CI. Every run is recorded, and even CI runs can be inspected locally.

Testfile
version: 0
test:
  parallel:
    - name: lint
      command: npm run lint
    - name: e2e
      ports:
        web: random
      services:
        web:
          command: npm start
          env:
            PORT: ${{ ports.web }}
          ready:
            http: http://localhost:${{ ports.web }}/healthz
      command: npm run test:e2e

testfile start โ€” that's the whole CI job.

Simple definitions

The setup is easy: a name and a command is a test, and testfile init writes the first version for you. Plain YAML, validated by a schema, readable in every code review.

Scales with requirements

Grow from one command to sequences, parallel groups and matrix tests โ€” with retries, conditions and result caching when the suite gets big. The same file runs locally, in watch mode and on CI.

Manages your services

A database โ€” or any other service your tests need โ€” is declared once and started on demand, as a container or a plain process: health-checked before the first test runs and reachable through random ports.

Unified viewer for local and CI runs

Browse recorded runs in the terminal (testfile tui) or in the browser (testfile serve): statuses, durations, per-test logs, service logs โ€” and why a test ran or came from the cache. A simple way to sync runs between machines, including CI runs on your computer, like GitHub Actions.

The Testfile web viewer showing a recorded run: the runs table, per-test statuses with cache reasons, a service row and the merged log

Everything in the box

The format

Services & environment

Running & CI

Read the docs Browse the guides