Skip to main content
New to Testkube? Unleash the power of cloud native testing in Kubernetes with Testkube. Get Started >

Getting Test Results





We saw how simple it is to create and run Testkube tests executions. Obtaining test results is also simple.

Getting Test Executions After Test is Executed​

After each run, Testkube informs you that you can get results of a given test execution.

kubectl testkube run test api-incluster-test
Expected output:
Type          : postman/collection
Name : api-incluster-test
Execution ID : 615d6398b046f8fbd3d955d4
Execution name: openly-full-bream

Test queued for execution
Use the following command to get test execution details:
$ kubectl testkube get execution 615d6398b046f8fbd3d955d4

Or watch test execution until complete:
$ kubectl testkube watch execution 615d6398b046f8fbd3d955d4

testkube get execution 615d6398b046f8fbd3d955d4 - is for getting string output of test execution, where 615d6398b046f8fbd3d955d4 is the test execution ID.

Change the Output Format of Execution Results​

By default, Testkube returns string output of a particular executor. It can also return JSON or Go-Template based outputs.

JSON Output​

Sometimes you need to parse test results programmatically. To simplify this task, test execution results can be in JSON format.

testkube get execution 615d7e1ab046f8fbd3d955d6 -o json
Expected output:
{
"id": "615d7e1ab046f8fbd3d955d6",
"testName": "api-incluster-test",
"testType": "postman/collection",
"name": "monthly-sure-finch",
"executionResult": {
"status": "passed",
"startTime": "2021-10-06T10:44:46.338Z",
"endTime": "2021-10-06T10:44:46.933Z",
"output": "newman\n\nAPI-Health\n\n→ Health\n GET http://testkube-api-server:8088/health [200 OK, 124B, 282ms]\n ✓ Status code is 200\n\n┌─────────────────────────┬────────────────────┬───────────────────┐\n│ │ executed │ failed │\n├─────────────────────────┼────────────────────┼───────────────────┤\n│ iterations │ 1 │ 0 │\n├─────────────────────────┼────────────────────┼───────────────────┤\n│ requests │ 1 │ 0 │\n├─────────────────────────┼────────────────────┼───────────────────┤\n│ test-tests │ 2 │ 0 │\n├─────────────────────────┼────────────────────┼───────────────────┤\n│ prerequest-tests │ 1 │ 0 │\n├─────────────────────────┼────────────────────┼───────────────────┤\n│ assertions │ 1 │ 0 │\n├─────────────────────────┴────────────────────┴───────────────────┤\n│ total run duration: 519ms │\n├──────────────────────────────────────────────────────────────────┤\n│ total data received: 8B (approx) │\n├──────────────────────────────────────────────────────────────────┤\n│ average response time: 282ms [min: 282ms, max: 282ms, s.d.: 0µs] │\n└──────────────────────────────────────────────────────────────────┘\n",
"outputType": "text/plain",
"steps": [
{
"name": "Health",
"duration": "282ms",
"status": "passed",
"assertionResults": [
{ "name": "Status code is 200", "status": "passed" }
]
}
]
}
}

It is quite easy to parse data from test executions with tools like jq or in other programmatic ways.

Need Non-standard Output? Go-Template for the Rescue​

If you need non-standard test execution output, you can easily use output -o go with the passed --go-template template content.

testkube get execution 615d7e1ab046f8fbd3d955d6 -ogo --go-template='{{.Name}} {{.Id}} {{.ExecutionResult.Status}}'
Expected output:
monthly-sure-finch 615d7e1ab046f8fbd3d955d6 success

Getting a List of Test Executions​

Getting a List of Recent Executions​

We can get a list of current executions with use of the executions subcommand:

testkube get executions
Expected output:
        TEST          |        TYPE        | NAME |            ID            | STATUS
+---------------------+--------------------+------+--------------------------+---------+
api-incluster-test | postman/collection | | 615d7e1ab046f8fbd3d955d6 | success
api-incluster-test | postman/collection | | 615d6398b046f8fbd3d955d4 | success
kubeshop-cypress | cypress/project | | 615d5372b046f8fbd3d955d2 | success
kubeshop-cypress | cypress/project | | 615d5265b046f8fbd3d955d0 | error
cypress-example | cypress/project | | 615d4fe6b046f8fbd3d955ce | error
cypress-example | cypress/project | | 615d4556b046f8fbd3d955cc | error

Now we can use an ID to check the results:

testkube get execution 615d5265b046f8fbd3d955d0

Getting a List of Executions in Different Formats​

Terminal mode table data is not always best when processing results in code or shell tests. To simplify this, we have implemented JSON or Go-Template based results when getting results lists.

JSON​

Getting JSON results is quite easy, just pass the -o json flag to the command:

