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

Я использую MTM (менеджер тестов Microsoft) для запуска своих автоматических тестовых случаев.

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

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

2 ответа

Решение

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

  • удалять
  • выкинуть
  • экспорт
  • список
  • Создайте
  • публиковать

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

  • Я бы
  • заглавие
  • владелец
  • Дата завершения

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

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

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

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

  1. Автоматизация создания тестового прогона с использованием TFS API
  2. TFS 2010 API - получить результаты тестового прогона

На самом деле вы можете получить идентификатор теста - это то, что распечатано в результате выполнения команды tcm.exe run /create в 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)

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

Или, в качестве альтернативы, из 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
    }
}
Другие вопросы по тегам