General information
Root URL
https://apps-qalityplus.soldevelo.com
All requests should be made there.
Get a JWT token:
You will need this token to make any request. The token is valid for ~5m.
If you need the token for a one-time use you can skip step 1 and paste the URL from step 2 into your browser.
You need an Atlassian API token from https://id.atlassian.com/manage-profile/security/api-tokens
Make a GET request with authorization:
username
= your emailpassword
= API token from step 1https://<your_instance>.atlassian.net/plugins/servlet/ac/com.soldevelo.apps.test_management_premium/test-cycles?classifier=json
Copy the
contextJwt
property from the result.
Get Jira issue ID:
QAlity is integrated with Jira. This means test cases are represented as Issues of “QAlity test“ type. Often you will need their ID to make a request.
You need an Atlassian API token from https://id.atlassian.com/manage-profile/security/api-tokens
Make a GET request with authorization:
username
= your emailpassword
= API token from step 1https://<your_instance>.atlassian.net/rest/api/3/issue/<ISSUE KEY or ID>
Copy the
id
property from the response.
Get Jira project ID:
You need an Atlassian API token from https://id.atlassian.com/manage-profile/security/api-tokens
Make a GET request with authorization:
username
= your emailpassword
= API token from step 1https://<your_instance>.atlassian.net/rest/api/3/project/<PROJECT KEY or ID>
Copy the
id
property from the response.
Test cases
GET test steps
/testStep/<ISSUE_ID>?jwt=<JWT>
Params:
ISSUE_ID
- id of the test case - Id of Jira issue
JWT
- the authentication token
Response:
Array<TestStep> TestStep: { attachments: Array<Attachement>, // TEST ATTACHMENTS data: String, // TEST DATA, stored as HTML id: Long, position: int, // step position result: String, // EXPECTED RESULT, stored as HTML step: String, //TEST STEP, stored as HTML } Attachement: { id: int, // id of attachement in Jira issue }
POST test step
/testStep/?jwt=<JWT>
Body:
TestStep: { step: String, //TEST STEP, stored as HTML result: String, // EXPECTED RESULT, stored as HTML data: String, // TEST DATA, stored as HTML attachments: String, // TEST ATTACHMENTS, Array<Attachement> stored as String (JSON.stringify) testCaseId: Long, } Attachement: { id: int, // id of attachement in Jira issue }
PUT test step
/testStep/<STEP_ID>?jwt=<JWT>
Params:
STEP_ID
- id of the step
JWT
- the authentication token
Body:
TestStep: { attachments: String, // TEST ATTACHMENTS, Array<Attachement> stored as String (JSON.stringify) data: String, // TEST DATA, stored as HTML id: Long, testCaseId: Long, position: int, // step position result: String, // EXPECTED RESULT, stored as HTML step: String, //TEST STEP, stored as HTML } Attachement: { id: int, // id of attachement in Jira issue }
Statuses
Status model
type Status = { id: number; name: string; isDefault: boolean; position: number; color: { name: | 'RED' | 'YELLOW' | 'GREEN' | 'BLUE' | 'GRAY' | 'MAGENTA' | 'TEAL' | 'PURPLE' | 'ORANGE' | 'DARK GRAY' | 'LIME'; textToken: string; backgroundToken: string; }; }
GET
/statuses?jwt=<JWT>
Response
{ statuses: Array<Status>; }
Test Executions
GET history
/testExecution/?jwt=<JWT>&testCaseId=<TEST_CASE_ID>&page=<PAGE>
Params:
TEST_CASE_ID
- id of the test case - Id of Jira issue
JWT
- the authentication token
PAGE
- page number, starts from 0
Response:
LIst of executions for provided page. max 10 results.
GET execution
/testExecution/<TEST_EXECUTION_ID>?jwt=<JWT>
Params:
TEST_EXECUTION_ID
- id of the execution
JWT
- the authentication token
Response:
{ comment: String, // stored as HTML, createdDate: String, // example: 2022-01-31T11:11:11.111+0000, executionAssignee: String, // Jira user accountId, id: Long, name: String, statusObject: Status, testCaseId: Long, // Jira issue Id version: Version, } Version: { id: Long, testCaseId: Long, // Jira issue Id testCaseName: String, // Jira issue name testSteps: Array<TestStep>, } TestStep: { attachments: String, // TEST ATTACHMENTS, Array<Attachement> stored as String (JSON.stringify) data: String, // TEST DATA, stored as HTML id: Long, testCaseId: Long, position: int, // step position result: String, // EXPECTED RESULT, stored as HTML step: String, //TEST STEP, stored as HTML } Attachement: { id: number, // id of attachement in Jira issue }
Post execution
/testExecution/?jwt=<JWT>
Params:
JWT
- the authentication token
Body:
{ name: String, statusObject: Status, testCaseId: Long, testSteps: Array, // should be an empty array [] testCaseInCycleId: Long, // OPTIONAL, retrieve this id from test cycle. Check POST Add Test Case To Cycle }
Response:
{ comment: String, // stored as HTML, createdDate: String, // example: 2022-01-31T11:11:11.111+0000, executionAssignee: String, // Jira user accountId, id: Long, name: String, statusObject: Status, testCaseId: Long, // Jira issue Id version: Version, } Version: { id: Long, testCaseId: Long, // Jira issue Id testCaseName: String, // Jira issue name testSteps: Array<TestStep>, } TestStep: { attachments: String, // TEST ATTACHMENTS, Array<Attachement> stored as String (JSON.stringify) data: String, // TEST DATA, stored as HTML id: Long, testCaseId: Long, position: int, // step position result: String, // EXPECTED RESULT, stored as HTML step: String, //TEST STEP, stored as HTML } Attachement: { id: number, // id of attachement in Jira issue }
PUT execution
It is recommended to fetch test execution and edit existing data. To create an execution see POST.
/testExecution/?jwt=<JWT>
Params:
JWT
- the authentication token
Body:
{ comment: String, // stored as HTML, executionAssignee: String, // Jira user accountId, id: Long, name: String, statusObject: Status, testCaseId: Long, // Jira issue Id testSteps: Array<TestStep>, } TestStep: { comment: String, // stored as HTML id: Long, statusObject: Status, testCaseStepId: Long, }
Response:
Updated Execution
{ comment: String, // stored as HTML, createdDate: String, // example: 2022-01-31T11:11:11.111+0000, executionAssignee: String, // Jira user accountId, id: Long, name: String, statusObject: Status, testCaseId: Long, // Jira issue Id version: Version, } Version: { id: Long, testCaseId: Long, // Jira issue Id testCaseName: String, // Jira issue name testSteps: Array<TestStep>, } TestStep: { attachments: String, // TEST ATTACHMENTS, Array<Attachement> stored as String (JSON.stringify) data: String, // TEST DATA, stored as HTML id: Long, testCaseId: Long, position: int, // step position result: String, // EXPECTED RESULT, stored as HTML step: String, //TEST STEP, stored as HTML } Attachement: { id: number, // id of attachement in Jira issue }
Test Cycles
GET all
Fetch all test cycles available for the user (based on the JWT token).
/testCycles/?jwt=<JWT>
Params:
&projectIds=<ID1, ID2...> // comma-separated list of project IDs &name=<NAME> // name of Test Cycle &versionId=<ID> // version ID &isClosed=<Boolean> // is closed &testCaseId=<ID> // test case ID, to get the information if the the test case is already present in test cycles (testCaseExistInCycle in the response) &page=<PAGE> // pagination: current page &size=<SIZE> // pagination: results per page &sort=<SORT> // pagination: field to sort by &direction=<DIRECTION> // pagination: sort strategy
Response (paginated):
Response: { content: Array<TestCycle>; pageable: Pageable; totalElements: number; totalPages: number; last: boolean; sort: Sort; first: boolean; number: number; numberOfElements: number; size: number; empty: boolean; } TestCycle: { id: number; name: string; versionId: null | string; dueDate: null; comment: null | string; isClosed: boolean; projectId: string; createdDate: Date; numberOfTestCases: number; testCaseExistInCycle: null; statuses: StatusesSummary; } StatusesSummary: Array<{ status: Status; total: number; percent: number; }> Pageable: { sort: Sort; pageNumber: number; pageSize: number; offset: number; paged: boolean; unpaged: boolean; } Sort: { sorted: boolean; unsorted: boolean; empty: boolean; }
POST Add Test Case To Cycle
/testCasesInCycle/?jwt=<JWT>
Params:
JWT - the authentication token
Body:
{ testCases: Array<Long>, // list of jira issue ids that you want to add to cycle testCycleId: Long // id of the test cycle }
Response:
Array<TestCaseInCycle> TestCaseInCycle: { id: Long, // id of create object, can be used when executiong test case to make the execution in cycle testCaseId: Long, // id of the test case testCycleId: Long // id of the cycle }