3

自動テストケースの実行にはMTM(Microsoftテストマネージャー)を使用しています。

tcm /createコマンド(PowerShellスクリプトからトリガー)を使用してテストの実行をスケジュールし、テストの実行が完了したら、 trx(結果)ファイルをローカルマシンにコピーする必要があります。ですから、ある種のポーリングメカニズムでテスト実行が完了するまで待ちたいと思います。

したがって、testrunidを使用して現在のテスト実行ステータスをフェッチするコマンドが必要です。この方法でMTMテストの実行ステータスを取得する方法はありますか?

4

2 に答える 2

4

これは不可能だと思います。オプションで使用可能なスイッチは次のrunとおりです。

  • 消去
  • アボート
  • 書き出す
  • リスト
  • 作成
  • 公開

runs使用に関して取得できる唯一のデータ/list

  • Id
  • タイトル
  • オーナー
  • 完了日

これは、次のコマンドを実行することで確認できます。

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

また、runId完了ステータスを取得するオプションがあったとしても、まだ簡単ではないので、まだ持っていません。

だから、私はあなたが別の解決策を探し始めるべきだと思います。おそらく、TFSApiが必要なものです。これらのリンクを確認してください。

  1. tfsapiを使用した自動化テスト実行の作成
  2. TFS2010API-テスト実行の結果を取得する
于 2013-03-12T09:13:29.450 に答える
3

実際にテストIDを取得できます。PowerShellでtcm.exerun/ createコマンドを実行した結果として出力されるのは、次のようになります。

$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から、次のようにTFSAPIを使用することもできます。

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 に答える