████████ ███████ ███████ ████████ ██ ██ ██ ██ ██████ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ █████ ███████ ██ █████ ██ ██ ██████ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ███████ ███████ ██ ██ ██ ██████ ██████ ███████
/tɛst kjub/ by Kubeshop
Welcome to TestKube - your friendly Kubernetes testing framework!
TestKube decouples test artefacts and execution from CI/CD tooling; tests are meant to be part of your clusters state and can be executed as needed:
- Manually via kubectl cli
- Externally triggered via API (CI, external tooling, etc)
- Automatically on deployment of annotated/labeled services/pods/etc (WIP)
Main TestKube components are:
- kubectl TestKube plugin - simple - installed w/o 3rd party repositories (like Krew etc), communicates with
- API Server - work orchestrator, runs executors, gather execution results
- CRDs Operator - watches TestKube CR, handles changes, communicates with API Server
- Executors - runs tests defined for specific runner
- Postman Executor - runs Postman Collections
- Cypress Executor - runs Cypress Tests
- Curl Executor - runs simple Curl commands
- Executor Template - for creating your own executors
- Results DB - for centralized test results aggregation and analysis
- TestKube Dashboard - standalone web application for viewing real-time TestKube test results
TestKube attempts to:
- Avoid vendor lock-in for test orchestration and execution in CI/CD pipelines
- Make it easy to orchestrate and run any kind of tests - functional, load/performance, security, compliance, etc. - in your clusters, without having to wrap them in docker-images or providing network access
- Make it possible to decouple test execution from build processes; engineers should be able to run specific tests whenever needed
- Centralize all test results in a consistent format for "actionable QA analytics"
- Provide a modular architecture for adding new types of test scripts and executors
Getting Started
Check out the Installation and Getting Started guides to set up TestKube and run your first tests!
Discord
Don't hesitate to say hi to the team and ask questions on our Discord server.
Documentation
Is available at https://kubeshop.github.io/testkube
Contributing
Go to contribution document to read more how can you help us
Feedback
Whether it helps you or not - we'd LOVE to hear from you. Please let us know what you think and of course, how we can make it better.
Need information on container executors
Hi
I have a container image which takes care of some test executions. I would like to create it as a executor on testkube.
have gone through the below documentation but it is not having any commands which I can follow : Like command to create a executor with the help of yaml and how to run the test which points to this container ! https://kubeshop.github.io/testkube/test-types/container-executor
Could you please help me with the commands and steps that I need to follow ?
Documentation on how to use a Cypress project with a PRIVATE (bitbucket) git repository is incomplete
[SOLVED]
--git-username
and--git-token
--git-token
(and NOT the password of your bitbucket user!)Describe the bug The documentation on how to create a testkube test from a Cypress project does not explain how do do it when it's a private repository.
To Reproduce
https://[email protected]/...
)[1]
Logs from teskube's API-server from DataDog...

