如何通过REST API Java在Azure DevOps中添加测试结果?

4

我尝试使用以下程序,但测试结果未被添加到VSTS:

public static void addTestResults() throws ClientProtocolException, IOException {
     String pat = "abc@abc.com:xxxxxxxxxxxxxxxxxxxxxx";
     byte[] byteArray2 = Base64.encodeBase64(pat.getBytes());
     String encodedString2 = new String(byteArray2);

     HttpClient httpClient = HttpClientBuilder.create().build();
     HttpPost postRequest = new HttpPost("https://xxx.visualstudio.com/DefaultCollection/XXX/_apis/test/runs/1000012/results?api-version=5.0-preview.5" );
     List<NameValuePair> arguments1 = new ArrayList<NameValuePair>(4);
     arguments1.add(new BasicNameValuePair("state", "Completed"));
     arguments1.add(new BasicNameValuePair("testPoint", "{\"id\":40}"));
     arguments1.add(new BasicNameValuePair("outcome", "Passed"));
     arguments1.add(new BasicNameValuePair("testCase", "{\"id\":7340}"));

     try {
         postRequest.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
         patchRequest.setHeader(HttpHeaders.ACCEPT, "application/json");
         postRequest.setHeader("Authorization", "Basic "+encodedString2);
         postRequest.setEntity(new UrlEncodedFormEntity(arguments1,"UTF-8"));

         HttpResponse response = httpClient.execute(postRequest);
         System.out.println("Out is"+EntityUtils.toString(response.getEntity()));

     }    catch (IOException e) {
         e.printStackTrace();
     }
}

以下是输出结果:

Out is
{  
"$id":"1",
"innerException":null,
"message":"Value cannot be null.\r\nParameter name: results",
"typeName":"System.ArgumentNullException, mscorlib",
"typeKey":"ArgumentNullException",
"errorCode":0,
"eventId":0
}

有没有人能帮我找出我的错误所在。我已经尝试了几天却毫无进展。

涉及IT技术,无法直接翻译为“解决”。请确认是否需要更具体的上下文信息。

似乎您的JSON格式不正确。您需要获取正确的请求示例并将其与您发送的最终请求正文进行比较。如果您可以在此处提供此示例,则更容易找到问题。 - Ukrainis
POST https://dev.azure.com/fabrikam/Fabrikam-Fiber-TFVC/_apis/test/Runs/24/results?api-version=5.0-preview.5请求体:[ { "testCaseTitle": "验证网站主题", "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", "priority": 1, "outcome": "通过" }, { "testCaseTitle": "验证网站链接", "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", "priority": 2, "outcome": "失败", "associatedBugs": [ { "id": 30 } ] } ] - Ram
这是我使用的参考链接: https://learn.microsoft.com/en-us/rest/api/azure/devops/test/results/add?view=azure-devops-rest-5.0 - Ram
请求体是发送请求时发送的内容,你能否获取正在发送的最终请求呢?你可以使用调试来获取它。 - Ukrainis
1个回答

0
我得到了解决方案,这就是它:
public static void addTestResults() throws ClientProtocolException, IOException {
     String pat = "abc@abc.com:xxxxxxxxxxxxxxxxxxxxxx";
     byte[] byteArray2 = Base64.encodeBase64(pat.getBytes());
     String encodedString2 = new String(byteArray2);
    String reqbody = "{\n" + 
            "        \"state\": \"Completed\",\n" + 
            "        \"testPoint\": {\n" + 
            "          \"id\": 40\n" + 
            "        },\n" + 
            "        \"outcome\": \"Passed\",\n" + 
            "        \"testCase\": {\n" + 
            "          \"id\": 7390\n" + 
            "        }\n" + 
            "      }";
     HttpClient httpClient = HttpClientBuilder.create().build();
     HttpPost postRequest = new HttpPost("https://xxx.visualstudio.com/DefaultCollection/XXX/_apis/test/runs/1000012/results?api-version=5.0-preview.5" );


     try {
         postRequest.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
         patchRequest.setHeader(HttpHeaders.ACCEPT, "application/json");
         postRequest.setHeader("Authorization", "Basic "+encodedString2);
         postRequest.setEntity(new StringEntity(reqbody, ContentType.APPLICATION_JSON));

         HttpResponse response = httpClient.execute(postRequest);
         System.out.println("Out is"+EntityUtils.toString(response.getEntity()));

     }    catch (IOException e) {
         e.printStackTrace();
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接