ARM 템플릿 테스트 도구 키트 사용Use ARM template test toolkit

ARM (Azure Resource Manager) 템플릿 테스트 도구 키트 는 템플릿에서 권장 사례를 사용 하는지 여부를 확인 합니다.The Azure Resource Manager (ARM) template test toolkit checks whether your template uses recommended practices. 템플릿이 권장 사례를 준수 하지 않는 경우 제안 된 변경 내용과 함께 경고 목록을 반환 합니다.When your template isn't compliant with recommended practices, it returns a list of warnings with the suggested changes. 테스트 도구 키트를 사용 하 여 템플릿 개발에서 일반적인 문제를 방지 하는 방법을 배울 수 있습니다.By using the test toolkit, you can learn how to avoid common problems in template development.

테스트 도구 키트는 일련의 기본 테스트를 제공 합니다.The test toolkit provides a set of default tests. 이러한 테스트는 권장 사항 이지만 요구 사항은 아닙니다.These tests are recommendations but not requirements. 목표와 관련 된 테스트를 결정 하 고 실행 되는 테스트를 사용자 지정할 수 있습니다.You can decide which tests are relevant to your goals and customize which tests are run.

이 문서에서는 테스트 도구 키트를 실행 하는 방법 및 테스트를 추가 하거나 제거 하는 방법을 설명 합니다.This article describes how to run the test toolkit and how to add or remove tests. 기본 테스트에 대 한 설명은 toolkit 테스트 사례를 참조 하세요.For descriptions of the default tests, see toolkit test cases.

Toolkit은 PowerShell 또는 CLI의 명령에서 실행할 수 있는 PowerShell 스크립트 집합입니다.The toolkit is a set of PowerShell scripts that can be run from a command in PowerShell or CLI.

Windows에 설치Install on Windows

  1. PowerShell이 아직 없는 경우 Windows에 powershell을 설치합니다.If you don't already have PowerShell, install PowerShell on Windows.

  2. 테스트 도구 키트에 대 한 최신 .zip 파일을 다운로드 하 고 압축을 풉니다.Download the latest .zip file for the test toolkit and extract it.

  3. PowerShell을 시작합니다.Start PowerShell.

  4. 테스트 도구 키트를 추출한 폴더로 이동 합니다.Navigate to the folder where you extracted the test toolkit. 해당 폴더 내에서 arm-ttk 폴더로 이동 합니다.Within that folder, navigate to arm-ttk folder.

  5. 실행 정책이 인터넷에서 스크립트를 차단 하는 경우 스크립트 파일의 차단을 해제 해야 합니다.If your execution policy blocks scripts from the Internet, you need to unblock the script files. Arm-ttk 폴더에 있는지 확인 하세요.Make sure you're in the arm-ttk folder.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. 모듈을 가져옵니다.Import the module.

    Import-Module .\arm-ttk.psd1
    
  7. 테스트를 실행 하려면 다음 명령을 사용 합니다.To run the tests, use the following command:

    Test-AzTemplate -TemplatePath \path\to\template
    

Linux에 설치Install on Linux

  1. PowerShell이 아직 없는 경우 Linux에 powershell을 설치합니다.If you don't already have PowerShell, install PowerShell on Linux.

  2. 테스트 도구 키트에 대 한 최신 .zip 파일을 다운로드 하 고 압축을 풉니다.Download the latest .zip file for the test toolkit and extract it.

  3. PowerShell을 시작합니다.Start PowerShell.

    pwsh
    
  4. 테스트 도구 키트를 추출한 폴더로 이동 합니다.Navigate to the folder where you extracted the test toolkit. 해당 폴더 내에서 arm-ttk 폴더로 이동 합니다.Within that folder, navigate to arm-ttk folder.

  5. 실행 정책이 인터넷에서 스크립트를 차단 하는 경우 스크립트 파일의 차단을 해제 해야 합니다.If your execution policy blocks scripts from the Internet, you need to unblock the script files. Arm-ttk 폴더에 있는지 확인 하세요.Make sure you're in the arm-ttk folder.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. 모듈을 가져옵니다.Import the module.

    Import-Module ./arm-ttk.psd1
    
  7. 테스트를 실행 하려면 다음 명령을 사용 합니다.To run the tests, use the following command:

    Test-AzTemplate -TemplatePath /path/to/template
    

