2013-06-24 4 views
3

Я пытаюсь использовать TFS API для обновления результатов тестирования от автоматизации, выполняемой отдельно. Я пробовал предложения от других вопросов здесь (особенно How to create a test run and result using the Team Foundation Server API?), а также от поисков в другом месте. Независимо от того, что я пытаюсь у меня такая же проблема: каждый раз, когда я пытаюсь добавить контрольную точку в тестовом прогоне, я получаю ошибку -API TFS 2012: невозможно добавить тестовую точку для тестового запуска

Microsoft.TeamFoundation.TestManagement.Client.TestManagementInvalidOperationException: This test run cannot be created with the test points. 

Тестовые точки извлекаются из TFS с помощью WIQL, и я проверяю каждый тестовый пункт, чтобы убедиться, что он правильный для плана тестирования, набора тестов и конфигурации тестирования, прежде чем я попытаюсь его добавить.

Я не могу сохранить тестовый прогон без контрольных точек.

Пример кода (я пережил так много попыток, что мой код теперь за грязные)

public void UpdateTests(TestSuiteRun suiteRun) 
    { 


     this.Config = FindConfig(suiteRun.Description); 
     this.Suite = FindSuite(suiteRun.Name); 
     this.Plan = Suite.Plan; 
     this.Points = FindPoints(this.Suite.Id, this.Config.Id); 
     ITestCaseCollection testCases = Suite.AllTestCases; 
     this.Run = TeamProject.TestRuns.Create(); 
     ConfigureTestRun(); // failing here 

     this.Result = CreateRunResults(); 

     this.Iteration = CreateSingleIteration(suiteRun.Description); 
     { 
      UpdateResultsForScenario(scen); 
     } 


    } 

и метод для настройки тестового прогона:

private void ConfigureTestRun() 
    { 
     this.Run.DateStarted = DateTime.Now; 
     this.Run.DateCompleted = DateTime.Now; 
     // find the points that correspond to test cases in the run suite 
     foreach (ITestPoint point in this.Points) 
     { 
      if (point.TestCaseExists && point.Plan.Id == this.Plan.Id && point.ConfigurationId == this.Config.Id) 
      { 
       this.Run.AddTestPoint(point, this.CurrentUser); // fails with InvalidOperationException 
      } 
     } 

     this.Run.Save(); 
    } 

Я могу для подключения к TFS и получения всех необходимых данных, но добавление тестовых точек к новому тестовому прогону сводит меня с ума.

Что я сделал не так?

+0

Что «Сохранить» возврат, если это Bool, что результат? – DaveShaw

+0

@DaveShaw Я не добираюсь до «Save» - процедура запускается с ошибкой в ​​Run.AddTestPoint(). –

ответ

1

После безумного количества экспериментов и удара головой о стену, я нашел ответ.

Для тех, кому любопытно, вот как это работает:

  • Если я создаю тестовый прогон с помощью ITestManagementService.TestRuns.Create(); я могу добавить тестовые случаи, но не контрольных точек.

  • Если я создаю тестовый прогон с помощью ITestPlan.CreateTestRun(isAutomated); я могу добавить тестовые баллы, но не тестов.

Я усложненной вещи много пытается получить эту работу - я в настоящее время очищены много беспорядка и есть мое заявление правильно отчетности о результатах испытаний на TFS.

Я использую фальшивую сборку более или менее, как описано Jason Prickett's blog.

Одна вещь, которую я нашел, заключалась в том, что я не мог определить запуск как автоматический запуск, потому что у меня нет контрольных контрольных прогонов в моей среде и не удалось найти способ переместить состояние тестового запуска из WaitingForController в Completed.

Там больше очистки, чтобы идти, но ядро ​​работает следующим образом:

 this.Run = this.Plan.CreateTestRun(false); 
     ConfigureTestRun(build); 

     this.Result = CreateRunResults(); 

     this.Iteration = CreateSingleIteration(suiteRun.Description); 

// custom processing omitted for brevity 

     this.Result.Iterations.Add(this.Iteration); 
     // Attach the run log to the results 
     ITestAttachment item = this.Iteration.CreateAttachment(ConfigurationManager.AppSettings["LogFile"], SourceFileAction.None); 
     this.Result.State = TestResultState.Completed; 
     this.Result.Save(); 
     this.Run.Attachments.Add(item); 
     this.Run.Save(); 

и процедура настройки выполнения теста является:

private void ConfigureTestRun(IBuildDetail build) 
    { 
     this.Run.DateStarted = DateTime.Now; 
     this.Run.DateCompleted = DateTime.Now; 
     this.Run.BuildDirectory = build.DropLocation; 
     this.Run.BuildFlavor = "debug"; 
     this.Run.BuildNumber = build.BuildNumber; 
     this.Run.BuildPlatform = "test platform"; 
     this.Run.BuildUri = build.Uri; 
     this.Run.Controller = build.BuildController.Name; 


     // find the points that correspond to test cases in the run suite 
     foreach (ITestPoint point in this.Points) 
     { 
      if (point.TestCaseExists && point.Plan.Id == this.Plan.Id && point.ConfigurationId == this.Config.Id) 
      { 
       this.Run.AddTestPoint(point, this.CurrentUser); 
      } 
     } 

     this.Run.Save(); 
    }