Извлечение тестовых шагов TFS всегда возвращает количество 0

Я пытаюсь получить шаги теста (также известные как «действия»), которые были добавлены в тестовый пример в TFS (2017.2) с помощью API (Microsoft.TeamFoundationServer.ExtendedClient v15.112.1). Моя текущая реализация всегда возвращает 0 тестовых шагов, хотя в реальном тестовом примере есть шаги. Я также пробовал это в чистом новом командном проекте без какой-либо настройки рабочего элемента, и даже там он возвращает 0 шагов. В моей реализации используется более старый API (на основе веб-сервисов SOAP), потому что кажется, что новый API на основе http еще не реализует шаги тестирования. Это код, который я использовал:

private void GetTestStepsForTestCase(int testCaseId, int testSuiteId, 
string teamProjectName, Uri tfsUrl)
{
   TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(tfsUrl);
   ITestManagementService itms = tpc.GetService<ITestManagementService>();
   ITestManagementTeamProject ittp = itms.GetTeamProject(teamProjectName);
   ITestSuiteBase suite = ittp.TestSuites.Find(testSuiteId);
   ITestCaseCollection testCaseCollection = suite.AllTestCases;
   ITestCase itestCase = testCaseCollection.FirstOrDefault(t => t.Id == testCaseId);

   foreach (Microsoft.TeamFoundation.TestManagement.Client.ITestAction itestAction in itestCase.Actions)
   {
      // Do something
   }
}

Кто-нибудь?


person Fokko    schedule 07.05.2018    source источник


Ответы (2)


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

Установите пакет nuget: Microsoft.TeamFoundationServer.ExtendedClient — 15.112.1

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.TestManagement.Client;
using Microsoft.VisualStudio.Services.Client;
using System;

namespace RetrieveTestSteps
{
    class Program
    {
        static void Main(string[] args)
        {
            var u = new Uri("http://server:8080/tfs/DefaultCollection");
            var c = new VssClientCredentials();
            TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(u, c);
            tpc.EnsureAuthenticated();   
            ITestManagementService itms = tpc.GetService<ITestManagementService>();
            ITestManagementTeamProject ittp = itms.GetTeamProject("LCScrum");
            ITestSuiteBase suite = ittp.TestSuites.Find(352);
            ITestCaseCollection testCaseCollection = suite.AllTestCases;

            foreach (var tc in testCaseCollection)
            {
                ITestCase testcase = ittp.TestCases.Find(tc.Id);

                foreach (ITestAction action in testcase.Actions)
                {
                    Console.WriteLine(String.Format("{0} - {1}", testcase.Id, action));
                }
            }
            Console.Read();
        }
    }
}

введите здесь описание изображения

person Andy Li-MSFT    schedule 08.05.2018
comment
Спасибо за ваш ответ, Энди. Я скопировал пример кода в новое консольное приложение (.NET Framework 4.6.1), но у меня осталась та же проблема. Наверное, что-то связанное с экологией? - person Fokko; 08.05.2018
comment
@Fokko Вы уверены, что проверили правильный набор или тестовый пример? Я предлагаю вам создать новый проект, а затем создать тестовый пример, чтобы проверить, сохраняется ли проблема. Вы также можете попробовать код на другом компьютере. Я проверил это на разных машинах, все они работали как положено. - person Andy Li-MSFT; 09.05.2018
comment
@Fokko Вы можете попробовать проверить конкретный тестовый пример с помощью ITestCase testcase = ittp.TestCases.Find(22);, чтобы узнать, можете ли вы получить шаги теста для конкретного тестового примера. - person Andy Li-MSFT; 09.05.2018

Хорошо, я, наконец, понял это сам. Ответ и комментарии Энди помогли мне убедиться, что мой код правильный. Я только что обнаружил, что мой код работал нормально, когда НЕ отлаживался! При отладке в какой-то момент я заметил это:

Для оценки функции требуется запуск потоков

Поэтому, вероятно, из-за ленивой загрузки где-то невозможно проверить количество времени отладки вложений (см. Сообщение здесь: Lazy‹T›: Для оценки функции требуется, чтобы все потоки выполнялись).

person Fokko    schedule 09.05.2018