다음을 통해 공유


Visual Studio 테스트 작업을 사용하여 병렬로 테스트 실행

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

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

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

필수 구성 요소

에이전트 및 작업의 개념을 숙지합니다. 여러 작업을 병렬로 실행하려면 여러 에이전트를 구성해야 합니다. 또한 충분한 병렬 작업도 필요합니다.

조각화 테스트

Visual Studio 테스트 작업(버전 2)은 병렬 작업 설정과 원활하게 작동하도록 설계되었습니다. Visual Studio 테스트 태스크를 포함하는 파이프라인 작업(단순성을 위해 "VSTest 작업"이라고 함)이 여러 에이전트에서 병렬로 실행되도록 구성된 경우 여러 에이전트가 관련되어 있음을 자동으로 감지하고 이러한 에이전트에서 병렬로 실행할 수 있는 테스트 조각을 만듭니다.

테스트 및 에이전트 수, 이전 테스트 실행 시간 또는 어셈블리의 테스트 위치에 따라 일괄 처리와 같은 다양한 요구 사항에 맞게 테스트 조각을 만들도록 태스크를 구성할 수 있습니다.

일괄 처리 옵션

이러한 옵션은 다음 섹션에서 설명합니다.

테스트 및 에이전트 수에 따라 간단한 조각화

이 설정은 간단한 조각화 알고리즘을 사용하여 각 에이전트가 T/N 테스트를 실행하도록 'N' 에이전트 간에 'T' 테스트 수를 나눕니다. 예를 들어 테스트 도구 모음에 1000개의 테스트가 포함되어 있고 병렬 작업에 두 개의 에이전트를 사용하는 경우 각 에이전트는 500개의 테스트를 실행합니다. 또는 8개의 에이전트를 사용하여 테스트를 실행하는 데 걸리는 시간을 더 줄일 수 있습니다. 이 경우 각 에이전트는 125개의 테스트를 병렬로 실행합니다.

이 옵션은 일반적으로 모든 테스트의 실행 시간이 비슷한 경우에 사용됩니다. 테스트 실행 시간이 유사하지 않은 경우 일부 에이전트는 여러 장기 실행 테스트가 있는 조각을 받을 수 있지만 다른 에이전트는 짧은 실행 테스트가 있는 조각을 수신하고 나머지 에이전트보다 훨씬 일찍 완료할 수 있기 때문에 에이전트를 효과적으로 활용하지 못할 수 있습니다.

테스트의 과거 실행 시간을 기반으로 조각화

이 설정은 각 조각의 실행 시간이 거의 같도록 지난 실행 시간을 고려하여 테스트 조각을 만듭니다. 짧은 실행 테스트는 함께 일괄 처리되고 장기 실행 테스트는 별도의 조각에 할당됩니다.

이 옵션은 어셈블리 내의 테스트에 종속성이 없으며 동일한 에이전트에서 실행할 필요가 없는 경우에 사용해야 합니다. 이 옵션은 모든 에이전트가 동일한 양의 '작업'을 받고 모두 거의 동시에 완료되기 때문에 에이전트를 가장 효율적으로 활용할 수 있습니다.

테스트 어셈블리 기반 조각화

이 설정은 'N' 에이전트 간에 테스트 어셈블리(또는 파일) 'A'의 수를 나누는 간단한 조각화 알고리즘을 사용하여 각 에이전트가 A/N 어셈블리에서 테스트를 실행합니다. 이 옵션을 사용하는 경우 어셈블리 내의 테스트 수는 고려되지 않습니다. 예를 들어 테스트 도구 모음에 10개의 테스트 어셈블리가 포함되어 있고 병렬 작업에 두 개의 에이전트를 사용하는 경우 각 에이전트는 실행할 5개의 테스트 어셈블리를 받게 됩니다. 5개의 에이전트를 사용하여 테스트를 실행하는 데 걸리는 시간을 더 줄일 수 있습니다. 이 경우 각 에이전트는 실행할 두 개의 테스트 어셈블리를 가져옵니다.

이 옵션은 어셈블리 내의 테스트에 종속성 또는 사용 AssemblyInitialize 률 및 AssemblyCleanupClassInitialize ClassCleanup 메서드가 있는 경우 테스트 코드의 상태를 관리하는 데 사용해야 합니다.

클래식 빌드 파이프라인에서 병렬로 테스트 실행

클래식 빌드 파이프라인에서 실행할 대규모 테스트 제품군 또는 장기 실행 통합 테스트가 있는 경우 다음 단계를 사용합니다.

