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
- テスト結果の形式
入力エイリアス: testRunner
。 string
. 必須です。 使用できる値: JUnit
、、NUnit
、VSTest
、XUnit
CTest
。 既定値: JUnit
。
発行する結果ファイルの形式を指定します。 CTest、JUnit、NUnit 2、NUnit3、Visual Studio Test (TRX)、xUnit 2 の形式がサポートされています。
testResultsFormat
- テスト結果の形式
入力エイリアス: testRunner
。 string
. 必須です。 使用できる値: JUnit
、、NUnit
VSTest
、XUnit
。 既定値: JUnit
。
発行する結果ファイルの形式を指定します。 CTest、JUnit、NUnit 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.xml
、TEST2.xml
、または TEST3.xml
のファイルを除外します。
searchFolder
- Search フォルダー
string
. 既定値: $(System.DefaultWorkingDirectory)
。
省略可能。 テスト結果ファイルを検索するフォルダーを指定します。
mergeTestResults
- テスト結果のマージ
boolean
. 既定値: false
。
このブール値が の場合、タスクは true
1 回のテスト実行に対してすべてのファイルの テスト結果を報告します。 値が の場合、タスクは false
テスト結果ファイルごとに個別のテスト実行を作成します。
注意
マージ テスト結果の設定を使用して、同じテスト フレームワークのファイルを結合して、結果のマッピングと期間が正しく計算されるようにします。
failTaskOnFailedTests
- テストエラーがある場合は失敗する
boolean
. 既定値: false
。
省略可能。 このブール値が の場合、 true
結果ファイル内のいずれかのテストが失敗としてマークされている場合、タスクは失敗します。 既定値は です false
。これにより、結果ファイルから結果が公開されます。
failTaskOnFailureToPublishResults
- テスト結果の発行に失敗した場合に失敗する
boolean
. 既定値: false
。
の場合 true
、テスト結果の発行に失敗した場合、タスクは失敗します。
failTaskOnMissingResultsFile
- 結果ファイルが見つからない場合は失敗する
boolean
. 既定値: false
。
結果ファイルが見つからない場合は、タスクを失敗させます。
testRunTitle
- テスト実行のタイトル
string
.
省略可能。 結果を報告するテスト実行の名前を指定します。 ビルドまたはリリース パイプラインで宣言された変数名を使用できます。
buildPlatform
- プラットフォームの構築
入力エイリアス: platform
。 string
.
省略可能。 テストの実行を報告するビルド プラットフォームを指定します。 たとえば、x64
や x86
などです。 ビルド タスクでプラットフォームの変数を定義した場合は、ここで使用します。
buildConfiguration
- ビルド構成
入力エイリアス: configuration
。 string
.
省略可能。 テストの実行を報告するビルド構成を指定します。 たとえば、Debug
や Release
などです。 ビルド タスクで構成の変数を定義した場合は、ここで使用します。
publishRunAttachments
- テスト結果ファイルをアップロードする
boolean
. 既定値: true
。
省略可能。 このブール値が の場合、 true
タスクはすべてのテスト結果ファイルを添付ファイルとしてテスト実行にアップロードします。
タスク制御オプション
すべてのタスクには、タスク入力に加えて制御オプションがあります。 詳細については、「 コントロール オプションと一般的なタスク プロパティ」を参照してください。
出力変数
[なし] :
解説
このタスクは、テストの実行時にテスト結果を Azure Pipelines または TFS に発行し、包括的なテスト レポートおよび分析エクスペリエンスを提供します。 必要な結果形式をサポートする任意のテスト ランナーを使用できます。 サポートされている形式としては、CTest、JUnit (PHPUnit を含む)、NUnit 2、NUnit 3、Visual Studio テスト (TRX)、および xUnit 2 があります。
Visual Studio テスト タスクや Dot NetCore CLI タスクなどの他の組み込みタスクは、テスト結果をパイプラインに自動的に発行します。 Ant、Maven、Gulp、Grunt、Xcode などのタスクでは、発行結果がタスク内のオプションとして提供されるか、Cobertura や JaCoCo などのライブラリをビルドします。 これらいずれかのタスクを使用している場合は、パイプライン内に個別のテスト結果の発行タスクは必要ありません。
発行されたテスト結果は、パイプラインの概要の [テスト] タブ に表示されます。 結果は、パイプラインの品質の測定、追跡可能性の確認、エラーのトラブルシューティング、障害の所有権の推進に役立ちます。
次の例は、テスト結果を発行するようにタスクが構成されていることを示しています。
ビルド パイプラインでこのタスクを使用すると、テストの実行時に生成されたコード カバレッジの結果を Azure Pipelines または TFS に発行して、カバレッジ レポートを取得することもできます。
前提条件
Windows セルフホステッド エージェントを使用している場合は、コンピューターに次の前提条件がインストールされている必要があります。
- .NET Framework 4.6.2 以降のバージョン
タスクの既定値
既定のオプションでは、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に発行されます。
コードを取得する
次を含使用して
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
にコピーされます。最終的なイメージをできるだけ小さくして、ランタイムと配置の成果物のみを含むようにするには、既存の
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"]
ビルド パイプラインを定義する
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)
リポジトリ内のメイン ブランチに変更をプッシュします。
Azure Container Registry を使用する場合は、Azure portal でレジストリを事前に作成したことを確認します。 Azure portal のレジストリ設定の [アクセス キー] セクションに表示されている管理者ユーザー名とパスワードをコピーします。
次を使用してビルド パイプラインを更新します
- エージェント プール:
Hosted Ubuntu 1604
- dockerId: DockerHub の Docker ID の値または Azure Container Registry の管理者ユーザー名を設定します。
- dockerPassword: DockerHub のパスワードまたは Azure Container Registry の管理者パスワードの値を設定します。
- YAML ファイル パス:
/.vsts-ci.docker.yml
- エージェント プール:
新しいビルドをキューに入れ、Docker イメージが作成されてレジストリにプッシュされ、テスト結果が Azure DevOps にプッシュされるのを確認します。
要件
要件 | 説明 |
---|---|
パイプラインの種類 | YAML、クラシック ビルド、クラシック リリース |
上で実行 | エージェント、DeploymentGroup |
確認要求 | なし |
Capabilities | このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。 |
コマンドの制限 | Any |
設定可能な変数 | Any |
エージェントのバージョン | 2.0.0 以上 |
タスクのカテゴリ | テスト |