简体   繁体   English

是否可以使用Java rally REST API在Rally中将图像文件附加到测试用例结果?

[英]Is it possible to attach an image file to the test case result in Rally using Java rally REST API?

I am trying to attach an image file to the test result in Rally using java Rally REST APIs( A screen shot of the failure). 我正在尝试使用Java Rally REST API将图像文件附加到Rally中的测试结果(失败的屏幕截图)。 The image file is attaching to the test case itself but not to the test result. 映像文件将附加到测试用例本身,而不附加到测试结果。 Tried to give the testCaseResult reference instead of testCaseReference but getting the error "Could not set value for Artifact: Cannot use type TestCaseResult in attribute Artifact" Any help? 试图提供testCaseResult引用而不是testCaseReference,但出现错误“无法为工件设置值:无法在属性工件中使用类型TestCaseResult”是否有帮助? Thanks 谢谢

Following is an example of how to do this. 以下是如何执行此操作的示例。 The example creates a new Test Case Result and then adds the Attachment. 该示例创建一个新的测试用例结果,然后添加附件。 The trick is to set the attribute of "TestCaseResult" on your Attachment to the _ref of the TestCaseResult of interest. 技巧是将附件上的“ TestCaseResult”属性设置为感兴趣的TestCaseResult的_ref。 This differs from adding attachments to Stories, for example, where the attribute is "Artifact". 这与向“故事”添加附件不同,例如,属性为“工件”。

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.CreateRequest;
import com.rallydev.rest.request.DeleteRequest;
import com.rallydev.rest.request.GetRequest;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.request.UpdateRequest;
import com.rallydev.rest.response.CreateResponse;
import com.rallydev.rest.response.DeleteResponse;
import com.rallydev.rest.response.GetResponse;
import com.rallydev.rest.response.QueryResponse;
import com.rallydev.rest.response.UpdateResponse;
import com.rallydev.rest.util.Fetch;
import com.rallydev.rest.util.QueryFilter;
import com.rallydev.rest.util.Ref;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.codec.binary.Base64;

public class RestExample_CreateTestCaseResultAddAttachment {