참고 항목

온-프레미스 TFS 서버가 있는 빌드 파이프라인에서 다중 에이전트 기능을 사용하려면 TFS 2018 업데이트 2 이상 버전을 사용해야 합니다.

  1. 단일 에이전트를 사용하여 작업을 빌드합니다. 다음 이미지에 표시된 작업을 사용하여 Visual Studio 프로젝트를 빌드하고 빌드 아티팩트 게시 기본 작업 설정(단일 에이전트, 병렬 작업 없음)을 사용합니다.

    buildJobSingleAgent

  2. 여러 에이전트를 사용하여 병렬로 테스트를 실행합니다.

    • 에이전트 작업 추가

      AddAgentJobBuild

    • 여러 에이전트를 병렬로 사용하도록 작업을 구성합니다. 이 예제에서는 세 개의 에이전트를 사용합니다.

      ParallelTestJobBuild

      대규모 병렬 테스트의 경우 최대 99개의 에이전트를 지정할 수 있습니다.

    • 작업에 빌드 아티팩트 다운로드 작업을 추가합니다. 이 단계는 빌드 작업과 테스트 작업 간의 링크이며, 테스트 작업에서 테스트를 실행하는 데 사용하는 에이전트에서 빌드 작업에서 생성된 이진 파일을 사용할 수 있도록 하는 데 필요합니다. 작업이 '현재 빌드'에서 생성된 아티팩트 다운로드로 설정되고 아티팩트 이름이 빌드 작업의 빌드 아티팩트 게시 태스크에 사용된 아티팩트 이름과 동일한지 확인합니다 .

      DownloadBuildArtifacts

    • Visual Studio 테스트 작업을 추가하고 필요한 조각화 전략을 사용하도록 구성합니다.

YAML 파이프라인에서 병렬 테스트를 위한 작업 설정

전략을 parallel job 지정하고 디스패치해야 하는 작업 수를 나타냅니다. 최대 99개의 에이전트를 지정하여 대규모 테스트 도구 모음에 대한 테스트를 확장할 수 있습니다.

jobs:
- job: ParallelTesting
  strategy:
    parallel: 2

자세한 내용은 YAML 스키마 - 작업을 참조 하세요.

클래식 릴리스 파이프라인에서 병렬로 테스트 실행

애플리케이션을 배포한 후 실행할 대규모 테스트 도구 모음 또는 장기 실행 기능 테스트가 있는 경우 다음 단계를 사용합니다. 예를 들어 웹 애플리케이션을 배포하고 브라우저에서 Selenium 테스트를 실행하여 앱 기능의 유효성을 검사할 수 있습니다.

참고 항목

온-프레미스 TFS 서버가 있는 릴리스 파이프라인에서 다중 에이전트 기능을 사용하려면 TFS 2017 업데이트 1 이상 버전을 사용해야 합니다.

  1. 단일 에이전트를 사용하여 앱을 배포합니다. Azure 배포: 리소스 그룹 만들기 또는 업데이트 또는 Azure 앱 서비스 배포 작업을 사용하여 Azure 앱 서비스에 웹앱을 배포합니다. 기본 작업 설정(단일 에이전트, 병렬 작업 없음)을 사용합니다.

    DeployApp1Agent

  2. 여러 에이전트를 사용하여 병렬로 테스트를 실행합니다.

    • 에이전트 작업 추가

      AddAgentJobRM

    • 여러 에이전트를 병렬로 사용하도록 작업을 구성합니다. 이 예제에서는 세 개의 에이전트를 사용합니다.

      ParallelTestJobRM

      대규모 병렬 테스트의 경우 최대 99개의 에이전트를 지정할 수 있습니다.

    • Visual Studio 테스트 태스크를 실행하기 전에 실행해야 하는 추가 작업을 추가합니다. 예를 들어 PowerShell 스크립트를 실행하여 테스트에 필요한 모든 데이터를 설정합니다.

      릴리스 파이프라인의 작업은 기본적으로 릴리스 파이프라인에 연결된 모든 아티팩트가 다운로드됩니다. 시간을 절약하기 위해 작업에 필요한 테스트 아티팩트만 다운로드하도록 작업을 구성할 수 있습니다. 예를 들어 웹앱 이진 파일은 Selenium 테스트를 실행할 필요가 없으며 빌드 파이프라인에서 앱 및 테스트 아티팩트가 별도로 게시되는 경우 다운로드를 건너뛸 수 있습니다.

    • Visual Studio 테스트 작업을 추가하고 필요한 조각화 전략을 사용하도록 구성합니다.

      테스트 컴퓨터에 Visual Studio가 설치되어 있지 않은 경우 Visual Studio 테스트 플랫폼 설치 관리자 작업을 사용하여 필요한 버전의 테스트 플랫폼을 가져올 수 있습니다.

