как обновить результаты теста TFS по конфигурации?

У меня есть метод, который, кажется, работает для обновления результатов теста TFS ТОЛЬКО для той конфигурации, в которой он работал. Но это кажется очень неэффективным. Может ли кто-нибудь помочь мне понять, что я делаю неправильно? - в частности, мне не нужно получать testSuites для заданного идентификатора теста, а затем перебирать все тесты для этих наборов, чтобы сравнить с идентификатором теста, который у меня уже есть.

В качестве примера я запускаю тест на Windows 8/Chrome. Итак, TestContext содержит соответствующие значения, которые сопоставляются с конфигурацией. Я хочу обновить результат теста для этой конфигурации в каждом наборе тестов, в котором она существует. Вот код:

    public void UpdateResult(TestContext context, bool passed)
    {
        int testCaseID = Convert.ToInt32(context.Test.Properties["id"]);

        TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri);

        ITestManagementService service = projectCollection.GetService<ITestManagementService>();
        ITestManagementTeamProject teamProject = service.GetTeamProject(teamProjectName);

        ITestCase testCase = teamProject.TestCases.Find(testCaseID);
        ITestSuiteCollection testSuites = teamProject.TestSuites.ReferencingTestCase(testCaseID);

        if (testCase != null)
        {
            // ---- Get Test Plan
            int testPlanId = 20589;
            ITestPlan testPlan = teamProject.TestPlans.Find(testPlanId);

            // ---- Create Test Run
            ITestRun testRun = teamProject.TestRuns.Create();
            testRun = testPlan.CreateTestRun(true);

            // ---- Get TestPoint
            ITestPointCollection points = testPlan.QueryTestPoints("SELECT * FROM TestPoint WHERE TestCaseId =" + testCaseID);
            foreach (ITestPoint tp in points)
            {
                //Get configuration, which contains configuration values
                ITestConfiguration testConfiguration = teamProject.TestConfigurations.Query("Select * from TestConfiguration WHERE Name='" + tp.ConfigurationName + "'")[0];
                IDictionary<string, string> testConfigValues = testConfiguration.Values;

                if ((!testConfigValues.ContainsKey("Browser") ||
                    testConfigValues["Browser"].ToLower() == context.Test.Properties["Browser"].ToString().ToLower())
                    && (!testConfigValues.ContainsKey("Operating System") ||
                    testConfigValues["Operating System"].ToLower() == context.Test.Properties["Operating System"].ToString().ToLower())
                   )
                {
                    testRun.AddTestPoint(tp, testPlan.Owner);
                }

            }

            testRun.State = TestRunState.Completed;
            testRun.Save();

            foreach (ITestSuiteBase testSuite in testSuites)
            {
                foreach (ITestSuiteEntry testCse in testSuite.TestCases)
                {
                    ITestCaseResultCollection results = testRun.QueryResults();
                    if (testCse.TestCase.Id == testCaseID)
                    {

                        foreach (IdAndName config in testCse.Configurations)
                        {
                            IEnumerable<ITestCaseResult> testCaseResults = from tr in results
                                                                           where
                                                                           tr.TestConfigurationId == config.Id &&
                                                                           tr.TestCaseId == testCase.Id
                                                                           select tr;

                            foreach (ITestCaseResult result in testCaseResults)
                            {
                                result.Outcome = passed ? TestOutcome.Passed : TestOutcome.Failed;
                                result.State = TestResultState.Completed;
                                result.Save(true);
                            }
                        }
                    }


                }
            }

            testRun.Save();
            testRun.Refresh();
        }
    }

person s mac    schedule 21.10.2016    source источник


Ответы (1)


Для получения результата теста вы можете напрямую получить результат теста по идентификатору теста. Например:

TfsTeamProjectCollection teamCollection;
            ITestManagementService service;
            ITestManagementTeamProject project;
            var picker = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, false);
            picker.ShowDialog();
            if (picker.SelectedTeamProjectCollection != null && picker.SelectedProjects != null)
            {
                teamCollection = picker.SelectedTeamProjectCollection;
                service = teamCollection.GetService<ITestManagementService>();
                project = service.GetTeamProject(picker.SelectedProjects.First().Name);
            }
            else
            {
                return;
            }

//Get Test result
 var testResults = project.TestResults.ByTestId([test case id]);

 // iterate each result for the case
 foreach (ITestCaseResult result in testResults)
 {
     //TODO other code
     //update result
     result.Outcome = TestOutcome.Failed;
     result.Save(true);
}

Также добавьте несколько ссылок о связанном TFS API, которые могут вам помочь:

person PatrickLu-MSFT    schedule 25.10.2016
comment
Поскольку это должно быть программным, сборщик не приносит мне большой пользы. Итак, я предполагаю, что полезной частью является получение testResults ByTestId. Это полезно и приятно знать, но я не думаю, что это решает мою проблему? Моя проблема заключается в обновлении для всех конфигураций, если я не сделаю то чудовище, которое я опубликовал. Как включить ТОЛЬКО обновление выбранной конфигурации в ваш код? Кроме того, разве мне не нужно вызывать AddTestPoint? - person s mac; 26.10.2016
comment
у вас есть дополнительная информация, чтобы помочь с моим комментарием? Я видел те ссылки, которые вы дали, и не говорите о том, как вы включаете конфигурации в обновления. - person s mac; 11.11.2016