PublishTestResults@2 - テスト結果 v2 タスクの発行

テスト結果を Azure Pipelines に発行します。

テスト結果を Azure Pipelines/TFS に発行します。

構文

# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #failTaskOnFailureToPublishResults: false # boolean. Fail if there is failure in publishing test results. Default: false.
    #failTaskOnMissingResultsFile: false # boolean. Fail if no result files are found. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish Test Results to Azure Pipelines/TFS.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.

入力

testResultsFormat - テスト結果の形式
入力エイリアス: testRunnerstring. 必須です。 使用できる値: JUnit、、NUnitVSTestXUnitCTest。 既定値: JUnit

発行する結果ファイルの形式を指定します。 CTestJUnitNUnit 2、NUnit3、Visual Studio Test (TRX)、xUnit 2 の形式がサポートされています。


testResultsFormat - テスト結果の形式
入力エイリアス: testRunnerstring. 必須です。 使用できる値: JUnit、、NUnitVSTestXUnit。 既定値: JUnit

発行する結果ファイルの形式を指定します。 CTestJUnitNUnit 2、NUnit3、Visual Studio Test (TRX)、xUnit 2 の形式がサポートされています。


testResultsFiles - テスト結果ファイル
string. 必須です。 既定値: **/TEST-*.xml

1 つ以上のテスト結果ファイルを指定します。

  • 単一フォルダーのワイルドカード (*) と再帰的なワイルドカード (**) を使用できます。 たとえば、**/TEST-*.xml は、名前が TEST- で始まるすべての XML ファイルをすべてのサブディレクトリ内で探します。 VSTest をテスト結果形式として使用する場合は、ファイルの種類を .trx (たとえば **/TEST-*.trx) に変更する必要があります
  • 複数のパスを新しい行で区切って指定できます。
  • さらに 、ミニマッチ パターンを受け入れます。

たとえば、!TEST[1-3].xml は、名前が TEST1.xmlTEST2.xml、または TEST3.xml のファイルを除外します。


searchFolder - Search フォルダー
string. 既定値: $(System.DefaultWorkingDirectory)

省略可能。 テスト結果ファイルを検索するフォルダーを指定します。


mergeTestResults - テスト結果のマージ
boolean. 既定値: false

このブール値が の場合、タスクは true1 回のテスト実行に対してすべてのファイルの テスト結果を報告します。 値が の場合、タスクは falseテスト結果ファイルごとに個別のテスト実行を作成します。

注意

マージ テスト結果の設定を使用して、同じテスト フレームワークのファイルを結合して、結果のマッピングと期間が正しく計算されるようにします。


failTaskOnFailedTests - テストエラーがある場合は失敗する
boolean. 既定値: false

省略可能。 このブール値が の場合、 true結果ファイル内のいずれかのテストが失敗としてマークされている場合、タスクは失敗します。 既定値は です false。これにより、結果ファイルから結果が公開されます。


failTaskOnFailureToPublishResults - テスト結果の発行に失敗した場合に失敗する
boolean. 既定値: false

の場合 true、テスト結果の発行に失敗した場合、タスクは失敗します。


failTaskOnMissingResultsFile - 結果ファイルが見つからない場合は失敗する
boolean. 既定値: false

結果ファイルが見つからない場合は、タスクを失敗させます。


testRunTitle - テスト実行のタイトル
string.

省略可能。 結果を報告するテスト実行の名前を指定します。 ビルドまたはリリース パイプラインで宣言された変数名を使用できます。


buildPlatform - プラットフォームの構築
入力エイリアス: platformstring.

省略可能。 テストの実行を報告するビルド プラットフォームを指定します。 たとえば、x64x86 などです。 ビルド タスクでプラットフォームの変数を定義した場合は、ここで使用します。


buildConfiguration - ビルド構成
入力エイリアス: configurationstring.

省略可能。 テストの実行を報告するビルド構成を指定します。 たとえば、DebugRelease などです。 ビルド タスクで構成の変数を定義した場合は、ここで使用します。


publishRunAttachments - テスト結果ファイルをアップロードする
boolean. 既定値: true

省略可能。 このブール値が の場合、 trueタスクはすべてのテスト結果ファイルを添付ファイルとしてテスト実行にアップロードします。


タスク制御オプション

すべてのタスクには、タスク入力に加えて制御オプションがあります。 詳細については、「 コントロール オプションと一般的なタスク プロパティ」を参照してください。

出力変数

[なし] :

解説

このタスクは、テストの実行時にテスト結果を Azure Pipelines または TFS に発行し、包括的なテスト レポートおよび分析エクスペリエンスを提供します。 必要な結果形式をサポートする任意のテスト ランナーを使用できます。 サポートされている形式としては、CTestJUnit (PHPUnit を含む)、NUnit 2NUnit 3、Visual Studio テスト (TRX)、および xUnit 2 があります。

