

Table of Contents
Start your free trial.
Start your free trial.
Start your free trial.




Table of Contents
Executive Summary
Your tests are already running as containers. They just do not know it yet.
If your applications run in Kubernetes, every deployment, every service, every background task is a container being scheduled, managed, and observed by the cluster. The cluster handles resource allocation, retries, networking, secrets, and logging. That is exactly what a test execution environment needs.
Most teams are not using it that way. Tests still run as steps inside CI pipelines, on dedicated runners, or on engineer laptops before a push. The cluster is right there. The tests run somewhere else. This post is about closing that gap.
What a Kubernetes Job actually is
A Kubernetes Job is a workload resource that runs a container to completion. Unlike a Deployment, which runs continuously, a Job runs once, finishes, and reports success or failure. Kubernetes handles scheduling the pod, retrying on failure up to a configured limit, and cleaning up after completion.
CronJobs extend this with a schedule: run this Job every hour, every night, every Monday morning.
That model maps directly onto how tests should work. A test suite runs to completion, produces a result, and exits. Kubernetes already has the primitive. The question is whether your testing layer knows how to use it.
Why running tests as Jobs matters
When tests run inside CI pipeline steps, they inherit the constraints of the pipeline runner: a single execution context, shared compute, limited parallelism, and no native access to the cluster's networking or secrets.
Running tests as Kubernetes Jobs changes all of that.
A test pod in the same namespace as your application can reach it directly. No port forwarding needed. Secrets inject the same way they do for any other workload. Ten suites in parallel means ten jobs. Kubernetes handles placement. There is no separate runner fleet to provision or maintain.
The DIY path and where it breaks
Some teams get here by building it themselves. The typical path: write a container for the test suite, create a Job manifest, apply it with kubectl, check the logs manually, delete the pod when done.
That works for one test. It does not scale.
The problems start when you need to:
- Run multiple suites across environments
- Parameterize tests with environment-specific config
- Collect artifacts reliably after each run
- Trigger tests from CI, schedules, or events
- Surface pass/fail results somewhere a human can act on them
At that point you are building a test orchestration system. You are writing controllers, managing cleanup, handling retries, aggregating logs, and maintaining all of it as the cluster evolves.
The underlying primitive, the Kubernetes Job, is right. The layer on top is what takes real engineering effort to build and maintain.
What Testkube adds
Testkube is a test orchestration platform that runs as a native Kubernetes operator inside your own cluster. It uses Kubernetes Jobs as its execution primitive, which means tests run exactly as described above: as pods, inside the cluster, with full access to the cluster's networking, secrets, and compute.
What Testkube adds on top is the orchestration layer teams would otherwise build themselves.
Test workflows are version-controlled and reusable across environments. A single workflow definition can run against dev, staging, and production with environment-specific configuration injected at runtime. No need to duplicate manifests per environment.
Triggers come from anywhere. Testkube integrates with GitHub Actions, GitLab CI, Jenkins, Argo, and other CI/CD tools so that pipelines can trigger test runs via API or CLI. Tests can also be scheduled directly, triggered by Kubernetes events, or run on demand. The trigger and the execution are separate concerns.
Results are centralized. Every run produces logs, artifacts, and a structured result in the Testkube dashboard. Pass/fail history, execution trends, and failure details are visible in one place across all environments and all test types, regardless of which tool ran them. This is the centralized test reporting most teams build piecemeal.
The test suite itself does not change. Playwright tests, k6 scripts, JMeter configurations, Postman collections: all run as-is. Testkube wraps them in a Kubernetes Job and manages the rest.
What this looks like for a platform team
A platform team running 80+ microservices across Kubernetes was triggering most of its tests manually. QA engineers ran suites before releases, SRE ran health checks during incidents, and developers ran integration tests ad hoc. There was no shared execution layer, no central results view, and no way to run tests without the right person available.
After adopting Testkube, test workflows were defined once and stored in version control. Any team member could trigger a run from the dashboard or CLI without needing to know which tool the test used or how to configure the environment. Tests ran as Kubernetes Jobs inside the cluster, using the same Argo and Spinnaker integrations the team already operated. During a weekend P1 incident, an SRE pulled up a saved test workflow, executed it, and had a quality signal within minutes, without waiting for a QA engineer.
The underlying change was not the tests. It was where and how they ran.
Practical starting point
If you are already running applications in Kubernetes and want to start running tests the same way, the path is straightforward:
- Install the Testkube agent into your cluster via Helm
- Connect it to the Testkube control plane
- Point it at an existing test — a k6 script, a Playwright suite, a Postman collection
- Create a test workflow and run it once from the dashboard to confirm it executes correctly as a Kubernetes Job
Adding schedules, environment parameters, and CI triggers is incremental from there. The test does not change. The execution model does.
Key takeaways
- Kubernetes Jobs are the right primitive for test execution. They run a container to completion and exit, which is exactly how a test suite should work. CronJobs extend this with native scheduling.
- Tests running as Jobs use cluster networking, secrets, and compute natively. A test pod in the same namespace as your application can reach it directly with no port forwarding. Secrets inject as ConfigMaps and Secrets. Scaling is elastic across cluster nodes.
- The DIY path breaks at scale. Writing a Job manifest works for one test. Parameterization, scheduling, triggers, and centralized results require building a test orchestration system, which is a real engineering project.
- Testkube uses Jobs as the execution primitive and adds the orchestration layer on top: version-controlled workflows, multi-source triggers, centralized results.
- Existing tests do not change. Playwright, k6, JMeter, Postman, and other framework tests run as-is. The execution model changes, not the test code.
Frequently asked questions
What is a Kubernetes Job?
A Kubernetes Job is a workload resource that runs a container to completion. Unlike a Deployment, which runs continuously, a Job runs once, finishes, and reports success or failure. Kubernetes handles scheduling the pod, retrying on failure up to a configured limit, and cleaning up after completion. CronJobs extend this with scheduling: run the Job every hour, every night, or on any cron expression.
Why should I run tests as Kubernetes Jobs?
Tests that run as Kubernetes Jobs use the same compute, networking, secrets, and observability as your applications. A test pod in the same namespace as your application can reach it directly with no port forwarding. Secrets and ConfigMaps work natively. Scaling is elastic across cluster nodes instead of linear across CI runners. Logs and artifacts use standard Kubernetes patterns instead of getting scattered across pipeline tools.
What is the difference between a Kubernetes Job and a Deployment?
A Deployment runs containers continuously and maintains a desired number of replicas. A Job runs a container to completion and exits. For test execution, Jobs are the right primitive: a test suite runs once, produces a result, and exits. Deployments are designed for long-running services that need to stay alive.
Can I run scheduled tests as Kubernetes CronJobs?
Yes. Kubernetes CronJob is the native primitive for scheduled execution: run a Job every hour, every night, or on any cron expression. This maps directly onto common test scheduling needs like nightly regression runs, hourly smoke tests against production, or weekly performance baselines. Testkube uses CronJobs under the hood for scheduled test workflows.
Can I build my own test orchestration on top of Kubernetes Jobs?
Yes, but it gets complicated quickly. The basic pattern (write a container, create a Job manifest, kubectl apply) works for one test. Scaling that to multiple suites, parameterized environments, reliable artifact collection, CI triggers, and centralized pass/fail reporting requires building controllers, managing cleanup, handling retries, and maintaining it all as the cluster evolves. At that point you are building a test orchestration system, which is a real engineering project.
Does running tests as Kubernetes Jobs require changing my existing test code?
No. Tests written in Playwright, k6, JMeter, Postman, Cypress, and other frameworks run as-is. Testkube wraps the existing test in a Kubernetes Job and handles the orchestration around it. The test suite does not change. The execution model changes.
How do I get started running tests as Kubernetes Jobs?
Install the Testkube agent into your cluster via Helm, connect it to the Testkube control plane, point it at an existing test (k6, Playwright, Postman, etc.), and create a test workflow that runs once from the dashboard. Adding schedules, environment parameters, and CI triggers is incremental from there. The test does not change. The execution model does.


About Testkube
Testkube is the open testing platform for AI-driven engineering teams. It runs tests directly in your Kubernetes clusters, works with any CI/CD system, and supports every testing tool your team uses. By removing CI/CD bottlenecks, Testkube helps teams ship faster with confidence.
Get Started with a trial to see Testkube in action.




.png)
