Skip to content

Documentation map

Everything here, on one page, with what each part is for.

Start here

Page What it covers
Getting Started Install tomato and get a passing suite, in seven steps
Writing a Suite How to write scenarios worth trusting: one behaviour each, and asserting the effects your application produces rather than only the response it returns

Read them in that order. The first gets something running; the second is what makes it worth having.

Running a suite

Page What it covers
Step Coverage Finding the steps no scenario uses, and gating on it
GitHub Action Running the suite in CI

Configuring

Configuration Reference is tomato.yml in full โ€” settings, the application under test, containers, resources, hooks and feature paths.

Then one page per dependency, for the options it accepts and how to wire a container to it:

HTTP Server ยท gRPC ยท Kafka ยท RabbitMQ ยท ScyllaDB ยท Redis ยท S3 ยท AWS ยท Lifecycle

Steps, by resource

275 steps across 14 resource types. Every page is generated from the step definitions themselves, so it cannot disagree with the binary you are running โ€” and tomato steps prints the same thing in your terminal.

Resource Steps For
HTTP Client 56 Calling your application and asserting on the response
Kafka 29 Producing, consuming and asserting on topics
S3 27 Object storage: MinIO, LocalStack or a real bucket
Redis 25 Keys, TTLs, counters and hashes
RabbitMQ 23 Queues, exchanges and routing
Shell 22 Running commands and asserting on their output
gRPC 19 Calling unary methods via server reflection
HTTP Server 18 Stubbing the HTTP services your application calls
WebSocket Client 17 Connecting and exchanging messages
PostgreSQL 11 Seeding tables, running SQL, asserting on rows
ScyllaDB 9 Cassandra and ScyllaDB over CQL
Lifecycle 9 Stopping and starting the app and its containers mid-scenario
WebSocket Server 8 Stubbing a WebSocket your application connects to
AWS 2 The IRSA identity tomato hands the application

Overview of all resources lists them together.

Changing tomato itself

Page What it covers
Architecture What is in the repository, which parts ship, and which of them CI checks
Adding a Step or Resource The walkthrough for both, and how to deprecate rather than rename
Stability What counts as a breaking change, and how long a deprecation lasts

The short version

tomato runs your application the way production does and talks to it over the network. A suite is tomato.yml plus .feature files โ€” no glue code. Every scenario starts from the same state, because tomato resets every resource before each one and gives you no way to turn that off.

The part people miss: assert the effects. A 201 says your handler did not crash. Whether the row landed, the event published and the receipt was written is what the rest of your system depends on, and Writing a Suite is about asserting those.