失敗したテストのサンプル レポート
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
次の図のように、テスト タスクを含むパイプライン実行の失敗したテストを一覧表示するレポートを作成できます。 パイプラインにテストを追加する方法については、この記事で後述する タスク リソースのテスト セクションを参照してください。
この記事で提供されているクエリを使用して、次のレポートを生成します。
- ビルド ワークフローの失敗したテスト
- リリース ワークフローの失敗したテスト
- 特定のブランチの失敗したテスト
- 特定のテスト ファイルの失敗したテスト
- 特定のテスト所有者の失敗したテスト
重要
Power BI 統合 Analytics Service の OData フィードへのアクセスは 、Azure DevOps Services および Azure DevOps Server 2020 以降のバージョンで一般提供されています。 この記事で提供されるサンプル クエリは、Azure DevOps Server 2020 以降のバージョンに対してのみ有効であり、 v3.0-preview 以降のバージョンによって異なります。 これらのクエリを使用し、フィードバックをお寄せください。
前提条件
- Access:少なくとも Basic アクセス権を持つプロジェクトのメンバーである必要があります。
- Permissions: 既定では、プロジェクト メンバーには Analytics にクエリを実行してビューを作成する権限があります。
- サービスと機能の有効化と一般的なデータ追跡アクティビティに関するその他の前提条件の詳細については、「 Analytics にアクセスするためのアクセス許可と前提条件を参照してください。
Note
この記事では、 OData クエリを使用したサンプル レポートの概要 Power BI の基本的な理解があることを前提としています。
サンプル クエリ
TestResultsDaily
エンティティ セットの次のクエリを使用して、異なる似たパイプラインの失敗したテスト レポートを作成できます。 TestResultsDaily
エンティティ セットは、テストごとにグループ化された、TestResult
実行の毎日のスナップショット集計を提供します。
Note
フィルターまたはレポートの目的で使用可能なプロパティを決定するには、 テスト プラン分析のMetadata リファレンス および Azure Pipelines の Metadata リファレンスを参照してください。 クエリをフィルター処理したり、 で使用可能な または 値のProperty
下EntityType
NavigationPropertyBinding Path
の値のいずれかを使用してプロパティをEntitySet
返したりできます。 各 は EntitySet
に EntityType
対応します。 各値のデータ型の詳細については、対応する EntityType
に指定されたメタデータを確認してください。
ビルド ワークフローの失敗したテスト
次のクエリを使用して、 Build ワークフロー パイプラインの失敗したテストを表示します。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v4.0-preview/TestResultsDaily?
$apply=filter("
&"Pipeline/PipelineName eq '{pipelineName}' "
&"And Date/Date ge {startdate} "
&"And Workflow eq 'Build' "
&") "
&"/groupby( "
&"(TestSK, Test/TestName), "
&"aggregate( "
&"ResultCount with sum as TotalCount, "
&"ResultPassCount with sum as PassedCount, "
&"ResultFailCount with sum as FailedCount, "
&"ResultNotExecutedCount with sum as NotExecutedCount, "
&"ResultNotImpactedCount with sum as NotImpactedCount, "
&"ResultFlakyCount with sum as FlakyCount)) "
&"/filter(FailedCount gt 0) "
&"/compute( "
&"iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
リリース ワークフローの失敗したテスト
次のクエリを使用して、 Release ワークフロー パイプラインの失敗したテストを表示します。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v4.0-preview/TestResultsDaily?
$apply=filter("
&"Pipeline/PipelineName eq '{pipelineName}' "
&"And Date/Date ge {startdate}) "
&"/groupby((TestSK, Test/TestName, Workflow), "
&"aggregate( "
&"ResultCount with sum as TotalCount, "
&"ResultPassCount with sum as PassedCount, "
&"ResultFailCount with sum as FailedCount, "
&"ResultNotExecutedCount with sum as NotExecutedCount, "
&"ResultNotImpactedCount with sum as NotImpactedCount, "
&"ResultFlakyCount with sum as FlakyCount)) "
&"/filter(FailedCount gt 0) "
&"/compute( "
&"iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
分岐でフィルター処理された失敗したテスト
特定のブランチのパイプラインの失敗したテストを表示するには、次のクエリを使用します。 レポートを作成するには、この記事の後半で指定されているものと共に、次の追加手順を実行します。
Branch
をBranch.BranchName
- Power BI 視覚化スライサーを選択し、スライサーの Field に
Branch.BranchName
フィールドを追加します - 結果の概要を表示する必要があるスライサーからブランチ名を選択します。
スライサーの使用の詳細については、「power BI の Slicerを参照してください。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v4.0-preview/TestResultsDaily?
$apply=filter("
&"Pipeline/PipelineName eq '{pipelineName}' "
&"And Date/Date ge {startdate} "
&"And Workflow eq 'Build') "
&"/groupby((TestSK, Test/TestName, Branch/BranchName), "
&"aggregate( "
&"ResultCount with sum as TotalCount, "
&"ResultPassCount with sum as PassedCount, "
&"ResultFailCount with sum as FailedCount, "
&"ResultNotExecutedCount with sum as NotExecutedCount, "
&"ResultNotImpactedCount with sum as NotImpactedCount, "
&"ResultFlakyCount with sum as FlakyCount)) "
&"/filter(FailedCount gt 0) "
&"/compute( "
&"iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
テスト ファイルでフィルター処理された失敗したテスト
パイプラインと特定のテスト ファイルの失敗したテストを表示するには、次のクエリを使用します。 レポートを作成するには、この記事の後半で定義されているものと共に、次の追加手順を実行します。
Test
をTest.ContainerName
- Power BI 視覚化スライサーを選択し、スライサーの Field に
Test.ContainerName
フィールドを追加します - 結果の概要を表示する必要があるスライサーからコンテナー名を選択します。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v4.0-preview/TestResultsDaily?
$apply=filter("
&"Pipeline/PipelineName eq '{pipelineName}' "
&"And Date/Date ge {startdate}) "
&"/groupby((TestSK, Test/TestName, Test/ContainerName), "
&"aggregate( "
&"ResultCount with sum as TotalCount, "
&"ResultPassCount with sum as PassedCount, "
&"ResultFailCount with sum as FailedCount, "
&"ResultNotExecutedCount with sum as NotExecutedCount, "
&"ResultNotImpactedCount with sum as NotImpactedCount, "
&"ResultFlakyCount with sum as FlakyCount)) "
&"/filter(FailedCount gt 0) "
&"/compute( "
&"iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
テスト所有者によってフィルター処理された失敗したテスト
特定のテスト所有者が所有するテストのパイプラインの失敗したテストを表示するには、次のクエリを使用します。 レポートを作成するには、この記事の後半で定義されているものと共に、次の追加手順を実行します。
Test
をTest.TestOwner
- Power BI 視覚化スライサーを選択し、スライサーの Field に
Test.TestOwner
フィールドを追加します - 結果の概要を表示する必要があるスライサーからテスト所有者を選択します。
次の Power BI クエリをコピーして、 Get Data>Blank クエリ ウィンドウに直接貼り付けます。 詳細については、「 OData クエリを使用したサンプル レポートの概要を参照してください。
let
Source = OData.Feed ("https://analytics.dev.azure.com/{organization}/{project}/_odata/v4.0-preview/TestResultsDaily?
$apply=filter("
&"Pipeline/PipelineName eq '{pipelineName}' "
&"And Date/Date ge {startdate}) "
&"/groupby((TestSK, Test/TestName, Test/TestOwner), "
&"aggregate( "
&"ResultCount with sum as TotalCount, "
&"ResultPassCount with sum as PassedCount, "
&"ResultFailCount with sum as FailedCount, "
&"ResultNotExecutedCount with sum as NotExecutedCount, "
&"ResultNotImpactedCount with sum as NotImpactedCount, "
&"ResultFlakyCount with sum as FlakyCount)) "
&"/filter(FailedCount gt 0) "
&"/compute( "
&"iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
置換文字列とクエリの内訳
次の文字列を実際の値に置き換えます。 置換に角かっこを {} 含めないでください。 たとえば、組織名が "Fabrikam" の場合は、 ではなく {Fabrikam}
を にFabrikam
置き換えます{organization}
。
{organization}
- 組織名{project}
- チーム プロジェクト名{pipelinename}
- パイプライン名。 例:Fabrikam hourly build pipeline
{startdate}
- レポートを開始する日付。 形式: YYYY-MM-DDZ。 例:2021-09-01Z
は 2021 年 9 月 1 日を表します。 引用符または角かっこで囲んで、月と日付の両方に 2 桁の数字を使用しないでください。
クエリの内訳
次の表では、クエリの各部分について説明します。
クエリ パーツ
説明
$apply=filter(
句 filter()
開始します。
Pipeline/PipelineName eq '{pipelineName}'
指定したパイプラインのテスト実行を返します。
and CompletedOn/Date ge {startdate}
指定した日付以降にテストが実行されます。
and Workflow eq 'Build'
Build
ワークフロー パイプラインのテスト実行を返します。
)
句 filter()
閉じます。
/groupby(
句 groupby()
開始します。
(TestSK, Test/TestName),
テスト名でグループ化する
aggregate(
句 aggregate
開始して、フィルター条件に一致するテストの実行を合計します。
ResultCount with sum as TotalCount,
テスト実行の合計数を TotalCount
としてカウントします。
ResultPassCount with sum as PassedCount,
成功したテスト実行の合計数を PassedCount
としてカウントします。
ResultFailCount with sum as FailedCount,
失敗したテスト実行の合計数を FailedCount
としてカウントします。
ResultNotExecutedCount with sum as NotExecutedCount
実行されていないテスト実行の合計数を NotExecutedCount
としてカウントします。
ResultNotImpactedCount with sum as NotImpactedCount,
影響を受けなかったテスト実行の合計数を NotImpactedCount
としてカウントします。
ResultFlakyCount with sum as FlakyCount
不安定なテスト実行の合計数を FlakyCount
としてカウントします。
))
aggregate()
句とgroupby()
句を閉じます。
/compute(
句 compute()
開始します。
iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate
すべてのテストについて、 PassRate
を計算します。
)
句 compute()
閉じます。
(省略可能)クエリの名前を変更する
既定のクエリ ラベル Query1 の名前を、より意味のある名前に変更できます。 [ クエリ設定] ペインから新しい名前を入力するだけです。
Power BI の [テスト] 列を展開する
Test
列を展開して、展開されたエンティティのTest.TestName
を表示します。 列を展開すると、レコードが特定のフィールドにフラット化されます。 方法については、「 Transform Analytics データを使用して Power BI レポートを生成する、列を展開するを参照してください。
列のデータ型を変更する
Power Query エディターから、
TotalCount
、PassedCount
、FailedCount
、NotExecutedCount
、NotImpactedCount
、FlakyCount
の列を選択し、Transform メニューから Data Type を選択してから、[ホール番号 を選択します。PassRate
列を選択し、Transform メニューから Data Type を選択し、[ Decimal Number を選択します。
データ型の変更の詳細については、「 Transform Analytics データを使用して Power BI レポートを生成する」、列データ型の変換を参照してください。
クエリを閉じて変更を適用する
すべてのデータ変換が完了したら、Home メニューから Close & Apply を選択してクエリを保存し、Power BI の Report タブに戻ります。
テーブル レポートを作成する
Power BI の Visualizations で Table を選択し、フィールドを Columns 領域にドラッグ アンド ドロップします。
Columns セクションに次のフィールドを一覧表示されている順序で追加します。
Test.TestName
TotalCount
PassedCount
FailedCount
NotImpactedCount
NotExecutedCount
FlakyCount
PassRate
レポートは次の図のようになります。
タスク リソースのテスト
- Visual Studio テスト タスクを使用してテストを並列で実行する
- テスト ランナーに対して並列でテストを実行する
- テスト影響分析 (TIA) を使用してテストを高速化する
- 不安定なテストを管理する
- UI テストの考慮事項
- Azure Load Testing
- Azure Pipelines タスク リファレンス、テスト タスク