Visual Studio テスト タスクや Dot NetCore CLI タスクなどの他の組み込みタスクは、テスト結果をパイプラインに自動的に発行します。 AntMavenGulpGruntXcode などのタスクでは、発行結果がタスク内のオプションとして提供されるか、CoberturaJaCoCo などのライブラリをビルドします。 これらいずれかのタスクを使用している場合は、パイプライン内に個別のテスト結果の発行タスクは必要ありません。

発行されたテスト結果は、パイプラインの概要の [テスト] タブ に表示されます。 結果は、パイプラインの品質の測定、追跡可能性の確認、エラーのトラブルシューティング、障害の所有権の推進に役立ちます。

次の例は、テスト結果を発行するようにタスクが構成されていることを示しています。

テスト履歴ページを開く

ビルド パイプラインでこのタスクを使用すると、テストの実行時に生成されたコード カバレッジの結果を Azure Pipelines または TFS に発行して、カバレッジ レポートを取得することもできます。

前提条件

Windows セルフホステッド エージェントを使用している場合は、コンピューターに次の前提条件がインストールされている必要があります。

タスクの既定値

既定のオプションでは、JUnit 形式を使用してテスト結果を発行します。 VSTest を testRunner として使用するとき、testResultsFiles オプションを **/TEST-*.trx に変更する必要があります。

testResultsFormat は、testRunner 入力名の別名です。 結果ファイルは、特定のランナーだけでなく複数のランナーが生成できます。 たとえば、jUnit の結果形式は、jUnit だけでなく、多くのランナーでサポートされています。

YAML を使用して Python のためにテスト結果を発行するには、他の言語の例も含まれている「エコシステム」セクションのトピック内で「Python」を参照してください。

結果形式のマッピング

次の表は、ビルドまたはリリースの概要の [テスト] タブにレポートされるフィールドと、サポートされるテスト結果形式の属性に対応するマッピングを示します。

Scope フィールド Visual Studio テスト (TRX)
テスト実行 Title タスクで指定された [テストの実行のタイトル]
開始日 /TestRun/Times.Attributes["start"].Value
終了日 /TestRun/Times.Attributes["finish"].Value
Duration 終了日 - 開始日
[Attachments] 以下の「添付ファイルのサポート」セクションを参照してください
テスト結果 Title /TestRun/Results/UnitTestResult.Attributes["testName"].Value または /TestRun/Results/WebTestResult.Attributes["testName"].Value または /TestRun/Results/TestResultAggregation.Attributes["testName"].Value
開始日 /TestRun/Results/UnitTestResult.Attributes["startTime"].Value または /TestRun/Results/WebTestResult.Attributes["startTime"].Value または /TestRun/Results/TestResultAggregation.Attributes["startTime"].Value
終了日 /TestRun/Results/UnitTestResult.Attributes["startTime"].Value + /TestRun/Results/UnitTestResult.Attributes["duration"].Value または /TestRun/Results/WebTestResult.Attributes["startTime"].Value + /TestRun/Results/WebTestResult.Attributes["duration"].Value または /TestRun/Results/TestResultAggregation.Attributes["startTime"].Value + /TestRun/Results/TestResultAggregation.Attributes["duration"].Value
Duration /TestRun/Results/UnitTestResult.Attributes["duration"].Value または /TestRun/Results/WebTestResult.Attributes["duration"].Value または /TestRun/Results/TestResultAggregation.Attributes["duration"].Value
所有者 /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"].Value
結果 /TestRun/Results/UnitTestResult.Attributes["outcome"].Value または /TestRun/Results/WebTestResult.Attributes["outcome"].Value または /TestRun/Results/TestResultAggregation.Attributes["outcome"].Value
エラー メッセージ /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText または /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText または /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
スタック トレース /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText または /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText または /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
[Attachments] 以下の「添付ファイルのサポート」セクションを参照してください
コンソール ログ /TestRun/Results/UnitTestResult/Output/StdOut.InnerText または /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText または /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
コンソール エラー ログ /TestRun/Results/UnitTestResult/Output/StdErr.InnerText または /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText または /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
エージェント名 /TestRun/Results/UnitTestResult.Attributes["computerName"].Value または /TestRun/Results/WebTestResult.Attributes["computerName"].Value または /TestRun/Results/TestResultAggregation.Attributes["computerName"].Value
テスト ファイル /TestRun/TestDefinitions/UnitTest.Attributes["storage"].Value
優先順位 /TestRun/TestDefinitions/UnitTest.Attributes["priority"].Value

注意

[期間] が使用されるのは、[開始日][終了日] がある場合のみです。

testName の完全修飾名の形式は、Namespace.Testclass.Methodname (文字数 512 以内) です。 テストがデータ ドリブンであり、パラメーターがある場合、文字制限にはパラメーターが含まれます。

テスト結果の発行中に、次のエラーが表示されることがあります。テスト結果の発行に失敗しました:無効な優先度が指定されています

このエラーは、いずれかのテスト メソッドに 255 を超える優先度が設定されている場合に発生し、コード内のテスト メソッドの優先度を修正して、テストを再度実行します。 生成された trx ファイルを確認して、優先度が 255 を超えるすべてのテストを確認できます。

添付ファイルのサポート

