How to add Test Execution to a Test Plan with Xray Rest API?

2.1k Views Asked by At

I'm trying to add a Test Execution to a Test Plan using Xray Rest API & Axios. I have already created an API key and authenticated successfully like so:

const axios = require('axios');
const { argv } = require('yargs');

const { clientId, clientSecret } = argv;

const headers = {
  Accept: 'application/json',
  'Content-Type': 'application/json',
};

const authenticateXray = async () => {
  await axios({
    method: 'post',
    url: `https://xray.cloud.xpand-it.com/api/v2/authenticate`,
    headers,
    data: {
      client_id: clientId, // my created client id goes here
      client_secret: clientSecret, // my created client secret goes here
    },
  })
    .then(res => console.log(`Xray authentication response status was: ${res.status}`)) // 200!
    .catch(e => {
      throw new Error(e.response.data.error);
    });
};

Then, I made a call & passed some param values gathered before when creating a Test Plan & Test Execution like so:

await axios({
    method: 'posts',
    url: `https://xray.cloud.xpand-it.com/api/internal/testplan/${createdTestPlan.data.id}/addTestExecs`,
    data: {
      0: createdTestExecIssue.data.id,
    },
});

However, I get this error: (node:46352) UnhandledPromiseRejectionWarning: Error: Request failed with status code 400. I was able to link a Test Execution to the Test Plan using another endpoint from Jira Rest API, but I'm looking to add it instead, check the screenshot below for reference.

enter image description here

2

There are 2 best solutions below

0
On BEST ANSWER

I was able to solve this issue by passing the data differently like so:

await axios({
    ...
    ...
    data: [`${testExecutionId}`],
});

& passing the X-acpt key/value pair in the Request Header like so:

'X-acpt': `encodedCharaterGoesHere-YouNeedToretrievUsingNetworkTabInChrome`,

My request ended up like so:

await axios({
    method: 'post',
    url: `https://xray.cloud.xpand-it.com/api/internal/testplan/${testPlanId}/addTestExecs`,
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json',
      'X-acpt': `encodedCharaterGoesHere-YouNeedToretrievUsingNetworkTabInChrome`,
      'X-Powered-By': 'Express',
    },
    data: [`${testExecutionId}`],
  });
0
On

You can do this with the graphQL api, just replace the YourTestPlanID and yourTestExecutionId.

const response =  await axios({
    method: 'post',
    url:    'https://xray.cloud.xpand-it.com/api/v1/graphql',
    data:   { 
      query: 
        `mutation {
          addTestExecutionsToTestPlan(
            issueId: "YourTestPlanID",
            testExecIssueIds: ["yourTestExecutionId"]) {
                addedTestExecutions
                warning
            }
        }`
    },
    headers: { 
        Authorization:  `Bearer TOKEN obtained using the authentication api`,
        'Content-Type': 'application/json' }
});