    public static void main(String[] args) throws URISyntaxException, IOException {

        // Create and configure a new instance of RallyRestApi
        // Connection parameters
        String rallyURL = "https://rally1.rallydev.com";
        String wsapiVersion = "v2.0";
        String applicationName = "RestExample_CreateTestCaseResultAddAttachment";

        // Credentials
        String userName = "user@company.com";
        String userPassword = "topsecret";

        RallyRestApi restApi = new RallyRestApi(
                new URI(rallyURL),
                userName,
                userPassword);
        restApi.setWsapiVersion(wsapiVersion);
        restApi.setApplicationName(applicationName);   

        // Workspace and Project Settings
        String myWorkspace = "/workspace/12345678910";
        String myProject = "/project/12345678911";

        // Test Case to which we want to add a result
        String testCaseFormattedID = "TC40";

        // User name of tester
        String testerRallyID = "tester@testit.com";

        // Reference to created TestCaseResult
        String testCaseResultRef = "";

        // File handle for image to attach
        RandomAccessFile myImageFileHandle;
        String imageFilePath = "/home/username/Pictures/";
        String imageFileName = "image1.jpg";
        String fullImageFile = imageFilePath + imageFileName;
        String imageBase64String;
        long attachmentSize;

        // Open file
        myImageFileHandle = new RandomAccessFile(fullImageFile, "r");        

        //Read User
        QueryRequest userRequest = new QueryRequest("User");
        userRequest.setFetch(new Fetch("UserName", "Subscription", "DisplayName"));
        userRequest.setQueryFilter(new QueryFilter("UserName", "=", testerRallyID));
        QueryResponse userQueryResponse = restApi.query(userRequest);
        JsonArray userQueryResults = userQueryResponse.getResults();
        JsonObject userQueryObject = userQueryResults.get(0).getAsJsonObject();
        String userRef = userQueryObject.get("_ref").getAsString();

        // Query for Test Case to which we want to add results
        QueryRequest testCaseRequest = new QueryRequest("TestCase");
        testCaseRequest.setFetch(new Fetch("FormattedID","Name"));
        testCaseRequest.setQueryFilter(new QueryFilter("FormattedID", "=", testCaseFormattedID));
        QueryResponse testCaseQueryResponse = restApi.query(testCaseRequest);
        JsonObject testCaseJsonObject = testCaseQueryResponse.getResults().get(0).getAsJsonObject();
        String testCaseRef = testCaseQueryResponse.getResults().get(0).getAsJsonObject().get("_ref").getAsString();        

        // Query for Test Set to which we want to add Test Case
        QueryRequest testSetQuery = new QueryRequest("TestSet");
        testSetQuery.setFetch(new Fetch("FormattedID","Name","TestCases"));
        testSetQuery.setWorkspace(myWorkspace);
        testSetQuery.setProject(myProject);
        testSetQuery.setQueryFilter(new QueryFilter("FormattedID", "=", "TS5"));
        QueryResponse testSetQueryResponse = restApi.query(testSetQuery);
        JsonObject testSetJsonObject = testSetQueryResponse.getResults().get(0).getAsJsonObject();
        String testSetRef = testSetJsonObject.get("_ref").getAsString();
        System.out.println("Test Set Ref: " + testSetRef);

        try {           

            //Add a Test Case Result                
            System.out.println("Creating Test Case Result...");
            JsonObject newTestCaseResult = new JsonObject();
            newTestCaseResult.addProperty("Verdict", "Inconclusive");
            newTestCaseResult.addProperty("Date", "2013-09-04T18:00:00.000Z");
            newTestCaseResult.addProperty("Notes", "Automated Selenium Test Runs");
            newTestCaseResult.addProperty("Build", "2013.09.04.0020101");
            newTestCaseResult.addProperty("Tester", userRef);
            newTestCaseResult.addProperty("TestCase", testCaseRef);
            newTestCaseResult.addProperty("TestSet", testSetRef);

            CreateRequest createRequest = new CreateRequest("testcaseresult", newTestCaseResult);
            CreateResponse createResponse = restApi.create(createRequest);            

            if (createResponse.wasSuccessful()) {

                System.out.println(String.format("Created %s", createResponse.getObject().get("_ref").getAsString()));          

                //Read Test Case Result
                testCaseResultRef = Ref.getRelativeRef(createResponse.getObject().get("_ref").getAsString());
                System.out.println(String.format("\nReading Test Case Result %s...", testCaseResultRef));
                GetRequest getRequest = new GetRequest(testCaseResultRef);
                getRequest.setFetch(new Fetch("Date", "Verdict"));
                GetResponse getResponse = restApi.get(getRequest);
                JsonObject obj = getResponse.getObject();
                System.out.println(String.format("Read Test Case Result. Date = %s, Verdict = %s",
                        obj.get("Date").getAsString(), obj.get("Verdict").getAsString()));

                try {
                    // Get and check length
                    long longLength = myImageFileHandle.length();
                    long maxLength = 5000000;
                    if (longLength >= maxLength) throw new IOException("File size >= 5 MB Upper limit for Rally.");
                    int fileLength = (int) longLength;            

                    // Read file and return data
                    byte[] fileBytes = new byte[fileLength];
                    myImageFileHandle.readFully(fileBytes);
                    imageBase64String = Base64.encodeBase64String(fileBytes);
                    attachmentSize = fileLength;

                    // First create AttachmentContent from image string
                    JsonObject myAttachmentContent = new JsonObject();
                    myAttachmentContent.addProperty("Content", imageBase64String);
                    CreateRequest attachmentContentCreateRequest = new CreateRequest("AttachmentContent", myAttachmentContent);
                    CreateResponse attachmentContentResponse = restApi.create(attachmentContentCreateRequest);
                    String myAttachmentContentRef = attachmentContentResponse.getObject().get("_ref").getAsString();
                    System.out.println("Attachment Content created: " + myAttachmentContentRef);            

                    // Now create the Attachment itself
                    JsonObject myAttachment = new JsonObject();
                    myAttachment.addProperty("TestCaseResult", testCaseResultRef);
                    myAttachment.addProperty("Content", myAttachmentContentRef);
                    myAttachment.addProperty("Name", "AttachmentFromREST.jpg");
                    myAttachment.addProperty("Description", "Attachment From REST");
                    myAttachment.addProperty("ContentType","image/jpg");
                    myAttachment.addProperty("Size", attachmentSize);
                    myAttachment.addProperty("User", userRef);          

                    CreateRequest attachmentCreateRequest = new CreateRequest("Attachment", myAttachment);
                    CreateResponse attachmentResponse = restApi.create(attachmentCreateRequest);
                    String myAttachmentRef = attachmentResponse.getObject().get("_ref").getAsString();
                    System.out.println("Attachment  created: " + myAttachmentRef);  

                    if (attachmentResponse.wasSuccessful()) {
                        System.out.println("Successfully created Attachment");
                    } else {
                        String[] attachmentContentErrors;
                        attachmentContentErrors = attachmentResponse.getErrors();
                        System.out.println("Error occurred creating Attachment: ");
                        for (int i=0; i<attachmentContentErrors.length;i++) {
                            System.out.println(attachmentContentErrors[i]);
                        }                   
                    }
                } catch (Exception e) {
                    System.out.println("Exception occurred while attempting to create Content and/or Attachment: ");
                    e.printStackTrace();            
                }                           

            } else {
                String[] createErrors;
                createErrors = createResponse.getErrors();
                System.out.println("Error occurred creating Test Case Result: ");
                for (int j=0; j<createErrors.length;j++) {
                    System.out.println(createErrors[j]);
                }
            }                        

        } finally {
            //Release all resources
            restApi.close();
            myImageFileHandle.close();            
        }        
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM