2013-03-12 2 views
3

Я использую MTM (диспетчер тестов Microsoft) для запуска моих автоматических тестовых примеров.MTM: Есть ли способ найти статус завершения тестового запуска с помощью утилиты командной строки tcm.exe

Я планирую тестовые прогоны с использованием команды tcm /create (trigerred из сценария powershell) и после завершения тестового прогона мне нужно скопировать файл trx (result) на моем локальном компьютере. Поэтому я хочу подождать, пока тестовый прогон завершится каким-то механизмом опроса.

Следовательно, мне нужна команда для получения текущего состояния тестового прогона с помощью тестового runid. Есть ли способ получить статус теста MTM таким образом?

ответ

4

Я не думаю, что это возможно. Доступные переключатели для run опции:

  • удалить
  • прервать
  • экспорт
  • список
  • создать
  • публиковать

только данные, которые вы можете принять около runs с помощью /list -

  • Id
  • Название
  • Владелец
  • Дата завершения

вы можете увидеть, запустив:

tcm run /list /planid:<plainId> /collection:<CollectionUrl> /teamproject:<TeamProject> 

Кроме того, вы не имеете runId еще так что даже если бы была возможность получить статус завершения, в ваш случай будет непростым.

Итак, я думаю, вы должны начать искать другое решение. Возможно, TFS Api - это то, что вам нужно. Проверьте эти ссылки:

  1. Automation test run creation using tfs api
  2. TFS 2010 API - Get Results of a Test Run
+1

Я согласен с @Schaliasos. Мне нужна была возможность подождать, пока тестовый прогон завершится несколько месяцев назад, и закончил внедрение инструмента командной строки с использованием упомянутого TFS Api. Он работает просто отлично, и у вас есть полный контроль над ним. – Elena

3

Вы действительно можете получить идентификатор теста - его то, что печатается в результате tcm.exe запуска команды/ создать в PowerShell это было бы примерно так:

$testRunSubmitResult = .$tcmPath run /create ...... 

$testID = $testRunSubmitResult -match "[0-9]{1,1000}" 

(i excluded the error handling logic which needs to be present in order to verify that the run was submitted) 

after that you can do the following thing - you can export the test run with the used id, and if the test didnt finish yet, you will get and error. 

do 

{ 

    Start-Sleep -s 60 

    $testResults = .$tcmPath run /export /id:$testID /resultsfile:$args /collection .... 

    if(Test-Path $args[0]) 

    { 

     break 

    } 

    if($testResults.GetType() -eq @("1").GetType()) 

    { 

     if($testResults[1].Contains("Completed export")) 

     { 

      break 

     } 

    } 

    if ($testResults.Contains("Completed export")) 

    { 

     break 
    } 
} 
while ($True) 

Это не идеальный вариант, поскольку он может потерпеть неудачу в тестовых пробегах wi й большие вложения (например, те, продуцируемых коллектору видео данных), но это может быть решением для некоторых из вас

Или же из PowerScript вы можете просто использовать TFS API, как это:

Add-Type -AssemblyName "Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", 

         "Microsoft.TeamFoundation.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", 

         "Microsoft.TeamFoundation.TestManagement.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 

$tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection("http://tfs:8080/tfs/Collection") 
$tfs.EnsureAuthenticated() 
$testManagementService = $tfs.GetService([Microsoft.TeamFoundation.TestManagement.Client.ITestManagementService]) 
$testManagementTeamProject = $testManagementService.GetTeamProject('Project'); 

do 
{ 
    Start-Sleep -s 60 
    $testRun = $testManagementTeamProject.TestRuns.Find($testId); 
    if($testRun.State -eq 'Completed') 
    { 
     break 
    } 
    if($testRun.State -eq 'NeedsInvestigation') 
    { 
     break 
    } 
    if($testRun.State -eq 'Aborted') 
    { 
     break 
    } 
} 
Смежные вопросы