0

I have Zephyr related Query, how I can update the execution status of a test case to PASS/FAIL/WIP by using test case ID with rest API.
I have referred to the article at below link
https://support.getzephyr.com/hc/en-us/articles/205042055-Sample-REST-API-Update-execution-status-of-a-testcase-JAVA-
In this example they have shown how to update execution status by using Schedule ID, but the implementation is in SOAP and we need to achieve the same using REST API. Is there any direct REST API to get schedule ID ?
Also, is there a direct REST API to update execution status of a test case using test case ID ? If yes, can you provide examples for both the above cases?

Thanks in advance.

Priyanka
  • 307
  • 2
  • 16

1 Answers1

0

There is no direct method in Jira REST API to update the execution status using test case ID. However,you can use the following custom method :

import java.util.HashMap;
import java.util.Map;
import org.apache.http.client.methods.HttpPost;
import org.apache.commons.io.IOUtils;
import org.codehaus.jettison.json.JSONObject;
import java.net.Proxy;
import java.net.HttpURLConnection;
import java.net.URL;

public class JiraAuthHeader {
    public static void main(String args[])
    {
        try {
            JiraAuthHeader jiraAuthHeaderObj= new JiraAuthHeader();
            System.out.println(" Create Execution method*********");
            int executionId= jiraAuthHeaderObj.createExecution(<project id>,<issue id>,<cycle id>);
             System.out.println(" Update Execution method*********");
             jiraAuthHeaderObj.updateExecution(executionId,"pass");


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public  String updateExecution(int executionId, String status) throws Exception {
        System.out.println("Executing execution with executionId " + executionId + " and status = " + status);

        String url = "https://jira.company.com/jira/rest/zapi/latest/execution/" + executionId + "/execute";
        //String url = "https://jira.company.com/jira/rest/zapi/latest/execution";
        String statusInReq = "";

        if (status.equalsIgnoreCase("pass")) {
            statusInReq = "1";
        } else if (status.equalsIgnoreCase("fail")) {
            statusInReq = "2";
        }

        // Create request body
        JSONObject obj = new JSONObject();
        obj.put("status", statusInReq);
        obj.put("comment", "through java");

        String requestBody = obj.toString();
        System.out.println("Request body: " + requestBody);
        HttpURLConnection conn
         = httpPut(url, null, null, obj.toString());
        System.out.println("HTTP response code: " + conn.getResponseCode());
        String response = getResponse(conn);
        System.out.println("HTTP response content: " + response);
        System.out.println("from HTTP response content fetch the execution id: " + response.substring(6, 12));

        return response;
    }


    public HttpURLConnection httpGet(String url, Map<String, String> requestHeaders, String queryString) throws Exception {
        System.out.println("Get request");

        if (queryString != null) {
            url += "?" + queryString;
        }

        if (requestHeaders == null) {
            requestHeaders = new HashMap<String, String>();
        }
        requestHeaders.put("Content-Type", "application/json");

        return openConnection(url, "GET", requestHeaders, null);
    }
    public HttpURLConnection httpPut(String url, Map<String, String> requestHeaders, String queryString, String requestContent) throws Exception {
        System.out.println("Put request");

        if (queryString != null) {
            url += "?" + queryString;
        }

         System.out.println(url);
        if (requestHeaders == null) {
            requestHeaders = new HashMap<String, String>();
        }
        requestHeaders.put("Content-Type", "application/json");

        return openConnection(url, "PUT", requestHeaders, requestContent);
    }
    public HttpURLConnection httpPost(String url, Map<String, String> requestHeaders, String queryString, String requestContent) throws Exception {
        System.out.println("Post request");

        if (queryString != null) {
            url += "?" + queryString;
        }

         System.out.println(url);
        if (requestHeaders == null) {
            requestHeaders = new HashMap<String, String>();
        }
        requestHeaders.put("Content-Type", "application/json");

        return openConnection(url, "POST", requestHeaders, requestContent);
    }
    private HttpURLConnection openConnection(String url, String requestMethod, Map<String, String> requestHeaders, String requestContent)
            throws Exception {
        boolean usingProxy = false;

        HttpURLConnection conn = null;
        if (usingProxy) {
            /*String[] proxyInfo = jiraIntegrationConfig.getProxyServer().split(":");
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyInfo[0], Integer.valueOf(proxyInfo[1])));
            conn = (HttpURLConnection) new URL(url).openConnection(proxy);*/
        } else {
            conn = (HttpURLConnection) new URL(url).openConnection(Proxy.NO_PROXY);

            String auth = "ssing621" + ":" + "amex^123";
            auth = "Basic " + new String(new sun.misc.BASE64Encoder().encode(auth.getBytes()));

            conn.setRequestProperty("Authorization", auth);
            conn.setRequestMethod(requestMethod);

            if (requestHeaders != null && requestHeaders.size() > 0) {
                for (String key : requestHeaders.keySet()) {
                    conn.setRequestProperty(key, requestHeaders.get(key));
                }
            }

            if (requestContent != null) {
                conn.setDoOutput(true);
                conn.getOutputStream().write(requestContent.getBytes("UTF-8"));
            }


    }
        return conn;

    }
    private String getResponse(HttpURLConnection conn) throws Exception {
        String response;
        if (conn.getResponseCode() == 200 || conn.getResponseCode() == 201) {
            response = IOUtils.toString(conn.getInputStream());
            return response;
        } else {
            response = IOUtils.toString(conn.getErrorStream());
            throw new Exception(response);
        }
    }
    public int getIssueIdByKey(String issueKey) throws Exception {
        System.out.println("Getting issue ID for test: [" + issueKey + "]");
        String url = ("https://jira.company.com/jira/rest/api/2/issue/" + issueKey);

        HttpURLConnection conn = httpGet(url, null, null);
        String response = getResponse(conn);

        JSONObject resObj = new JSONObject(response);

        if (resObj.has("id")) {
            int issueId = resObj.getInt("id");

            System.out.println("Found issue ID: " + issueId);


            return issueId;
        }

        System.out.println("Could not find IssueId for test: [" + issueKey + "]");
        return 0;
    }

    public int createExecution(int projectId, int issueId, int cycleId) throws Exception {
        System.out.print("Creating execution for project Id " + projectId + " and issueId " + issueId);
        String url = ("https://jira.company.com/jira/rest/zapi/latest/execution");

        // Create request body
        JSONObject reqObj = new JSONObject();
        reqObj.put("issueId", issueId);
        reqObj.put("projectId", projectId);
        reqObj.put("cycleId", cycleId);

        String requestBody = reqObj.toString();
        System.out.println("Request body: " + requestBody);

        HttpURLConnection conn = httpPost(url, null, null, requestBody);
        System.out.println("HTTP response code: " + conn.getResponseCode());
        String response = getResponse(conn);
        System.out.println("HTTP response content: " + response);

        // Parse the Execution Id, and return it
        JSONObject resObj = new JSONObject(response);
        int executionId = Integer.valueOf(resObj.keys().next().toString());
        System.out.println("Creation done, execution ID: " + executionId);

        return executionId;
    }

}
salsinga
  • 1,957
  • 1
  • 14
  • 26