macOS에 설치Install on macOS

  1. PowerShell이 아직 없는 경우 macOS에 powershell을 설치합니다.If you don't already have PowerShell, install PowerShell on macOS.

  2. coreutils 설치:Install coreutils:

    brew install coreutils
    
  3. 테스트 도구 키트에 대 한 최신 .zip 파일을 다운로드 하 고 압축을 풉니다.Download the latest .zip file for the test toolkit and extract it.

  4. PowerShell을 시작합니다.Start PowerShell.

    pwsh
    
  5. 테스트 도구 키트를 추출한 폴더로 이동 합니다.Navigate to the folder where you extracted the test toolkit. 해당 폴더 내에서 arm-ttk 폴더로 이동 합니다.Within that folder, navigate to arm-ttk folder.

  6. 실행 정책이 인터넷에서 스크립트를 차단 하는 경우 스크립트 파일의 차단을 해제 해야 합니다.If your execution policy blocks scripts from the Internet, you need to unblock the script files. Arm-ttk 폴더에 있는지 확인 하세요.Make sure you're in the arm-ttk folder.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  7. 모듈을 가져옵니다.Import the module.

    Import-Module ./arm-ttk.psd1
    
  8. 테스트를 실행 하려면 다음 명령을 사용 합니다.To run the tests, use the following command:

    Test-AzTemplate -TemplatePath /path/to/template
    

결과 형식Result format

통과 하는 테스트는 녹색 및 앞에 [+] 로 표시 됩니다.Tests that pass are displayed in green and prefaced with [+].

실패 한 테스트는 빨강 으로 표시 되 고 [-] 로 표시 됩니다.Tests that fail are displayed in red and prefaced with [-].

테스트 결과 보기

텍스트 결과는 다음과 같습니다.The text results are:

[+] adminUsername Should Not Be A Literal (24 ms)
[+] apiVersions Should Be Recent (18 ms)
[+] artifacts parameter (16 ms)
[+] DeploymentTemplate Schema Is Correct (17 ms)
[+] IDs Should Be Derived From ResourceIDs (15 ms)
[-] Location Should Not Be Hardcoded (41 ms)
     azuredeploy.json must use the location parameter, not resourceGroup().location (except when used as a default value in the main template)

테스트 매개 변수Test parameters

-Templatepath 매개 변수를 제공 하는 경우 도구 키트는 해당 폴더에서 azuredeploy.json 또는 maintemplate.js된 템플릿을 찾습니다.When you provide the -TemplatePath parameter, the toolkit looks in that folder for a template named azuredeploy.json or maintemplate.json. 이 템플릿을 먼저 테스트 한 다음 폴더와 해당 하위 폴더에 있는 다른 모든 템플릿을 테스트 합니다.It tests this template first and then tests all other templates in the folder and its subfolders. 다른 템플릿은 연결 된 템플릿으로 테스트 됩니다.The other templates are tested as linked templates. 경로에 CreateUiDefinition.js의파일이 포함 된 경우 UI 정의와 관련 된 테스트를 실행 합니다.If your path includes a file named CreateUiDefinition.json, it runs tests that are relevant to UI definition.

Test-AzTemplate -TemplatePath $TemplateFolder

해당 폴더의 파일 하나를 테스트 하려면 -file 매개 변수를 추가 합니다.To test one file in that folder, add the -File parameter. 그러나 폴더에는 여전히 azuredeploy.json 또는 maintemplate.js라는 주 템플릿이 있어야 합니다.However, the folder must still have a main template named azuredeploy.json or maintemplate.json.

Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json

기본적으로 모든 테스트가 실행 됩니다.By default, all tests are run. 실행할 개별 테스트를 지정 하려면 -Test 매개 변수를 사용 합니다.To specify individual tests to run, use the -Test parameter. 테스트 이름을 제공 합니다.Provide the name of the test. 이름의 경우 Toolkit 테스트 사례를 참조 하세요.For the names, see Test cases for toolkit.

Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"

테스트 사용자 지정Customize tests

ARM 템플릿의 경우 도구 키트는 \arm-ttk\testcases\deploymentTemplate폴더의 모든 테스트를 실행 합니다.For ARM templates, the toolkit runs all of the tests in the folder \arm-ttk\testcases\deploymentTemplate. 테스트를 영구적으로 제거 하려면 폴더에서 해당 파일을 삭제 합니다.If you want to permanently remove a test, delete that file from the folder.

Createuidefinition 파일의 경우 \arm-ttk\testcases\CreateUiDefinition폴더의 모든 테스트를 실행 합니다.For CreateUiDefinition files, it runs all of the tests in the folder \arm-ttk\testcases\CreateUiDefinition.

사용자 고유의 테스트를 추가 하려면 Your-Custom-Test-Name.test.ps1명명 규칙을 사용 하 여 파일을 만듭니다.To add your own test, create a file with the naming convention: Your-Custom-Test-Name.test.ps1.

테스트는 개체 매개 변수 또는 문자열 매개 변수로 템플릿을 가져올 수 있습니다.The test can get the template as an object parameter or a string parameter. 일반적으로는 둘 중 하나를 사용 하지만 둘 다 사용할 수 있습니다.Typically, you use one or the other, but you can use both.

템플릿의 섹션을 가져오고 해당 속성을 반복 해야 하는 경우 개체 매개 변수를 사용 합니다.Use the object parameter when you need to get a section of the template and iterate through its properties. Object 매개 변수를 사용 하는 테스트는 다음과 같은 형식입니다.A test that uses the object parameter has the following format:

param(
    [Parameter(Mandatory=$true,Position=0)]
    [PSObject]
    $TemplateObject
)

# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message

템플릿 개체에는 다음과 같은 속성이 있습니다.The template object has the following properties:

  • $schema$schema
  • contentVersioncontentVersion
  • 매개 변수parameters
  • variablesvariables
  • 리소스resources
  • outputsoutputs

예를 들어를 사용 하 여 매개 변수 컬렉션을 가져올 수 있습니다 $TemplateObject.parameters .For example, you can get the collection of parameters with $TemplateObject.parameters.

전체 템플릿에서 문자열 작업을 수행 해야 하는 경우 문자열 매개 변수를 사용 합니다.Use the string parameter when you need to do a string operation on the whole template. String 매개 변수를 사용 하는 테스트는 다음과 같은 형식입니다.A test that uses the string parameter has the following format:

param(
    [Parameter(Mandatory)]
    [string]
    $TemplateText
)

# Implement test logic that performs string operations.
# Output error with: Write-Error -Message

예를 들어 문자열 매개 변수의 정규식을 실행 하 여 특정 구문이 사용 되는지 확인할 수 있습니다.For example, you can run a regular expression of the string parameter to see if a specific syntax is used.

테스트 구현에 대 한 자세한 내용을 보려면 해당 폴더의 다른 테스트를 살펴보세요.To learn more about implementing the test, look at the other tests in that folder.

Azure Pipelines와 통합Integrate with Azure Pipelines

Azure 파이프라인에 테스트 도구 키트를 추가할 수 있습니다.You can add the test toolkit to your Azure Pipeline. 파이프라인을 사용 하면 템플릿이 업데이트 될 때마다 테스트를 실행 하거나 배포 프로세스의 일부로 실행할 수 있습니다.With a pipeline, you can run the test every time the template is updated, or run it as part of your deployment process.

테스트 도구 키트를 파이프라인에 추가 하는 가장 쉬운 방법은 타사 확장을 사용 하는 것입니다.The easiest way to add the test toolkit to your pipeline is with third-party extensions. 다음 두 가지 확장을 사용할 수 있습니다.The following two extensions are available:

또는 사용자 고유의 작업을 구현할 수 있습니다.Or, you can implement your own tasks. 다음 예제에서는 테스트 도구 키트를 다운로드 하는 방법을 보여 줍니다.The following example shows how to download the test toolkit.

{
    "environment": {},
    "enabled": true,
    "continueOnError": false,
    "alwaysRun": false,
    "displayName": "Download TTK",
    "timeoutInMinutes": 0,
    "condition": "succeeded()",
    "task": {
        "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
        "versionSpec": "2.*",
        "definitionType": "task"
    },
    "inputs": {
        "targetType": "inline",
        "filePath": "",
        "arguments": "",
        "script": "New-Item '$(ttk.folder)' -ItemType Directory\nInvoke-WebRequest -uri '$(ttk.uri)' -OutFile \"$(ttk.folder)/$(ttk.asset.filename)\" -Verbose\nGet-ChildItem '$(ttk.folder)' -Recurse\n\nWrite-Host \"Expanding files...\"\nExpand-Archive -Path '$(ttk.folder)/*.zip' -DestinationPath '$(ttk.folder)' -Verbose\n\nWrite-Host \"Expanded files found:\"\nGet-ChildItem '$(ttk.folder)' -Recurse",
        "errorActionPreference": "stop",
        "failOnStderr": "false",
        "ignoreLASTEXITCODE": "false",
        "pwsh": "true",
        "workingDirectory": ""
    }
}

다음 예제에서는 테스트를 실행 하는 방법을 보여 줍니다.The next example shows how to run the tests.

{
    "environment": {},
    "enabled": true,
    "continueOnError": true,
    "alwaysRun": false,
    "displayName": "Run Best Practices Tests",
    "timeoutInMinutes": 0,
    "condition": "succeeded()",
    "task": {
        "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
        "versionSpec": "2.*",
        "definitionType": "task"
    },
    "inputs": {
        "targetType": "inline",
        "filePath": "",
        "arguments": "",
        "script": "Import-Module $(ttk.folder)/arm-ttk/arm-ttk.psd1 -Verbose\n$testOutput = @(Test-AzTemplate -TemplatePath \"$(sample.folder)\")\n$testOutput\n\nif ($testOutput | ? {$_.Errors }) {\n   exit 1 \n} else {\n    Write-Host \"##vso[task.setvariable variable=result.best.practice]$true\"\n    exit 0\n} \n",
        "errorActionPreference": "continue",
        "failOnStderr": "true",
        "ignoreLASTEXITCODE": "false",
        "pwsh": "true",
        "workingDirectory": ""
    }
}

다음 단계Next steps

기본 테스트에 대 한 자세한 내용은 Toolkit 테스트 사례를 참조 하세요.To learn about the default tests, see Test cases for toolkit.