If you aim to interact with Xray data, there are a bunch of APIs you can use for different purpose.
But first you need to answer:
This page will help you out answer these questions.
Although similar, Xray for Jira server/Data Center(DC) and Xray for Jira Cloud are different products, essentially because they are built on top of different infrastructures and application capabilities. Jira server/datacenter and Jira Cloud are distinct products, with different roadmaps, built using distinct technologies, and providing different APIs. This has a consequence that apps for Jira server/DC and for Jira Cloud are essentially totally different from an architecture standpoint, but eventually also from a feature perspective.
Jira server/DC provides certain customizations capabilities, which may not be available on Jira Cloud.
From an integration standpoint, there will always be changes if a 3rd party wishes to integrate with both Xray server/DC and Xray Cloud. However, these can be subtle, depending on the flow to be implemented.
?? |
provided by | type of API | versions | authentication | purpose | notes | |
---|---|---|---|---|---|---|
1 | Jira | REST API | v3 |
|
| This API does not provide ways of accessing/modifying internal Xray data, such as test steps, for example. |
2 | Xray | REST API | v1, v2 |
|
| |
3 | Xray | GraphQL | v2 |
Note: to make GraphQL requests, an initial REST API call needs to be made to the authentication endpoint |
| This API cannot be used to import test automation results. |
provided by | type of API | versions | authentication | purpose | notes | |
---|---|---|---|---|---|---|
1 | Jira | REST API | latest |
|
| This API does not provide ways of accessing/modifying internal Xray data, such as test steps, for example. |
2 | Xray | REST API | v1.0, v2.0 |
|
|
|
Xray REST API v2.0 is an extension to the original v1.0 of the REST API. Therefore, all existing endpoints on v1.0 also exist on v2.0 (even if you don't see that in the docs); you just need to replace the "1.0" by "2.0" on the URL. Example: /rest/raven/1.0/api/test/{key}/testexecutions becomes /rest/raven/2.0/api/test/{key}/testexecutions |
Importing automation results into Xray is a very common use case.
At high-level, the flow can be depicted in the following diagram.
There are some initial steps that need to be performed on the tool prior to importing results. The creation of the Test issue in Xray, could be done at any moment prior to importing results(manually or via the API).
The recommended way for importing results is by using the Xray JSON format and one of the respective endpoints (server/DC, cloud), which is quite flexible and very straightforward if you wish just have overall visibility of the test result, for example.
There are also other well-known formats, each one providing different capabilities (server/DC, cloud).
Xray JSON format has the same syntax but to the distinct nature of Jira server/DC and Jira Cloud (and also Xray), there are some nuances.
|
In this case we're assuming:
And we want to...
The following request shows how to import results for two tests, identified by their issue keys. The first one failed while the second passed.
Both tests were performed against version 1.0 of the SUT, using the Chrome browser; since it is relevant for us to analyze the results later on from each browser perspective, we map the browser name to a Test Environment.
On the failed test, we leave a comment on the Test Run and also attached a screenshot as evidence.
curl -H "Content-Type: application/json" -X POST -u jira_username:jira_password --data @payload.json https://jiraserver.example.com/rest/raven/2.0/import/execution |
{ "info": { "summary": "Execution of automated tests for release", "description": "This execution was automatically created when importing execution results from an external source", "project": "BOOK", "version": "1.0", "revision": "123", "startDate": "2021-07-14T11:47:35+01:00", "finishDate": "2021-07-14T11:53:00+01:00", "testEnvironments": [ "chrome" ] }, "tests": [ { "testKey": "BOOK-429", "start": "2021-07-14T11:47:35+01:00", "finish": "2021-07-14T11:53:00+01:00", "comment": "invalid user", "status": "FAIL", "evidences" : [ { "data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkG...." "filename": "screenshot.jpg", "contentType": "image/jpeg" } ] }, { "testKey": "BOOK-458", "start": "2021-07-14T11:47:35+01:00", "finish": "2021-07-14T11:53:00+01:00", "status": "PASS" } ] } |
After importing results, a Test Execution would be created containing the results for the two tests; the details of the execution screen show the data of the Test Run, including its status, comment, timings, among other.
token=$(curl -H "Content-Type: application/json" -X POST --data '{ "client_id": "32A27E69B0AC4E539C14016437000000","client_secret": "d62f81eb9ed859e11e54356dd8a00e4a5f0d0c2a2b52340776f6c7d6d7000000" }' https://xray.cloud.getxray.app/api/v2/authenticate) curl -H "Content-Type: application/json" -X POST -H "Authorization: Bearer $token" --data @"payload.json" "https://xray.cloud.getxray.app/api/v2/import/execution |
{ "info": { "summary": "Execution of automated tests for release", "description": "This execution was automatically created when importing execution results from an external source", "project": "BOOK", "version": "1.0", "revision": "123", "startDate": "2021-07-14T11:47:35+01:00", "finishDate": "2021-07-14T11:53:00+01:00", "testEnvironments": [ "chrome" ] }, "tests": [ { "testKey": "BOOK-70", "start": "2021-07-14T11:47:35+01:00", "finish": "2021-07-14T11:53:00+01:00", "comment": "invalid user", "status": "FAILED", "evidences" : [ { "data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkG...." "filename": "screenshot.jpg", "contentType": "image/jpeg" } ] }, { "testKey": "BOOK-71", "start": "2021-07-14T11:47:35+01:00", "finish": "2021-07-14T11:53:00+01:00", "status": "PASSED" } ] } |
After importing results, a Test Execution would be created containing the results for the two tests; the details of the execution screen show the data of the Test Run, including its status, comment, timings, among other.