我使用 MTM(Microsoft 测试管理器)来运行我的自动化测试用例。
我使用tcm /create
命令(从 powershell 脚本触发)安排测试运行,一旦测试运行完成,我需要trx
在本地计算机上复制(结果)文件。所以我想等到测试运行在某种轮询机制中完成。
因此,我需要一个命令来使用 test runid 获取当前的测试运行状态。有没有办法以这种方式获取 MTM 测试运行状态?
我使用 MTM(Microsoft 测试管理器)来运行我的自动化测试用例。
我使用tcm /create
命令(从 powershell 脚本触发)安排测试运行,一旦测试运行完成,我需要trx
在本地计算机上复制(结果)文件。所以我想等到测试运行在某种轮询机制中完成。
因此,我需要一个命令来使用 test runid 获取当前的测试运行状态。有没有办法以这种方式获取 MTM 测试运行状态?
我不认为这是可能的。可供选择的开关run
有:
您可以runs
使用的唯一数据/list
是
你可以通过运行看到这一点:
tcm run /list /planid:<plainId> /collection:<CollectionUrl> /teamproject:<TeamProject>
此外,runId
即使有获得完成状态的选项,您还没有,在您的情况下,这并不容易。
所以,我认为你应该开始寻找另一种解决方案。也许TFS Api是您所需要的。检查这些链接:
您实际上可以获得测试 ID - 它是由于 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
}
}