3

ラリーでは、私はする必要があります

TestCaseResult を新​​しい TestSet Ref で更新します。

また

以前の TestCaseResult からすべてをコピーし、TestSet Ref を変更するだけで、新しい TestCaseResult を作成します。

Rally の Java REST ツールキットを使用して同じことをしようとしています。内部で JSON REST API を使用しているようです。

CreateRequest または UpdateRequest でこれを実行しようとすると、API から「テスト セットの値を設定できませんでした: null」というエラーが表示されます。

TestCaseResult の TestSet を更新することはできませんか (既存または新規作成)?

これが私が使用しているサンプルコードです(テストセットを変更して既存のものからテストケース結果を作成することを示しています)。

        //get testcaseresult object
        GetRequest tcrReq = new GetRequest("/testcaseresult/12345.js"); 
        tcrReq.setFetch(new Fetch("FormattedID", "Name"));
        GetResponse tcrResponse = restApi.get(tcrReq);

        //update testcaseresult object with new testset
        JsonObject tsRef = new JsonObject();
        tsRef.addProperty("_ref", "https://rally1.rallydev.com/slm/webservice/1.39/testset/1029348.js");
        tcrResponse.getObject().add("TestSet",tsRef);
        tcrResponse.getObject().remove("_ref");

        //Create API for new testcaseresult object
        CreateRequest createRequest = new CreateRequest("testcaseresult", tcrResponse.getObject());
        CreateResponse createResponse = restApi.create(createRequest);
        if(createResponse.wasSuccessful()){
            System.out.println(createResponse.getObject());
        }else{
            String[] ss = createResponse.getErrors();
            for(int i=0; i<ss.length; i++){
                System.out.println(ss[i]);
            }
        }

私が何か間違ったことをしているのか、それともこれがラリーの制限なのかを理解するのを手伝ってもらえますか?

4

2 に答える 2

3

「テスト セットの値を設定できませんでした: null」というエラー メッセージが表示される理由は、TestCaseResults に「非表示」の制約があり、関連付けられている TestCase を対象の TestSet にスケジュールする必要があるためだと思います。 TestCaseResult にその TestSet を属性として割り当てる前に。

残念ながら、TestCases には TestSet 属性がないため、TestSet から TestCases コレクションを照会し、そのコレクションをループして、親の TestCase がそのコレクションのメンバーであるかどうかを確認する必要があります。TestCase がその TestSet の TestCases コレクションに含まれていることを確認したら、目的の TestSet 属性でメンバー TestCaseResult を正常に更新することができます。以下をテストしましたが、期待どおりに動作します。

これを実現する方法を示すコード スニペットを次に示します。

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

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

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

    // Ref to Test Case Result of Interest
    String testCaseResultRef = "/testcaseresult/1234567891.js";

    GetRequest testCaseResultRequest = new GetRequest(testCaseResultRef);
    GetResponse testCaseResultResponse = restApi.get(testCaseResultRequest);
    JsonObject testCaseResultObj = testCaseResultResponse.getObject();

    // Get the Test Case Result's Parent Test Case        
    JsonObject testCase = testCaseResultObj.get("TestCase").getAsJsonObject();

    String testCaseRef = testCase.get("_ref").getAsString();
    GetRequest testCaseRequest = new GetRequest(testCaseRef);
    GetResponse testCaseResponse = restApi.get(testCaseRequest);
    JsonObject testCaseObj = testCaseResponse.getObject();

    System.out.println(testCaseRef);

    // Ref to Test Set of Interest
    String testSetRef = "/TestSet/12345678910.js";

    // Get the Test Set of interest
    GetRequest testSetRequest = new GetRequest(testSetRef);
    GetResponse testSetResponse = restApi.get(testSetRequest);
    JsonObject testSetObject = testSetResponse.getObject();

    // Grab the Test Cases in this Test Set
    JsonArray testCasesInTestSet = testSetObject.get("TestCases").getAsJsonArray();

    // Loop through and see if our Test Case of interest is a member
    boolean testCaseIsInSet = false;
    for (int i=0; i<testCasesInTestSet.size(); i++) {
        JsonObject thisTestCase = testCasesInTestSet.get(i).getAsJsonObject();
        String thisTestCaseRef = thisTestCase.get("_ref").getAsString();

        if (thisTestCaseRef.equals(testCaseRef)) {
            testCaseIsInSet = true;
        }
    }

    if (testCaseIsInSet) {
        // Update Test Set on Existing Test Case Result
        try {            

            //Add Test Set
            System.out.println("\nUpdating Existing Test Case Result's Test Set attribute...");
            testCaseResultObj.addProperty("TestSet", testSetRef);

            UpdateRequest updateExistTestCaseResultRequest = new UpdateRequest(testCaseResultRef, testCaseResultObj);
            UpdateResponse updateExistTestCaseResultResponse = restApi.update(updateExistTestCaseResultRequest);

            if (updateExistTestCaseResultResponse.wasSuccessful()) {
                System.out.println("Updated Test Case Result with new Test Set");
                String[] updateExistTestCaseResultWarnings;

                updateExistTestCaseResultWarnings = updateExistTestCaseResultResponse.getWarnings();
                    System.out.println("Warning(s) occurred updating Test Case Result: ");
                for (int i=0; i<updateExistTestCaseResultWarnings.length;i++) {
                    System.out.println(updateExistTestCaseResultWarnings[i]);
                }

            } else {
                String[] updateExistTestCaseResultErrors;
                updateExistTestCaseResultErrors = updateExistTestCaseResultResponse.getErrors();
                    System.out.println("Error occurred updating Test Case Result: ");
                for (int i=0; i<updateExistTestCaseResultErrors.length;i++) {
                    System.out.println(updateExistTestCaseResultErrors[i]);
                }                   
            }
        } catch (Exception e) {
            System.out.println("Exception occurred while updating Tags on existing Test Case: ");
            e.printStackTrace();            
        }

        finally {
            //Release all resources
            restApi.close();
        }
    } else {
        System.out.println("Unable to Update Test Case Result with specified Test Set");
        System.out.println("Parent Test Case is not a member of this Test Set");
    }
}
于 2012-11-22T00:11:48.223 に答える
0

TestSet を更新するときは、値を参照として設定するだけで済みます。ラッパー オブジェクトは必要ありません。

tcrResponse.getObject().add("TestSet", "/testset/1029348.js");
于 2012-11-19T15:43:00.980 に答える