testkube get executions -o json
Expected output:
{
"totals": {
"results": 17,
"passed": 7,
"failed": 10,
"queued": 0,
"pending": 0
},
"results": [
{
"id": "615d7e1ab046f8fbd3d955d6",
"name": "",
"testName": "api-incluster-test",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-10-06T10:44:46.338Z",
"endTime": "2021-10-06T10:44:46.933Z"
},
{
"id": "615d6398b046f8fbd3d955d4",
"name": "",
"testName": "api-incluster-test",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-10-06T08:51:39.834Z",
"endTime": "2021-10-06T08:51:40.432Z"
},
{
"id": "615d5372b046f8fbd3d955d2",
"name": "",
"testName": "kubeshop-cypress",
"testType": "cypress/project",
"status": "passed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-10-06T07:44:30.025Z"
},
{
"id": "615d5265b046f8fbd3d955d0",
"name": "",
"testName": "kubeshop-cypress",
"testType": "cypress/project",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-10-06T07:40:09.261Z"
},
{
"id": "615d4fe6b046f8fbd3d955ce",
"name": "",
"testName": "cypress-example",
"testType": "cypress/project",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-10-06T07:28:54.579Z"
},
{
"id": "615d4556b046f8fbd3d955cc",
"name": "",
"testName": "cypress-example",
"testType": "cypress/project",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-10-06T06:43:44.1Z"
},
{
"id": "615d43d3b046f8fbd3d955ca",
"name": "",
"testName": "cypress-example",
"testType": "cypress/project",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-10-06T06:37:52.601Z"
},
{
"id": "6155cd7db046f8fbd3d955c8",
"name": "",
"testName": "postman-test-7f6qrm",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-09-30T14:45:20.819Z",
"endTime": "2021-09-30T14:45:21.419Z"
},
{
"id": "6155cd67b046f8fbd3d955c6",
"name": "",
"testName": "sanity",
"testType": "postman/collection",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-30T14:45:00.135Z"
},
{
"id": "615322f3f47de75f31ae7a06",
"name": "",
"testName": "long-1",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-09-28T14:13:11.293Z",
"endTime": "2021-09-28T14:13:45.271Z"
},
{
"id": "61532298f47de75f31ae7a04",
"name": "",
"testName": "long-1",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-09-28T14:11:39.179Z",
"endTime": "2021-09-28T14:12:15.202Z"
},
{
"id": "6151b4b342189df67944968e",
"name": "",
"testName": "postman-test-7f6qrm",
"testType": "postman/collection",
"status": "passed",
"startTime": "2021-09-27T12:10:31.581Z",
"endTime": "2021-09-27T12:10:32.105Z"
},
{
"id": "6151b49d42189df67944968c",
"name": "",
"testName": "curl-test",
"testType": "curl/test",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-27T12:10:06.954Z"
},
{
"id": "6151b41742189df67944968a",
"name": "",
"testName": "curl-test",
"testType": "curl/test",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-27T12:07:52.893Z"
},
{
"id": "6151b41342189df679449688",
"name": "",
"testName": "curl-test",
"testType": "curl/test",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-27T12:07:48.868Z"
},
{
"id": "6151b40f42189df679449686",
"name": "",
"testName": "curl-test",
"testType": "curl/test",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-27T12:07:44.89Z"
},
{
"id": "6151b40b42189df679449684",
"name": "",
"testName": "curl-test",
"testType": "curl/test",
"status": "failed",
"startTime": "0001-01-01T00:00:00Z",
"endTime": "2021-09-27T12:07:41.168Z"
}
]
}

Go-Template​

To get a list of test execution IDs with their corresponding statuses with go-template:

testkube get executions -ogo --go-template '{{.Id}}:{{.Status}} '
Expected output
 615d7e1ab046f8fbd3d955d6:success 615d6398b046f8fbd3d955d4:success 615d5372b046f8fbd3d955d2:success 615d5265b046f8fbd3d955d0:error 615d4fe6b046f8fbd3d955ce:error 615d4556b046f8fbd3d955cc:error 615d43d3b046f8fbd3d955ca:error 6155cd7db046f8fbd3d955c8:success 6155cd67b046f8fbd3d955c6:error 615322f3f47de75f31ae7a06:success 61532298f47de75f31ae7a04:success 6151b4b342189df67944968e:success 6151b49d42189df67944968c:error 6151b41742189df67944968a:error 6151b41342189df679449688:error 6151b40f42189df679449686:error 6151b40b42189df679449684:error

Getting a List of Executions of a Given Test​

To find the execution of a particular test, pass the test name as a parameter:

testkube get executions api-incluster-test
Expected output:
        TEST         |        TYPE        | NAME |            ID            | STATUS
+--------------------+--------------------+------+--------------------------+---------+
api-incluster-test | postman/collection | | 615d6398b046f8fbd3d955d4 | success
api-incluster-test | postman/collection | | 615d7e1ab046f8fbd3d955d6 | success

Getting the Test Status of a Given Test from Test CRD​

To get the Test CRD status of a particular test, pass the test name as a parameter:

testkube get tests container-test --crd-only
Expected output:
apiVersion: tests.testkube.io/v3
kind: Test
metadata:
name: container-test
namespace: testkube
spec:
type: container/test
content:
type: string
data: ""
executionRequest:
artifactRequest:
storageClassName: standard
volumeMountPath: /share
dirs:
- test/files
status:
latestExecution:
id: 63b755cab2a16c73e8cfa1c4
number: 1
startTime: 2023-01-05T22:57:14Z
endTime: 2023-01-05T22:57:28Z
status: passed