[2] Example of succesfull test run, using publicly accessible testkube testrepo
Expected behavior Cypress project is checked out, tests are run.
Version / Cluster
Screenshots This is how my test config looks like...
As "Token" I used the value of my personal Atlassian API-Token...
sian API-token...
Unable to copy parameter files from bitbucket to Kubernetes cluster through testkube create test open API
Hi I am unable copy parameter files and script files from bitbucket to Kubernetes where testkube is running.
Could you please let me know how can I achieve this through create new test API
After Isito injection testkube connection error happens
Describe the bug A K8s environment with Istio TLS connection between pods. Without Istio injection "testkube" cannot connect to the actual test endpoint because TLS connection
Connection reset by peer
error happens.To Reproduce Steps to reproduce the behavior:
kubectl label namespace testkube istio-injection=disabled --overwrite
Expected behavior A clear and concise description of what you expected to happen.
Version / Cluster
Screenshots
Additional context 172.17.0.37:8088 - API server internal IP address 172.17.0.1:59970 - Not sure which pod's IP address it is.
API server POD log
'chmod: .: Operation not permitted' running simple test on OpenShift
I created a simple bash executor as follows:
And I have simple test
The problem is, when I run the test it fails with the following output
For what I've seen that's a problem with the ServiceAccount used by the Job creating the Pods to run the tests. I do have a ServiceAccount I can use, but I have changed every possible entry under the values file (I'm using Helm to deploy) but nothing seems to change. The ServiceAccount used by the Job is still
default
.What would be the right entry on the values file?
provide option to specify pod size while running test to generate specific throughput
Testkube automatically create pod with best-effort-kube feature to run test . There is no option to specify test size for pod which we want to use to run k6 performance test . This will be a good feature to have to run test and to compete with other performance tool which provide these option .
Solution :
In test or Open API we can pass parameter to create pod with requested resource .
Allow my Testkube Test to fetch the test files from a branch Dynamically
Context
When I open a new PR from my feature branch my CI/CD pipeline creates a new environment for me to run tests on to see if it will break anything.In Testkube I set the branch where the tests are going to be fetched from when I'm creating the test, however, the branch will need to be specified for each execution because it will be a different one.
Question
How can I tell Testkube the branch which I want to fetch my tests from when I'm triggering an execution ?
Testkube executor initcontainer "testkube-executor-init" tries to execute "chmod" and fails when uid is not "0"
Describe the bug The Testkube executor initcontainer "testkube-executor-init" tries to execute "chmod" and fails when uid is not "0". This means, that Testkube does not work on OpenShift with scc "restricted", which is the default scc, or Kubernetes clusters where uid "0" is not allowed. The testkube executor initcontainer would run on OpenShift when scc "anyuid" would be allowed, but this is not the case in most clusters as this is a security issue.
{"level":"info","ts":1671465831.2670317,"caller":"minio/minio.go:257","msg":"Getting the contents of buckets [test-curl-test]"} {"level":"info","ts":1671465831.267091,"caller":"minio/minio.go:55","msg":"connecting to minio","endpoint":"testkube-minio-service:9000","accessKeyID":"minio","location":"","token":"","ssl":false} {"level":"info","ts":1671465831.2713344,"caller":"minio/minio.go:268","msg":"Bucket test-curl-test does not exist"} {"type":"line","content":"chmod: .: Operation not permitted\nchmod: .: Operation not permitted\n"} {"type":"error","content":"process error: exit status 1"}
To Reproduce Steps to reproduce the behavior:
Expected behavior The initcontainer works also when run with an uid other than "0". Maybe there is a way to omit "chmod".
Version / Cluster
Screenshots See error message.
Additional context Add any other context about the problem here.
running mvn test is failing for me, with this error: unable to access 'https://github.com/kubeshop/testkube-executor-maven.git/': Could not resolve host: github.com
Describe the bug running the maven test is failing for me, it cannot connect to github.
To Reproduce testkube create test --git-uri https://github.com/kubeshop/testkube-executor-maven.git --git-path examples/hello-maven-settings --type maven/test --name maven-example-test --git-branch main
testkube run test maven-example-test --copy-files "testkube-executor-maven/examples/hello-maven-settings/se ttings.xml:/tmp/settings.xml" --args "--settings" --args "/tmp/settings.xml" -v "TESTKUBE_MAVEN=true"
expected successful test but it returns this error: ⨯ process error: exit status 128 output: Cloning into 'repo'... fatal: unable to access 'https://github.com/kubeshop/testkube-executor-maven.git/': Could not resolve host: github.com
so could you please tell me what is the issue for connecting to the github, if I try git clone https://github.com/kubeshop/testkube-executor-maven.git, is fine but it fails with testkube command. could you please help. thanks !
Envs are not passed to the executor container
Describe the bug
To Reproduce
Having a test with this execution request
does not pass them to the executor container
TLS Errors and Excessive logging - Helm Chart 1.6 - Operator Controller Manager
Describe the bug
The bug in https://github.com/kubeshop/testkube/issues/2231 is not fixed in the most recent Helm Chart (testkube-1.6.0)
To Reproduce Steps to reproduce the behavior:
testkube init
orhelm install
manager
container in thetestkube-operator-controller-manager-...
...http: TLS handshake error from 10.42.213.64:52162: remote error: tls: bad certificate
Expected behavior The certificate should be valid. The addition of a test should not cause thousands of errors to be logged even if the cert is not valid.
Version / Cluster
Percentile calculations seem to be off
Describe the bug
Having these 6 execution times:
Testkube tells me my P95 is
6.56
Whereas the actual P95 (even P85!) is actually
11.56
Multiple percentile calculators throw out the same resultThe real issue here is the message/assumption Testkube is sending to users "Everything is fine" – where in reality there is really an issue with the executions because P95 actually is DOUBLE P50
CDEvent Test Triggers
I want Testkube to run a Test or TestSuite when receiving CDEvents defined at https://cdevents.dev/docs/
For each trigger I want to configure
subject
- which CDEvent subject to listen forpredicate(s)
- which corresponding predicate(s) to listen forFor example
Would run the
my-test-suite
TestSuite if adeployed
event is received for theservice
subject with the specified id and environment - see https://github.com/cdevents/spec/blob/v0.1.1/continuous-deployment-pipeline-events.md#service-deployedTestkube would have to listen for these events on an HTTP endpoint that could be targeted by external systems. The events would be received in HTTP binary mode as shown at https://github.com/cdevents/spec/blob/v0.1.1/cloudevents-binding.md#examples
Role testkube-operator-leader-election-role is missing since testkube version 1.7
Describe the bug Role "testkube-operator-leader-election-role" is missing since testkube version 1.7. It was there with version 1.6.
So the container "manager" of the pod "testkube-operator-controller-manager" is throwing an error:
E0105 12:50:27.101292 1 leaderelection.go:334] error initially creating leader election record: leases.coordination.k8s.io is forbidden: User "system:serviceaccount:col-testkube-test:testkube-operator-controller-manager" cannot create resource "leases" in API group "coordination.k8s.io" in the namespace "col-testkube-test"
To Reproduce
Expected behavior Include it in the helm chart again.
Version / Cluster
build(deps): bump json5 from 2.2.1 to 2.2.3 in /docs
Bumps json5 from 2.2.1 to 2.2.3.
Release notes
Sourced from json5's releases.
Changelog
Sourced from json5's changelog.
Commits
c3a7524
2.2.394fd06d
docs: update CHANGELOG for v2.2.33b8cebf
docs(security): use GitHub security advisoriesf0fd9e1
docs: publish a security policy6a91a05
docs(template): bug -> bug report14f8cb1
2.2.210cc7ca
docs: update CHANGELOG for v2.2.27774c10
fix: add proto to objects and arraysedde30a
Readme: slight tweak to intro97286f8
Improve example in readmeDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.build(deps): bump json5 from 2.2.1 to 2.2.3 in /test/cli-tests
Bumps json5 from 2.2.1 to 2.2.3.
Release notes
Sourced from json5's releases.
Changelog
Sourced from json5's changelog.
Commits
c3a7524
2.2.394fd06d
docs: update CHANGELOG for v2.2.33b8cebf
docs(security): use GitHub security advisoriesf0fd9e1
docs: publish a security policy6a91a05
docs(template): bug -> bug report14f8cb1
2.2.210cc7ca
docs: update CHANGELOG for v2.2.27774c10
fix: add proto to objects and arraysedde30a
Readme: slight tweak to intro97286f8
Improve example in readmeDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.