失败的测试示例报告

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

对于包含测试任务的管道运行,可以创建一个报告,其中列出了失败的测试,如下图所示。 有关将测试添加到管道的信息,请参阅 本文后面的“测试任务资源 ”部分。

“失败的测试表”报表的屏幕截图。

使用本文中提供的查询生成以下报告:

  • 生成工作流的失败测试
  • 发布工作流的失败测试
  • 特定分支的测试失败
  • 特定测试文件的失败测试
  • 特定测试所有者的失败测试

重要

Power BI 集成 和对 分析服务的 OData 源 的访问权限通常用于 Azure DevOps Services 和 Azure DevOps Server 2020 及更高版本。 本文中提供的示例查询仅适用于 Azure DevOps Server 2020 及更高版本,具体取决于 v3.0-preview 或更高版本。 我们鼓励你使用这些查询并提供反馈。

先决条件

  • Access:至少是具有基本访问权限的项目的成员。
  • 权限: 默认情况下,项目成员有权查询 Analytics 和创建视图。
  • 有关服务和功能启用和常规数据跟踪活动的其他先决条件的详细信息,请参阅 访问 Analytics 的权限和先决条件。

注意

本文假设你阅读 了使用 OData 查询 的示例报表概述,并基本了解 Power BI。

示例查询

可以使用实体集的以下查询 TestResultsDaily 来创建不同的但类似的管道失败的测试报告。 实体 TestResultsDaily 集提供按测试分组的执行的 TestResult 每日快照聚合。

注意

若要确定用于筛选器或报表目的的可用属性,请参阅 Azure Pipelines 的测试计划分析和元数据参考的元数据参考。 可以使用 提供的 EntitySetNavigationPropertyBinding Path 值下EntityType的任何Property值筛选查询或返回属性。 每个对应 EntitySet 一个 EntityType。 有关每个值的数据类型的详细信息,请查看为相应 EntityType值提供的元数据。

生成工作流的失败测试

使用以下查询查看生成工作流管道的失败测试

将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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

发布工作流的失败测试

使用以下查询查看发布工作流管道的失败测试

将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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

按分支筛选的失败测试

若要查看特定分支管道的失败测试,请使用以下查询。 若要创建报表,请执行以下额外步骤以及本文后面的说明。

  • 展开 BranchBranch.BranchName
  • 选择 Power BI 可视化切片器,并将字段 Branch.BranchName 添加到切片器的 字段
  • 从切片器中选择需要查看结果摘要的分支名称。

有关使用切片器的详细信息,请参阅 Power BI 中的切片器。

将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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

测试文件筛选失败的测试

若要查看管道和特定测试文件的失败测试,请使用以下查询。 若要创建报表,请执行以下额外步骤以及本文稍后定义的内容。

  • 展开 TestTest.ContainerName
  • 选择 Power BI 可视化切片器,并将字段 Test.ContainerName 添加到切片器的 字段
  • 从需要查看结果摘要的切片器中选择容器名称。

将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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

测试所有者筛选的失败测试

若要查看特定测试所有者拥有的测试的管道的失败测试,请使用以下查询。 若要创建报表,请执行以下额外步骤以及本文稍后定义的内容。

  • 展开 TestTest.TestOwner
  • 选择 Power BI 可视化切片器,并将字段 Test.TestOwner 添加到切片器的 字段
  • 从切片器中选择需要查看结果摘要的测试所有者。

将以下 Power BI 查询直接复制并粘贴到 “获取数据>空白查询” 窗口中。 有关详细信息,请参阅 使用 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”,请将 替换为 {organization}Fabrikam,而不是 {Fabrikam}

  • {organization} - 组织名称
  • {project} - 团队项目名称
  • {pipelinename} - 管道名称。 示例: Fabrikam hourly build pipeline
  • {startdate} - 开始报表的日期。 格式:YYYY-MM-DDZ。 示例: 2021-09-01Z 表示 2021 年 9 月 1 日。 不要将引号或括号括起来,并且对月份和日期使用两个数字。

查询明细

下表描述了查询的每个部分。

查询部件

描述


$apply=filter(

Start filter() 子句。

Pipeline/PipelineName eq '{pipelineName}'

返回指定管道的测试运行。

and CompletedOn/Date ge {startdate}

返回在指定日期或之后运行的测试。

and Workflow eq 'Build'

返回工作流管道的测试运行 Build

)

Close filter() 子句。

/groupby(

Start groupby() 子句。

(TestSK, Test/TestName),

按测试名称分组

aggregate(

Start 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

))

Close aggregate()groupby() clauses。

/compute(

Start compute() 子句。

iif(TotalCount gt NotExecutedCount, ((PassedCount add NotImpactedCount) div cast(TotalCount sub NotExecutedCount, Edm.Decimal)) mul 100, 0) as PassRate

对于所有测试,计算 PassRate

)

Close compute() 子句。

(可选) 重命名查询

可以将默认查询标签 Query1 重命名为更有意义的标签。 只需在 “查询设置” 窗格中输入新名称。

Power BI 查询菜单选项的屏幕截图,重命名查询。

在 Power BI 中展开“测试”列

展开列 Test 以显示展开的实体 Test.TestName。 展开列会将记录平展到特定字段中。 若要了解如何操作,请参阅 转换分析数据以生成 Power BI 报表,展开列

更改列数据类型

  1. 在Power Query 编辑器中,选择“转换”菜单中的TotalCountFailedCountNotImpactedCountNotExecutedCountPassedCountFlakyCount数据类型”,然后选择“整数”。

  2. 选择PassRate列;“转换”菜单中选择“数据类型”,然后选择“十进制数字”。

有关更改数据类型的详细信息,请参阅 转换分析数据以生成 Power BI 报表,转换列数据类型

关闭查询并应用更改

完成所有数据转换后,从“开始”菜单中选择“关闭和应用”以保存查询并返回到 Power BI 中的“报表”选项卡。

Power Query 编辑器“关闭并应用”选项的屏幕截图。

创建表报表

  1. 在 Power BI 的“可视化效果”下,选择“”并将字段拖放到“列”区域。

    “失败的测试”表报表的可视化字段选择的屏幕截图。

  2. 按列出的顺序将以下字段添加到 “列” 部分。

    • Test.TestName
    • TotalCount
    • PassedCount
    • FailedCount
    • NotImpactedCount
    • NotExecutedCount
    • FlakyCount
    • PassRate

报表应如下图所示。

示例失败测试表报表的屏幕截图。

测试任务资源