병렬 파이프라인 작업과 병렬 테스트 실행을 결합하여 대규모 병렬 테스트

파이프라인에서 병렬 작업을 사용하는 경우 여러 컴퓨터(에이전트)를 사용하여 각 작업을 병렬로 실행합니다. 또한 테스트 프레임워크와 실행기는 일반적으로 병렬로 실행되는 여러 프로세스 또는 스레드를 만들어 단일 컴퓨터에서 병렬로 테스트를 실행하는 기능을 제공합니다. 병렬 처리 기능을 계층화된 방식으로 결합하여 대규모 병렬 테스트를 수행할 수 있습니다. Visual Studio 테스트 태스크컨텍스트에서 병렬 처리는 다음과 같은 방법으로 결합될 수 있습니다.

  1. 테스트 프레임워크에서 제공하는 병렬 처리입니다. MSTest v2, NUnit, xUnit 등과 같은 모든 최신 테스트 프레임워크는 동시에 테스트를 실행하는 기능을 제공합니다. 일반적으로 어셈블리의 테스트는 병렬로 실행됩니다. 이러한 테스트 프레임워크는 해당 어댑터와 함께 테스트 어댑터 및 테스트 프레임워크를 사용하여 Visual Studio 테스트 플랫폼과 인터페이스하고, 테스트를 실행할 때 Visual Studio 테스트 플랫폼이 만드는 테스트 호스트 프로세스 내에서 작동합니다. 따라서 이 계층의 병렬 처리는 모든 프레임워크 및 어댑터에 대한 프로세스 내에 있습니다.

  2. Visual Studio 테스트 플랫폼(vstest.console.exe)에서 제공하는 병렬 처리입니다. Visual Studio 테스트 플랫폼은 테스트 어셈블리를 병렬로 실행할 수 있습니다. vstest.console.exe 사용자는 이를 /parallel 스위치인식합니다. 이렇게 하려면 사용 가능한 각 코어에서 테스트 호스트 프로세스를 시작하고 실행할 어셈블리에서 테스트를 전달합니다. 병렬화 단위는 테스트 어셈블리 또는 테스트 파일이므로 Visual Studio 테스트 플랫폼용 테스트 어댑터가 있는 모든 프레임워크에서 작동합니다. 이는 테스트 프레임워크에서 제공하는 병렬 처리와 결합된 경우(위에서 설명한) 파이프라인의 단일 에이전트에서 테스트를 실행할 때 최대 병렬 처리 수준을 제공합니다.

  3. VSTest(Visual Studio Test) 태스크에서 제공하는 병렬 처리입니다. VSTest 작업은 여러 에이전트(또는 컴퓨터)에서 병렬로 테스트를 실행할 수 있습니다. 테스트 조각이 만들어지고 각 에이전트는 한 번에 하나의 조각을 실행합니다. 테스트 플랫폼 및 테스트 프레임워크에서 제공하는 병렬 처리와 결합된 세 가지 조각화 전략은 다음과 같습니다.

    • 테스트 및 에이전트 수에 따라 조각화합니다. 테스트가 동일한 크기의 조각으로 그룹화되는 간단한 조각입니다. 조각에는 하나 이상의 어셈블리의 테스트가 포함됩니다. 에이전트에 대한 테스트 실행은 위의 12설명된 병렬 처리를 준수합니다.

    • 과거 실행 시간을 기준으로 조각화합니다. 테스트를 실행하기 위한 이전 타이밍 및 사용 가능한 에이전트 수에 따라 테스트는 각 조각에 거의 동일한 실행 시간이 필요하도록 조각으로 그룹화됩니다. 조각에는 하나 이상의 어셈블리의 테스트가 포함됩니다. 에이전트에 대한 테스트 실행은 위의 12설명된 병렬 처리를 준수합니다.

    • 어셈블리를 기반으로 조각화합니다. 조각은 테스트 어셈블리이므로 모두 동일한 어셈블리에 속하는 테스트를 포함합니다. 에이전트에 대한 실행은 위의 12설명된 병렬 처리를 준수합니다. 그러나 에이전트가 실행할 어셈블리를 하나만 받으면 2 가 발생하지 않을 수 있습니다.

도움말 및 지원