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 - это то, что вам нужно. Проверьте эти ссылки:
На самом деле вы можете получить идентификатор теста - это то, что распечатано в результате выполнения команды 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
}
}