모든 테스트 실행기에 대해 병렬로 테스트 실행

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

코드 변경 내용의 유효성을 검사하는 테스트를 실행하는 것은 품질을 유지하는 데 중요합니다. 연속 통합 사례가 성공하려면 모든 빌드에서 실행되는 좋은 테스트 도구 모음이 있어야 합니다. 그러나 코드베이스가 증가함에 따라 회귀 테스트 도구 모음도 증가하는 경향이 있으며 전체 회귀 테스트를 실행하는 데 시간이 오래 걸릴 수 있습니다. 경우에 따라 테스트 자체가 오래 실행될 수 있습니다. 일반적으로 엔드 투 엔드 테스트를 작성하는 경우입니다. 이렇게 하면 파이프라인이 빌드를 충분히 빠르게 처리할 수 없으므로 고객 가치를 제공할 수 있는 속도가 줄어듭니다.

병렬로 테스트를 실행하는 것은 CI/CD 파이프라인의 효율성을 개선하는 좋은 방법입니다. 이 작업은 클라우드에서 제공하는 추가 용량을 사용하여 쉽게 수행할 수 있습니다. 이 문서에서는 여러 에이전트를 사용하여 작업을 처리하여 테스트를 병렬화하는 방법을 설명합니다.

필수 구성 요소

에이전트 및 작업의 개념을 숙지합니다. 각 에이전트는 한 번에 하나의 작업만 실행할 수 있습니다. 여러 작업을 병렬로 실행하려면 여러 에이전트를 구성해야 합니다. 또한 충분한 병렬 작업이 필요합니다.

병렬 작업 설정

YAML에서 '병렬' 전략을 지정하고 디스패치해야 하는 작업 수를 나타냅니다. 및 변수는 System.JobPositionInPhaseSystem.TotalJobsInPhase 각 작업에 추가됩니다.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

최대 99개의 에이전트를 지정하여 대규모 테스트 도구 모음에 대한 테스트를 스케일 업할 수 있습니다.

테스트 도구 모음 조각화

테스트를 병렬로 실행하려면 먼저 각 조각을 독립적으로 실행할 수 있도록 테스트 도구 모음을 조각화(또는 분할)해야 합니다. 예를 들어 단일 에이전트에서 1,000개의 대규모 테스트 제품군을 실행하는 대신 두 개의 에이전트를 사용하고 각 에이전트에서 병렬로 500개의 테스트를 실행할 수 있습니다. 또는 8개의 에이전트를 사용하고 각 에이전트에서 병렬로 125개의 테스트를 실행하여 테스트를 실행하는 데 걸리는 시간을 더 줄일 수 있습니다.

작업에서 테스트를 실행하는 단계에서는 실행해야 하는 테스트 조각을 알아야 합니다. 및 변수는 System.JobPositionInPhaseSystem.TotalJobsInPhase 다음 용도로 사용할 수 있습니다.

  • System.TotalJobsInPhase 는 총 조각 수를 나타냅니다(이를 "totalSlices"로 간주할 수 있습니다).
  • System.JobPositionInPhase 는 특정 조각을 식별합니다(이를 "sliceNum"으로 간주할 수 있습니다).

모든 테스트 파일을 단일 차원 배열로 나타내는 경우 각 작업은 모든 테스트 파일이 실행될 때까지 [sliceNum + totalSlices]에서 인덱싱된 테스트 파일을 실행할 수 있습니다. 예를 들어 6개의 테스트 파일과 2개의 병렬 작업이 있는 경우 첫 번째 작업(slice0)은 0, 2, 4로 번호가 매겨진 테스트 파일을 실행하고 두 번째 작업(slice1)은 1, 3 및 5로 번호가 매겨진 테스트 파일을 실행합니다.

2개 조각에서 6개의 테스트

대신 세 개의 병렬 작업을 사용하는 경우 첫 번째 작업(slice0)은 0과 3으로 번호가 매겨진 테스트 파일을 실행하고, 두 번째 작업(slice1)은 1과 4로 번호가 매겨진 테스트 파일을 실행하고, 세 번째 작업(slice2)은 2와 5로 번호가 매겨진 테스트 파일을 실행합니다.

3개 조각에서 6개의 테스트

예제 코드

이 .NET Core 샘플에서는 및 --filter 매개 변수를 dotnet test 사용하여 --list-tests 테스트를 조각화합니다. 테스트는 NUnit을 사용하여 실행됩니다. 그런 다음 테스트 태스크에서 DotNetCoreCLI@2 만든 테스트 결과가 서버에 게시됩니다. 이 리포지토리(Azure Repos 또는 Azure DevOps Server) 또는 포크(GitHub로)를 가져옵니다.

https://github.com/idubnori/ParallelTestingSample-dotnet-core

이 Python 샘플은 PowerShell 스크립트를 사용하여 테스트를 조각화합니다. 테스트는 pytest를 사용하여 실행됩니다. 그런 다음 pytest에서 만든 JUnit 스타일 테스트 결과가 서버에 게시됩니다. 이 리포지토리(Azure Repos 또는 Azure DevOps Server) 또는 포크(GitHub로)를 가져옵니다.

https://github.com/PBoraMSFT/ParallelTestingSample-Python

이 JavaScript 샘플은 bash 스크립트를 사용하여 테스트를 조각화합니다. 테스트는 모카 실행기를 사용하여 실행됩니다. 그런 다음 모카에서 만든 JUnit 스타일 테스트 결과가 서버에 게시됩니다. 이 리포지토리(Azure Repos 또는 Azure DevOps Server) 또는 포크(GitHub로)를 가져옵니다.

https://github.com/PBoraMSFT/ParallelTestingSample-Mocha

샘플 코드에는 파이프라인을 azure-pipelines.yml 만드는 데 사용할 수 있는 리포지토리의 루트에 파일이 포함되어 있습니다. 첫 번째 파이프라인 만들기의 모든 지침에 따라 파이프라인을 만들고 실행 중인 테스트 조각링을 확인합니다.

대규모 병렬 테스트를 위한 병렬 처리 결합

파이프라인에서 병렬 작업을 사용하는 경우 파이프라인은 여러 컴퓨터를 사용하여 각 작업을 병렬로 실행합니다. 대부분의 테스트 실행기는 단일 컴퓨터에서 병렬로 테스트를 실행하는 기능을 제공합니다(일반적으로 병렬로 실행되는 여러 프로세스 또는 스레드를 만들어). 대규모 병렬 테스트를 위해 두 가지 유형의 병렬 처리를 결합할 수 있으므로 파이프라인에서의 테스트가 매우 효율적입니다.

도움말 및 지원