[英]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.