难以在测试集中获得完整的测试用例列表

时间:2014-05-09 14:55:16

标签: c# rally

我使用C#中的Rally Rest API Ver 2.0.1.0创建了一个应用程序,使我的测试工程师能够使用CSV文件以自动方式修改Rally测试数据。

我希望应用程序能够找到现有的测试集,获取集合中的测试用例列表,向该列表添加更多测试用例,然后使用新的测试用例列表更新测试集。

我的问题是,当我在测试集中获得测试用例列表时,即使测试集中有超过20个测试用例,Rally也只返回20个测试用例。

为了获得测试集中的测试用例列表,这里是我的代码(我为没有所有声明而道歉,但我认为你明白了这一点):

public ArrayList testSetList = new ArrayList(); 

Request requestTS = new Request("TestSet");

requestTS.Project = rallyProjectRef;

requestTS.ProjectScopeDown = false;

requestTS.ProjectScopeUp = false;

requestTS.Fetch = new List<string> { "Name", "ObjectID", "Iteration", "TestCases" };

requestTS.Query = new Query("Name", Query.Operator.Equals, testSetName).And(new Query("Iteration", Query.Operator.Equals, currentIterationRef));

try
{
    QueryResult findTSMatchQueryResult = m.myRestApi.Query(requestTS);
    string currentTestSetRef = "/TestSet/" + findTSMatchQueryResult.Results.First()["ObjectID"];

     string testCasesintheTestSEt = currentTestSetRef + "/TestCases";
     DynamicJsonObject item = m.myRestApi.GetByReference(testCasesintheTestSEt, "TestCase", "ObjectID");
     foreach (var testCaseObject in item["Results"])
     {
         testSetList.Add(testCaseObject);
     }

循环遍历GetByReference方法的结果时,只返回了20个测试用例对象。有没有办法让我使用此GetByReference方法扩展返回对象的数量?或者是否有我可以设置的查询以获取测试集中的测试用例对象的完整列表?

我使用了上述方法,因为我注意到当使用Update方法“更新”测试集中的测试用例时,Rally会清除所有现有数据,并将新的测试用例列表视为完整的测试用例集在测试集中。也许还有另一种方法可以在不消除现有测试用例的情况下将测试用例添加到现有测试集中?

目前,在尝试更新测试集中的测试用例时,我使用以下代码,如果testCaseList尚未包含先前存在的测试用例,则会从测试集中删除已存在的测试用例

DynamicJsonObject toUpdate = new DynamicJsonObject();
toUpdate["TestCases"] = testCasesList;
try
{
    OperationResult updateOperationResult = m.myRestApi.Update(currentTestSetRef, toUpdate);
    if (updateOperationResult.Success == true)
    {
        return "Added the test case to the test set. ";
    }
    else
    {
        return "Error.  An error occurred trying to update the test case list of the test set. ";
    }
}
catch (Exception)
{
    return "Error.  An exception occurred trying to update the test cases list of the test set. ";
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

在任何请求中,您可以将请求限制设置为足够高的数字,例如:

requestTS.Limit = 1000;

有关请求成员的详细信息,请参阅文档here

至于在测试集上向现有的测试用例集合添加新的测试用例,您对于在WS API中TestCase上没有TestSet属性的对象模型是正确的。这是一个完整的代码,它将测试用例添加到此测试集上的23个测试用例的现有集合中,并且在更新集合之前返回所有23个测试用例。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Rally.RestApi;
using Rally.RestApi.Response;

namespace addTCtoTS
{
    class Program
    {
        static void Main(string[] args)
        {
            RallyRestApi restApi;
            restApi = new RallyRestApi("user@co.com", "secret", "https://rally1.rallydev.com", "v2.0");

            String projectRef = "/project/222"; 
            Request testSetRequest = new Request("TestSet");
            testSetRequest.Project = projectRef;
            testSetRequest.Fetch = new List<string>()
                {
                    "Name",
            "FormattedID",
                    "TestCases"
                };

            testSetRequest.Query = new Query("FormattedID", Query.Operator.Equals, "TS22");
            QueryResult queryTestSetResults = restApi.Query(testSetRequest);
            String tsRef = queryTestSetResults.Results.First()._ref;
            String tsName = queryTestSetResults.Results.First().Name;
            Console.WriteLine(tsName + " "  + tsRef);
            DynamicJsonObject testSet = restApi.GetByReference(tsRef, "FormattedID", "TestCases");
            String testCasesCollectionRef = testSet["TestCases"]._ref;
            Console.WriteLine(testCasesCollectionRef);

            ArrayList testCasesList = new ArrayList();

            foreach (var ts in queryTestSetResults.Results)
            {
                Request tcRequest = new Request(ts["TestCases"]);
                QueryResult queryTestCasesResult = restApi.Query(tcRequest);
                foreach (var tc in queryTestCasesResult.Results)
                {
                    var tName = tc["Name"];
                    var tFormattedID = tc["FormattedID"];
                    Console.WriteLine("Test Case: " + tName + " " + tFormattedID);
                    DynamicJsonObject aTC = new DynamicJsonObject();
                    aTC["_ref"] = tc["_ref"];
                    testCasesList.Add(aTC);  //add each test case in the collection to array 'testCasesList'
                }
            }

     Console.WriteLine("count of elements in the array before adding a new tc:" + testCasesList.Count);

          DynamicJsonObject anotherTC = new DynamicJsonObject();
          anotherTC["_ref"] = "/testcase/123456789";             //any existing test to add to the collection

           testCasesList.Add(anotherTC);

           Console.WriteLine("count of elements in the array:" + testCasesList.Count);
           testSet["TestCases"] = testCasesList;
           OperationResult updateResult = restApi.Update(tsRef, testSet);

        }
    }
}

代码可在this github repo.

中找到

enter image description here

答案 1 :(得分:0)

换句话说,你问题的答案是“不”。 - 没有办法让GetByReference返回测试集中的所有测试用例 - 它一次返回20个。为了在测试集中获得&gt; 20个测试用例的数组,您必须使用上面的查询方法,遍历结果,并将每个结果放入数组中。

ArrayList TestCaseList = restApi.GetByReference(TestSet["TestCases"]["_ref"])["Results"];

只会返回最多20个结果。