불안정한 테스트 샘플 보고서
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
다음 이미지와 같이 테스트 작업을 포함하는 파이프라인 실행에서 발생하는 벗겨진 테스트를 나열하는 보고서를 만들 수 있습니다. 가연성 테스트는 소스 코드 또는 실행 환경에 변경 내용이 없는 경우에도 통과 또는 실패와 같은 다양한 결과를 제공하는 테스트입니다. 벗겨진 테스트를 사용하도록 설정하는 방법에 대한 자세한 내용은 벗겨진 테스트 관리를 참조 하세요. 파이프라인에 테스트를 추가하는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 테스트 작업 리소스 섹션을 참조하세요.
이 문서에 제공된 쿼리를 사용하여 다음 보고서를 생성합니다.
- 빌드 워크플로에 대한 Flaky 테스트
- 릴리스 워크플로에 대한 Flaky 테스트
- 특정 브랜치에 대한 불안정한 테스트
- 특정 테스트 파일에 대한 Flaky 테스트
- 특정 테스트 소유자에 대한 불안정한 테스트입니다.
중요
Analytics Service의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 Azure DevOps Services 및 Azure DevOps Server 2020 이상 버전에서 사용할 수 있습니다. 이 문서에서 제공하는 샘플 쿼리는 Azure DevOps Server 2020 이상 버전에 대해서만 유효하며 v3.0 미리 보기 이상 버전에 따라 달라집니다. 이러한 쿼리를 사용하고 피드백을 제공하는 것이 좋습니다.
범주 | 요구 사항 |
---|---|
접근 수준 |
-
프로젝트 멤버. - 적어도 기본 접근 권한. |
사용 권한 | 기본적으로 프로젝트 멤버는 분석을 쿼리하고 뷰를 만들 수 있는 권한이 있습니다. 서비스 및 기능 사용 및 일반 데이터 추적 활동과 관련된 기타 필수 구성 요소에 대한 자세한 내용은 Analytics에 액세스하기 위한 사용 권한 및 필수 구성 요소를 참조 하세요. |
참고
이 문서에서는 OData 쿼리를 사용하여 샘플 보고서 개요를 읽고 Power BI에 대한 기본적인 이해를 가지고 있다고 가정합니다 .
샘플 쿼리
엔터티 집합의 TestResultsDaily
다음 쿼리를 사용하여 서로 다르지만 유사한 파이프라인의 불안정한 테스트 보고서를 만들 수 있습니다. 엔터티 집합은 TestResultsDaily
의 테스트별로 그룹화된 TestResult
실행의 일일 스냅샷 집계를 제공합니다.
참고
사용 가능한 속성을 확인하려면 필터 또는 보고서 용도로 테스트 계획 분석에 대한 메타데이터 참조 및 Azure Pipelines에 대한 메타데이터 참조를 참조하세요.
Property
값 또는 EntityType
값 중 하나를 사용하여 쿼리를 필터링하거나 NavigationPropertyBinding Path
속성을 EntitySet
과 함께 사용할 수 있습니다. 각각의 EntitySet
는 EntityType
에 해당합니다. 각 값의 데이터 형식에 대한 자세한 내용은 해당 EntityType
값에 대해 제공된 메타데이터를 검토하세요.
빌드 워크플로에 대한 Flaky 테스트
다음 쿼리를 사용하여 빌드 워크플로 파이프라인의 불안정한 테스트를 볼 수 있습니다.
다음 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(FlakyCount gt 0) "
&"/compute( "
&"(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlaykRate) "
,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(FlakyCount gt 0) "
&"/compute( "
&"(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlakyRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
신뢰할 수 없는 테스트 분기 필터링
특정 분기에 대한 파이프라인의 실패한 테스트를 보려면 다음 쿼리를 사용합니다. 보고서를 만들려면 이 문서의 뒷부분에 지정된 것과 함께 다음 추가 단계를 수행합니다.
-
Branch
을(를)Branch.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(FlakyCount gt 0) "
&"/compute( "
&"(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlakyRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
테스트 파일로 필터링된 불안정한 테스트
파이프라인과 특정 테스트 파일의 변동성 있는 테스트를 보려면 다음 쿼리를 사용합니다. 보고서를 만들려면 이 문서의 뒷부분에 정의된 내용과 함께 다음 추가 단계를 수행합니다.
-
Test
을Test.ContainerName
로 확장하십시오 - Power BI 시각화 슬라이서 선택 및 슬라이서 필드에 필드
Test.ContainerName
추가 - 결과 요약을 확인해야 하는 슬라이서에서 컨테이너 이름을 선택합니다.
다음 Power BI 쿼리를
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(FlakyCount gt 0) "
&"/compute( "
&"(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlakyRate) "
,null, [Implementation="2.0",OmitValues = ODataOmitValues.Nulls,ODataVersion = 4])
in
Source
테스트 소유자에 의해 필터링된 불안정한 테스트
특정 테스트 소유자가 소유한 파이프라인 및 테스트에 대한 Flaky 테스트를 보려면 다음 쿼리를 사용합니다. 보고서를 만들려면 이 문서의 뒷부분에 정의된 내용과 함께 다음 추가 단계를 수행합니다.
-
Test
를Test.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(FlakyCount gt 0) "
&"/compute( "
&"(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlakyRate) "
,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(
filter()
절을 시작하십시오.
Pipeline/PipelineName eq '{pipelineName}'
지정된 파이프라인에 대한 테스트 실행을 반환합니다.
and CompletedOn/Date ge {startdate}
반환 테스트는 지정된 날짜 또는 그 이후에 실행됩니다.
and Workflow eq 'Build'
Build
워크플로의 테스트 실행을 반환합니다.
)
filter()
절을 닫으세요.
/groupby(
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
계산합니다.
))
aggregate()
및 groupby()
절을 닫으십시오.
/filter(FlakyCount gt 0)
적어도 한 번 이상 불안정했던 테스트만 필터링합니다.
/compute(
Start compute()
절입니다.
(FlakyCount div cast(TotalCount, Edm.Decimal)) mul 100 as FlakyRate
모든 불안정한 테스트에 대해 FlakyRate
를 계산합니다.
)
닫기 compute()
절.
(선택 사항) 쿼리 이름 바꾸기
기본 쿼리 레이블인 Query1의 이름을 좀 더 의미 있는 것으로 바꿀 수 있습니다. 쿼리 설정 창에서 새 이름을 입력하기만 하면 됩니다.
Power BI에서 테스트 열 확장
Test
열을 확장하여 확장된 엔터티를 표시합니다Test.TestName
. 열을 확장하면 레코드가 특정 필드로 분해됩니다. 방법을 알아보려면 분석 데이터 변환을 참조 하여 Power BI 보고서를 생성하고 열을 확장합니다.
열 데이터 형식 변경
Power Query 편집기에서
TotalCount
,PassedCount
,FailedCount
,NotExecutedCount
,NotImpactedCount
, 및FlakyCount
열을 선택합니다. 그런 다음 변환 메뉴에서 데이터 형식을 선택한 후 정수를 선택합니다.FlakyRate
열을 선택하고 변환 메뉴에서 데이터 형식을 선택한 다음 10진수를 선택합니다.
데이터 형식 변경에 대한 자세한 내용은 Power BI 보고서를 생성하기 위한 분석 데이터 변환, 열 데이터 형식 변환을 참조 하세요.
쿼리를 닫고 변경 내용 적용
모든 데이터 변환을 완료한 후 홈 메뉴에서 닫기 및 적용 을 선택하여 쿼리를 저장하고 Power BI의 보고서 탭으로 돌아갑니다.
테이블 보고서 만들기
Power BI에서 시각화 아래에서 테이블을 선택하고 필드를 열 영역에 끌어서 놓습니다.
열 섹션에 나열된 순서대로 다음 필드를 추가합니다 .
Test.TestName
TotalCount
PassedCount
FailedCount
FlakyCount
FlakyRate
보고서는 다음 이미지와 비슷해야 합니다.
테스트 작업 리소스
- Visual Studio 테스트 작업을 사용하여 병렬로 테스트 실행
- 모든 테스트 실행기에서 병렬로 테스트 실행
- TIA(테스트 영향 분석)를 사용하여 테스트 속도 향상
- 불안정한 테스트 관리
- UI 테스트 고려 사항
- Azure Load Testing
- Azure Pipelines 작업 참조, 테스트 작업