PublishTestResults@2 - テスト結果 v2 タスクの発行
テスト結果を Azure Pipelines に発行します。
構文
# 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.
入力
testResultsFormat
-
テスト結果の形式
入力エイリアス: testRunner
。
string
. 必須。 使用できる値: JUnit
、NUnit
、VSTest
、XUnit
、CTest
。 既定値: JUnit
.
発行する結果ファイルの形式を指定します。 サポートされている形式は、CTest、JUnit、NUnit 2、NUnit 3、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
-
検索フォルダーの
string
. 既定値: $(System.DefaultWorkingDirectory)
.
任意 テスト結果ファイルを検索するフォルダーを指定します。
mergeTestResults
-
マージ テストの結果
boolean
. 既定値: false
.
このブール値が true
されると、タスクはすべてのファイルのテスト結果を 1 つの テスト実行に対して報告します。 値が false
場合、タスクはテスト結果ファイルごとに個別のテスト実行を作成します。 パフォーマンスを向上させるために最適化するために、このオプションが false
に設定されている場合でも、結果ファイルが 100 個を超える場合、結果は常に 1 回の実行にマージされます。
注
マージ テスト結果の設定を使用して、同じテスト フレームワークのファイルを結合して、結果のマッピングと期間が正しく計算されるようにします。
failTaskOnFailedTests
-
テストエラーが発生した場合は失敗
boolean
. 既定値: false
.
任意 このブール値が true
されている場合、結果ファイル内のいずれかのテストが失敗としてマークされている場合、タスクは失敗します。 既定値は false
であり、結果ファイルから結果を発行するだけです。
failTaskOnFailureToPublishResults
-
テスト結果の発行に失敗した場合に失敗
boolean
. 既定値: false
.
true
すると、テスト結果の発行に失敗した場合にタスクが失敗します。
failTaskOnMissingResultsFile
-
結果ファイルが見つからない場合は失敗
boolean
. 既定値: false
.
結果ファイルが見つからない場合は、タスクを失敗させます。
testRunTitle
-
テストの実行タイトル
string
.
任意 結果を報告するテスト実行の名前を指定します。 ビルドまたはリリース パイプラインで宣言された変数名を使用できます。
buildPlatform
-
Build Platform
入力エイリアス: 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 Test (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 を参照してください。これには、他の言語の例も含まれています。
結果形式のマッピング
次の表は、ビルドまたはリリースの概要で [テスト] タブで報告されるフィールドと、サポートされているテスト結果形式の属性を使用した対応するマッピングの一覧です。
範囲 | フィールド | Visual Studio テスト (TRX) |
---|---|---|
テストの実行 | タイトル | タスクで指定されたテスト実行タイトル |
開始日 | /TestRun/Times.Attributes[""]開始します。価値 | |
完了日 | /TestRun/Times.Attributes[""]終了します。価値 | |
期間 | 完了日 - 開始日 | |
添付ファイル | 以下の「添付ファイルのサポート」セクションを参照してください | |
テスト結果の | タイトル | /TestRun/Results/UnitTestResult.Attributes["testName"].value or /TestRun/Results/WebTestResult.Attributes["testName"].Value or /TestRun/Results/TestResultAggregation.Attributes["testName"].価値 |
開始日 | /TestRun/Results/UnitTestResult.Attributes["startTime"].value or /TestRun/Results/WebTestResult.Attributes["startTime"].Value or /TestRun/Results/TestResultAggregation.Attributes["startTime"].価値 | |
完了日 | /TestRun/Results/UnitTestResult.Attributes["startTime"].Value + /TestRun/Results/UnitTestResult.Attributes["期間"]。value または /TestRun/Results/WebTestResult.Attributes["startTime"]。Value + /TestRun/Results/WebTestResult.Attributes["期間"]。value or /TestRun/Results/TestResultAggregation.Attributes["startTime"].Value + /TestRun/Results/TestResultAggregation.Attributes["期間"] です。価値 | |
期間 | /TestRun/Results/UnitTestResult.Attributes["期間"] です。Value or /TestRun/Results/WebTestResult.Attributes["duration"].Value or /TestRun/Results/TestResultAggregation.Attributes["duration"].価値 | |
オーナー | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["名"].価値 | |
結果 | /TestRun/Results/UnitTestResult.Attributes["結果"] です。Value or /TestRun/Results/WebTestResult.Attributes["結果"].Value or /TestRun/Results/TestResultAggregation.Attributes["結果"].価値 | |
エラーメッセージ | /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText or /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText または /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText | |
スタック トレース | /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText or /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText または /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText | |
添付ファイル | 以下の「添付ファイルのサポート」セクションを参照してください | |
コンソール ログ | /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 or /TestRun/Results/WebTestResult.Attributes["computerName"].value or /TestRun/Results/TestResultAggregation.Attributes["computerName"].価値 | |
テスト ファイル | /TestRun/TestDefinitions/UnitTest.Attributes["storage"].価値 | |
優先順位 | /TestRun/TestDefinitions/UnitTest.Attributes["優先度"]。価値 |
注
期間 は、日付の開始 と 完了日 が使用できない場合にのみ使用されます。
testName の完全修飾名形式は、Namespace.Testclass.Methodname で、文字制限は 512 です。 テストがデータ ドリブンであり、パラメーターがある場合、文字制限にはパラメーターが含まれます。
テスト結果の発行中に、次のエラーが発生する可能性があります。テスト結果の発行に失敗しました:無効な優先度が指定
このエラーは、いずれかのテスト メソッドに 255 を超える優先度が設定されている場合に発生し、コード内のテスト メソッドの優先順位を修正して、テストを再度実行します。 生成された trx ファイルを確認して、優先度が 255 を超えるすべてのテストを確認できます。
添付ファイルのサポート
テスト結果の発行タスクでは、次の形式のテスト実行とテスト結果の両方の添付ファイルがサポートされます。 パブリック プロジェクトでは、2 GB の合計添付ファイルがサポートされます。
Visual Studio テスト (TRX)
範囲 | タイプ | 道 |
---|---|---|
テストの実行 | データ コレクター | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].価値 |
テスト結果 | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["パス"] です。価値 | |
コード カバレッジ | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"].Value and /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"].価値 | |
テスト結果の | データ コレクター | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value or /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value or /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].価値 |
テスト結果 | /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["パス"] です。Value or /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["パス"].Value または /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["パス"] です。価値 |
注
テスト結果ファイルを添付ファイルとしてアップロードするオプションは、タスクの既定のオプションであり、すべての形式に適用されます。
例示
ドッカー
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 にプッシュします。