3

我使用 MTM(Microsoft 测试管理器)来运行我的自动化测试用例。

我使用tcm /create命令(从 powershell 脚本触发)安排测试运行,一旦测试运行完成,我需要trx在本地计算机上复制(结果)文件。所以我想等到测试运行在某种轮询机制中完成。

因此,我需要一个命令来使用 test runid 获取当前的测试运行状态。有没有办法以这种方式获取 MTM 测试运行状态?

4

2 回答 2

4

我不认为这是可能的。可供选择的开关run有:

  • 删除
  • 中止
  • 出口
  • 列表
  • 创造
  • 发布

您可以runs使用的唯一数据/list

  • ID
  • 标题
  • 所有者
  • 完成日期

你可以通过运行看到这一点:

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

此外,runId即使有获得完成状态的选项,您还没有,在您的情况下,这并不容易。

所以,我认为你应该开始寻找另一种解决方案。也许TFS Api是您所需要的。检查这些链接:

  1. 使用 tfs api 创建自动化测试运行
  2. TFS 2010 API - 获取测试运行的结果
于 2013-03-12T09:13:29.450 回答
3

您实际上可以获得测试 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
    }
}
于 2013-12-11T12:02:28.057 回答