사용자 지정 테스트를 작성하여 도메인 특정 규칙 구현

완료됨

지금까지 템플릿에서 일부 테스트를 실행하는 방법을 살펴보았습니다. 하지만 사용자가 자체적인 규칙을 갖춘 회사나 팀에서 작업할 수도 있습니다. 이러한 규칙은 테스트 환경을 사용자 지정하려고 한다는 뜻일 수 있습니다. 다음 시나리오를 사용할 수 있습니다.

  • 특정 테스트 도구 모음 실행. 테스트 도구 키트를 설치하면 실행될 테스트 세트가 제공됩니다. 이러한 테스트는 <설치 디렉터리>/arm-ttk/testcases/deploymentTemplate 디렉터리에 있습니다.

    이 테스트 실행 환경을 사용자 지정할 수 있습니다. 이전 단원에서 살펴본 것처럼 사용자 지정을 수행하는 한 가지 방법은 -Test 매개 변수를 사용하는 것입니다. 또한 디렉터리에서 파일을 제거하여 실행 중인 테스트를 편집할 수 있습니다. -Skip 매개 변수를 사용하여 특정 테스트를 건너뛸 수 있습니다.

  • 도메인 특정 테스트 작성 및 실행. 도메인 특정 규칙을 적용하기 위한 테스트 파일을 작성할 수 있습니다. 이 단원은 주로 이 시나리오에 중점을 둡니다.

자체 테스트 작성 및 실행

도메인 특정 테스트를 작성하기로 했습니다. 이러한 테스트를 작성하고 실행하는 흐름은 다음과 같습니다.

  1. 디렉터리 <설치 디렉터리>/arm-ttk/testcases/deploymentTemplate에 파일을 만듭니다.
  2. PowerShell에서 파일을 작성합니다.
  3. 파일을 실행하고 결과를 검사합니다.

사용자 지정 테스트 만들기

사용자 지정 테스트는 올바른 디렉터리(<설치 디렉터리>/arm-ttk/testcases/deploymentTemplate)에 배치해야 합니다. 또한 대시와 접미사 .test를 사용하고 .ps1로 끝나는 명명 표준을 따라야 합니다. 일반적인 테스트 파일은 다음과 같습니다.

Domain-Specific.test.ps1

작성

테스트 파일 이름을 작성하려면 PowerShell에서 작성해야 합니다. 테스트 파일의 세 부분은 다음과 같습니다.

  • 설명서. 이 부분은 선택 사항이지만 추가하는 것이 좋습니다. 파일 위쪽에 있으며 일반적으로 테스트의 정의, 테스트가 수행하는 작업 및 호출 방법을 설명하는 설명 세트가 포함되어 있습니다. 설명은 다음 예제와 같이 표시될 수 있습니다.

    <#
    .Synopsis
         Ensures that all IDs use the resourceID() function.
    .Description
         Ensures that all IDs use the resourceID() function, or resolve to parameters or variables that use the ResourceID() function.
    .Example
         Test-AzTemplate -TemplatePath .\100-marketplace-sample\ -Test IDs-Should-Be-Derived-From-ResourceIDs
    #>
    

    .Synopsis 섹션에서 이전 예제는 테스트가 수행하는 작업을 간단히 설명합니다. .Description 섹션에는 보다 자세한 설명이 있습니다. 마지막으로 .Example 섹션에서 테스트를 실행하는 다양한 방법을 볼 수 있습니다.

  • 입력 매개 변수. 테스트 파일에는 입력 매개 변수 세트가 포함될 수 있습니다. 이 섹션은 키워드 param 및 괄호로 정의됩니다. 일반적으로 다음과 같이 표시될 수 있습니다.

    param(
       [Parameter(Mandatory=$true)]
       [PSObject]$TemplateObject,
    
       [Parameter(Mandatory=$true)]
       [string]$TemplateFileName,
    
       [string]$SampleName = "$ENV:SAMPLE_NAME"
    )
    

    이전 예제는 세 가지 매개 변수 $TemplateObject, $TemplateFileName, $SampleName을 보여 줍니다. 처음 두 매개 변수는 Parameter[(Mandatory = $true)] 데코레이션에 표시된 것처럼 필수 항목입니다. 매개 변수의 이름은 그 의미에 따라 지정됩니다. $TemplateObject는 템플릿 파일의 개체 표현을 포함하고 TemplateFileName은 테스트 중인 파일의 이름을 포함합니다.

    매개 변수에 대한 자세한 내용은 ARM 템플릿 테스트 도구 키트 문서를 참조하세요.

  • 테스트 논리. 테스트의 마지막 부분은 테스트 논리입니다. 대부분의 테스트는 일반적으로 다음 단계를 수행해야 합니다.

    1. 템플릿을 반복합니다.
    2. 하나 이상의 조건을 확인합니다.
    3. 잘못된 것이 있으면 오류가 발생합니다.

코드 도우미

필요한 콘텐츠를 찾고 오류를 신고하는 데 도움이 되는 많은 도우미가 있습니다. 다음은 코드 도우미의 두 가지 예제입니다.

  • Find-JsonContent. 특정 값을 가진 특정 요소를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

    Find-JsonContent -Key apiVersion -Value * -Like
    

    위의 코드를 사용하여 이름이 apiVersion이고 값이 *인 JSON 특성을 찾을 수 있으며, 이는 실질적으로 이름이 apiVersion인 모든 특성을 의미합니다. 이는 다음과 같은 JSON 개체와 일치합니다.

    {
       "apiVersion": "2021-01-01"
    }
    
  • Write-Error. 템플릿에서 무엇인가 잘못되었음을 Test Runner에 알리는 데 도움이 되는 도우미입니다. 이 도우미를 사용하여 오류 메시지를 표시하고 필요한 변수를 사용하여 문자열 식을 보간합니다. 도우미 사용 방법의 예는 다음과 같습니다.

      Write-Error "Resource $($resource.Name) Location must be located in westeurope'" -TargetObject $resource
    

테스트 실행

이제 테스트가 작성되었습니다. 이 파일은 동일한 디렉터리에 있는 다른 모든 파일과 함께 실행됩니다.

이전 예제와 마찬가지로 -Test 매개 변수를 사용하면 특정 테스트 파일만 실행하도록 선택할 수 있습니다. 파일 확장명을 제외한 테스트 파일 이름을 매개 변수로 지정합니다. 그러면 Custom-Test.test.ps1Test-AzTemplate -TemplatePath /path/to/template -Test Custom-Test를 통해 자체적으로 실행됩니다.