テスト結果の発行タスクでは、テスト実行とテスト結果の両方について次の形式の添付ファイルがサポートされます。 パブリック プロジェクトでは、合計 2 GB までの添付ファイルがサポートされます。

Visual Studio テスト (TRX)

Scope Type パス
テスト実行 データ コレクター /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value
テスト結果 /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"].Value
コード カバレッジ /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"].Value および /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"].Value
テスト結果 データ コレクター /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value または /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value または /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value
テスト結果 /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"].Value または /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"].Value または /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"].Value

注意

テスト結果ファイルを添付ファイルとしてアップロードするオプションは、タスクの既定のオプションであり、すべての形式に適用されます。

Docker

Docker ベースのアプリの場合、アプリケーションをビルドしてテストを実行する方法は多数あります。

  • ビルド パイプラインでのビルドとテスト: ビルドとテストはパイプラインで実行され、テスト結果はテスト結果の 発行 タスクを使用して発行されます。
  • マルチステージ Dockerfile を使用したビルドとテスト: ビルドとテストは、複数ステージの Docker ファイルを使用してコンテナー内で実行されます。このようなテスト結果はパイプラインに発行されません。
  • Dockerfile を使用して結果をビルド、テスト、発行します。ビルドとテストはコンテナー内で実行され、結果はパイプラインに発行されます。 次の例を見てください。

Docker ファイルを使用したビルド、テストおよび結果の発行

このアプローチでは、Docker ファイルを使用して、コンテナー内コードをビルドしてテストを実行します。 その後、テスト結果がホストにコピーされて、パイプラインに発行されます。 テスト結果を Azure Pipelines に発行するには、テスト結果の発行タスクを使用できます。 最終的なイメージは Docker またはAzure Container Registryに発行されます。

コードを取得する
  1. 次を含使用して Dockerfile.build ファイルをプロジェクト ディレクトリのルートに作成します。

    # Build and run tests inside the docker container
    FROM mcr.microsoft.com/dotnet/sdk:2.1
    WORKDIR /app
    # copy the contents of agent working directory on host to workdir in container
    COPY . ./
    # dotnet commands to build, test, and publish
    RUN dotnet restore
    RUN dotnet build -c Release
    RUN dotnet test dotnetcore-tests/dotnetcore-tests.csproj -c Release --logger "trx;LogFileName=testresults.trx"
    RUN dotnet publish -c Release -o out
    ENTRYPOINT dotnet dotnetcore-sample/out/dotnetcore-sample.dll
    

    このファイルには、コードをビルドしてテストを実行する命令が含まれています。 その後、テストはコンテナー内のファイル testresults.trx にコピーされます。

  2. 最終的なイメージをできるだけ小さくして、ランタイムと配置の成果物のみを含むようにするには、既存の Dockerfile の内容を次のように置き換えます。

    # This Dockerfile creates the final image to be published to Docker or
    # Azure Container Registry
    # Create a container with the compiled asp.net core app
    FROM mcr.microsoft.com/dotnet/aspnet:2.1
    # Create app directory
    WORKDIR /app
    # Copy only the deployment artifacts
    COPY /out .
    ENTRYPOINT ["dotnet", "dotnetcore-sample.dll"]
    
ビルド パイプラインを定義する
  1. Docker Hub アカウントがあり、イメージを Docker レジストリにプッシュする場合は、.vsts-ci.docker.yml ファイルの内容を次のように置き換えます。

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId)/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd
        docker push $(dockerId)/dotnetcore-sample:$BUILD_BUILDID
      env:
        pswd: $(dockerPassword)
    

    または、Azure Container Registry を構成し、そのレジストリにイメージをプッシュする場合は、.vsts-ci.yml ファイルの内容を次のように置き換えます。

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd $(dockerid).azurecr.io
        docker push $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID 
      env:
        pswd: $(dockerPassword)
    
  2. リポジトリ内のメイン ブランチに変更をプッシュします。

  3. Azure Container Registry を使用する場合は、Azure portal でレジストリを事前に作成したことを確認します。 Azure portal のレジストリ設定の [アクセス キー] セクションに表示されている管理者ユーザー名とパスワードをコピーします。

  4. 次を使用してビルド パイプラインを更新します

    • エージェント プール: Hosted Ubuntu 1604
      • dockerId: DockerHub の Docker ID の値または Azure Container Registry の管理者ユーザー名を設定します。
      • dockerPassword: DockerHub のパスワードまたは Azure Container Registry の管理者パスワードの値を設定します。
    • YAML ファイル パス: /.vsts-ci.docker.yml
  5. 新しいビルドをキューに入れ、Docker イメージが作成されてレジストリにプッシュされ、テスト結果が Azure DevOps にプッシュされるのを確認します。

要件

要件 説明
パイプラインの種類 YAML、クラシック ビルド、クラシック リリース
上で実行 エージェント、DeploymentGroup
確認要求 なし
Capabilities このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 Any
設定可能な変数 Any
エージェントのバージョン 2.0.0 以上
タスクのカテゴリ テスト