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.