API TFS и производительность отчетов: получить результаты тестов по плану тестирования?

В отчете мне нужно представить все результаты теста для определенного плана тестирования.

В настоящее время я использую следующую функцию:

foreach (TestCase testCase in testCasesByWorkItem)
{
    List<ITestCaseResult> testCaseResults = teamProject.TestResults.ByTestId(testCase.TestCaseId).Where(x => x.State == TestResultState.Completed).ToList();

    ....

}

Насколько я понимаю, он возвращает все результаты для этого теста, и один тест может относиться ко многим планам тестирования.

Моя проблема в производительности. Операция занимает до 25 секунд (в режиме отладки), и у меня тысячи тестовых случаев.

Мне нужны только те результаты тестов, которые относятся к определенному плану тестирования.

Например, TestCaseX мог выполняться для планов тестирования Release1.0, Release2.0, .... Release20.0. И меня интересуют только результаты для Release15.0.

В настоящее время я получаю результаты, как указано выше, а затем фильтрую по правильному плану тестирования.

Есть ли способ оптимизировать производительность, каким-то образом только выбирая результаты теста, которые принадлежат данному плану тестирования?

2 ответа

Решение

Вы можете использовать приведенный ниже пример, чтобы выполнить тесты с идентификатором плана тестирования:

TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(new Uri("http://tfsservername:8080/tfs/DefaultCollection"));
        ITestManagementService testmanagementService = tfctc.GetService<ITestManagementService>();
        var teamproject = testmanagementService.GetTeamProject("teamprojectname");
        var testruns = testmanagementService.QueryTestRuns("select * From TestRun");
        List<ITestRun> testrunInPlan = new List<ITestRun>(); 
        foreach (var testrun in testruns)
        {
            if (testrun.TestPlanId==31) // in this case TestPlanId is 31
            {
                testrunInPlan.Add(testrun);
            }
        }

И ниже пример, чтобы получить результат теста для конкретного теста:

ITestCaseResultCollection testcases = testrun.QueryResults();

            foreach (ITestCaseResult testcase in testcases)
            {
                Console.WriteLine("TestCase ID: " + testcase.TestCaseId);
                Console.WriteLine("TestCase Title: " + testcase.TestCaseTitle);
                Console.WriteLine("Error Message: " + testcase.ErrorMessage);
            }

Пожалуйста, проверьте этот блог для деталей об API управления тестированием: http://blogs.msdn.com/b/aseemb/archive/2012/08/07/code-snippets-on-test-management-apis.aspx

Возможно, вы найдете использование API TFS Rest полезным для того, что вы пытаетесь сделать.

https://www.visualstudio.com/en-us/docs/integrate/api/test/runs

Вы сможете получить список всех тестовых прогонов для данного planId, используя первый API, указанный на странице, а затем использовать runId, чтобы получить все тестовые результаты, используя API результатов тестов.

https://www.visualstudio.com/en-us/docs/integrate/api/test/results_1_0

Лично я считаю, что использовать API намного проще, чем работать с объектной моделью.

Другие вопросы по тегам