使用REST API

时间:2018-02-16 12:17:33

标签: rest automated-tests jira-zephyr

我有Zephyr相关查询,如何使用带有rest API的测试用例ID将测试用例的执行状态更新为PASS / FAIL / WIP。
我已经提到了以下链接的文章 https://support.getzephyr.com/hc/en-us/articles/205042055-Sample-REST-API-Update-execution-status-of-a-testcase-JAVA-
在这个例子中,他们已经展示了如何使用Schedule ID更新执行状态,但实现是在SOAP中,我们需要使用REST API实现相同的功能。是否有任何直接的REST API来获取计划ID? 此外,是否有直接REST API使用测试用例ID更新测试用例的执行状态?如果是,您能否提供上述两种情况的例子?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Jira REST API中没有直接方法来使用测试用例ID更新执行状态。但是,您可以使用以下自定义方法:

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;
    }

}