Run your test suites where your services run
From CI trigger to test report in one submission
Bring the frameworks you already use


“Signadot is a key part of our solution for the most critical parts of our testing pyramid. For integration and end-to-end testing we need to have a sandbox up and running because they need a live service to talk to.”
The hardest layers of the testing pyramid, covered pre-merge.
Earnest runs its integration and end-to-end suites in parallel against live sandboxes on every change, catching problems before they reach staging.
Auto-routed to the sandbox under test
Results where your team already looks
Point your existing suites at every change
Run the tests you already have against isolated sandboxes on the cluster you already operate, with results back in the PR in minutes.
Jobs FAQ
What test frameworks can Jobs run?
Any framework that runs in a container. Teams run Playwright, Cypress, k6, pytest, and fully custom suites by pointing the runner group at their own image. A Job executes a script or command inside that image, so nothing about your existing tests needs to change.
Where do Jobs execute?
Inside your Kubernetes cluster, on pre-warmed runner pods managed by the Signadot Operator. The Signadot control plane orchestrates scheduling and stores results, while the test traffic itself stays between the runner pod and the services on your cluster.
How does a Job target a specific sandbox?
Each Job declares a routing context that binds it to a sandbox or route group. Signadot injects the matching routing key into the HTTP traffic the Job emits, so requests flow through the sandboxed versions of changed services and reach shared services for everything else. Off-the-shelf suites work without code changes.
How do results get back to my CI pipeline?
Submit a Job from CI with the Signadot CLI and attach to it. Stdout and stderr stream back to the CI log in real time, and any declared artifacts such as HTML reports, screenshots, and videos are uploaded when the Job completes and can be downloaded from the dashboard or API.