Упражнение. Разработка и выполнение пользовательских тестов с помощью набора средств тестирования
Как участнику группы разработчиков продукта вам важно обеспечить выполнение ряда правил, относящихся к предметной области. Для этого можно реализовать правила в виде тестов. Затем эти тесты можно выполнять с помощью набора средств для тестирования.
Разработка и выполнение пользовательского теста
Вы создадите пользовательский тест и выполните его с помощью набора средств для тестирования. Затем вам будет необходимо исправить шаблон развертывания, чтобы тесты выполнялись успешно. Пользовательский тест будет проверять, все ли параметры соответствуют правилу именования. Это связанное с предметной областью требование к продукту, над которым работает ваша группа.
Для этого упражнения рекомендуется открыть два текстовых редактора.
- Разработка пользовательского теста. Найдите подкаталог arm-ttk\testcases\deploymentTemplate\ в каталоге, в котором установлен набор средств для тестирования. Далее запустите Visual Studio Code, создайте и измените пользовательский тест.
- Создайте файл шаблона и запустите тесты. Выберите нужное расположение для этого пути. Рекомендуется запустить экземпляр Visual Studio Code из этого пути, чтобы можно было легко изменить файл azuredeploy.json, когда это потребуется. С этим экземпляром Visual Studio Code также желательно запустить встроенный терминал, что упростит выполнение тестов.
Создание файла шаблона
Выберите каталог и создайте файл с именем azuredeploy.json.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Создание пользовательского теста
Откройте Visual Studio Code и перейдите в каталог установки набора средств для тестирования. Перейдите в подкаталог arm-ttk/testcases/deploymentTemplate. Выполните следующую команду:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог вручную.
Создайте пользовательский тестовый файл с именем Custom-ParameterNaming.test.ps1. Внесите в файл следующее содержимое:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Не закрывайте текстовый редактор. Этот файл вы измените позже.
Выполнение пользовательского теста
Запустите пользовательский тест, выполнив указанные ниже действия.
Откройте новое окно терминала или используйте старое.
Перейдите к каталогу, где был создан файл azuredeploy.json. Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте встроенный терминал, выбрав в верхнем меню пункты Терминал>Новый терминал. Выполните в терминале следующую команду, чтобы запустить оболочку PowerShell:
pwsh
Результат должен выглядеть примерно так:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
В окне терминала выполните команду
Import-Module
:Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: \Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
В терминале выполните команду
Test-AzTemplate
, чтобы произвести тестовый запуск:Test-AzTemplate -TemplatePath .
Выходные данные будут похожи на приведенные ниже. Обратите внимание, что в выделенных строках показан тест:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
Теперь, когда вы нашли тест, оставьте окно терминала открытым. Он понадобится вам позже.
Рефакторинг пользовательского теста
Теперь вы реализуете пользовательский тест надлежащим образом.
Вернитесь в текстовый редактор с файлом Custom-ParameterNaming.test.ps1.
Примечание.
Если вы случайно закрыли Visual Studio Code, перейдите в подкаталог arm-ttk\testcases\deploymentTemplate и откройте файл Custom-ParameterNaming.test.ps1.
Замените содержимое файла следующим кодом:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
Предыдущий код выполняет итерацию по всем параметрам. Он проверяет атрибут
name
и определяет, начинается ли имя с префиксаtailwind
. Если параметр не соответствует правилу именования, код вызывает командлетWrite-Error
с подходящим сообщением об ошибке.
Обновление файла шаблона
Теперь в файл шаблона будет добавлен параметр.
Выберите текстовый редактор с файлом azuredeploy.json и измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
В приведенном выше содержимом шаблона определяется параметр
location
, который не соответствует правилу именования, так как в его имени отсутствует префиксtailwind
.
Повторный запуск набора средств для тестирования
На данный момент у вас есть готовый пользовательский тест. Однако имя файла шаблона не соответствует требованиям. Поэтому вы ожидаете, что тестовый запуск завершится неудачно. Проверьте это, выполнив указанные ниже действия.
Используйте имеющееся окно встроенного терминала Visual Studio Code, в котором была запущена оболочка PowerShell и импортирован набор средств для тестирования.
В Visual Studio Code выполните команду Test-AzTemplate
из встроенного терминала:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Приведенная выше команда выполняется с параметром -Test
, который принимает имя теста в качестве входных данных. Вы указали Custom-ParameterNaming
в качестве параметра, что означает, что будет запущен только новый созданный тест.
Совет
При разработке собственных тестов рекомендуется использовать параметр -Test
, так как он ограничивает количество выполняемых тестов и объем выходных данных в терминале.
В результате выполнения этой команды получаем следующее:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Приведенный выше результат показывает, что тест работает. Давайте убедимся в этом, изменив файл развертывания.
Исправление файла шаблона
На данном этапе вам необходимо проверить правильность пользовательского теста, изменив файл шаблона так, чтобы он соответствовал правилам, установленным в пользовательском тесте.
В экземпляре Visual Studio Code с файлом azuredeploy.json измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
Параметр с именем был
location
переименован вtailwindLocation
. Теоретически теперь тест должен завершаться успешно. Давайте проверим.В том же экземпляре Visual Studio Code выполните команду
Test-AzTemplate
из встроенного терминала:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Теперь выходные данные выглядят следующим образом:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Готово! Вы реализовали и запустили пользовательский тест. Вы также исправили шаблон развертывания в соответствии с условием теста.
Разработка и выполнение пользовательского теста
Вы создадите пользовательский тест и выполните его с помощью набора средств для тестирования. Затем вам будет необходимо исправить шаблон развертывания, чтобы тесты выполнялись успешно. Пользовательский тест будет проверять, все ли параметры соответствуют правилу именования. Это связанное с предметной областью требование к продукту, над которым работает ваша группа.
Для этого упражнения рекомендуется открыть два текстовых редактора.
- Разработка пользовательского теста. Найдите подкаталог arm-ttk\testcases\deploymentTemplate\ в каталоге, в котором установлен набор средств для тестирования. Далее запустите Visual Studio Code, создайте и измените пользовательский тест.
- Создайте файл шаблона и запустите тесты. Выберите нужное расположение для этого пути. Рекомендуется запустить экземпляр Visual Studio Code из этого пути, чтобы можно было легко изменить файл azuredeploy.json, когда это потребуется. С этим экземпляром Visual Studio Code также желательно запустить встроенный терминал, что упростит выполнение тестов.
Создание файла шаблона
Выберите каталог и создайте файл с именем azuredeploy.json.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Создание пользовательского теста
Откройте окно терминала. Перейдите в каталог установки набора средств для тестирования. Перейдите в подкаталог arm-ttk/testcases/deploymentTemplate. Выполните следующую команду:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог вручную.
Создайте пользовательский файл с именем Custom-ParameterNaming.test.ps1. Внесите в файл следующее содержимое:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Не закрывайте текстовый редактор. Этот файл вы измените позже.
Выполнение пользовательского теста
Запустите пользовательский тест, выполнив указанные ниже действия.
Откройте новое окно терминала или используйте старое.
Перейдите к каталогу, где был создан файл azuredeploy.json. Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте встроенный терминал, выбрав в верхнем меню пункты Терминал>Новый терминал. Выполните в терминале следующую команду, чтобы запустить оболочку PowerShell:
pwsh
Результат должен выглядеть примерно так:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
В окне терминала выполните команду
Import-Module
:Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: \Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
В окне терминала выполните команду
Test-AzTemplate
:Test-AzTemplate -TemplatePath .
Выходные данные будут похожи на приведенные ниже. Обратите внимание, что в выделенных строках показан тест:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
Теперь, когда вы нашли тест, оставьте окно терминала открытым. Он понадобится вам позже.
Рефакторинг пользовательского теста
Теперь вы реализуете пользовательский тест надлежащим образом.
Вернитесь в текстовый редактор с файлом Custom-ParameterNaming.test.ps1.
Примечание.
Если вы случайно закрыли Visual Studio Code, перейдите в подкаталог arm-ttk\testcases\deploymentTemplate и откройте файл Custom-ParameterNaming.test.ps1.
Замените содержимое файла следующим кодом:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
Предыдущий код выполняет итерацию по всем параметрам. Он проверяет атрибут
name
и определяет, начинается ли имя с префиксаtailwind
. Если параметр не соответствует правилу именования, код вызывает командлетWrite-Error
с подходящим сообщением об ошибке.
Обновление файла шаблона
Теперь в файл шаблона будет добавлен параметр.
Выберите текстовый редактор с файлом azuredeploy.json и измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
В приведенном выше содержимом шаблона определяется параметр
location
, который не соответствует правилу именования, так как в его имени отсутствует префиксtailwind
.
Повторный запуск набора средств для тестирования
На данный момент у вас есть готовый пользовательский тест. Однако имя файла шаблона не соответствует требованиям. Поэтому вы ожидаете, что тестовый запуск завершится неудачно. Проверьте это, выполнив указанные ниже действия.
Примечание.
Используйте имеющееся окно встроенного терминала Visual Studio Code, в котором была запущена оболочка PowerShell и импортирован набор средств для тестирования.
В Visual Studio Code выполните команду Test-AzTemplate
из встроенного терминала:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Приведенная выше команда выполняется с параметром -Test
, который принимает имя теста в качестве входных данных. Вы указали Custom-ParameterNaming
в качестве параметра, что означает, что будет запущен только новый созданный тест.
Совет
При разработке собственных тестов рекомендуется использовать этот параметр, так как он ограничивает количество выполняемых тестов и объем выходных данных в терминале.
В результате выполнения этой команды получаем следующее:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Приведенный выше результат показывает, что тест работает. Давайте убедимся в этом, изменив файл развертывания.
Исправление файла шаблона
На данном этапе вам необходимо проверить правильность пользовательского теста, изменив файл шаблона так, чтобы он соответствовал правилам, установленным в пользовательском тесте.
В экземпляре Visual Studio Code с файлом azuredeploy.json измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
Параметр с именем был
location
переименован вtailwindLocation
. Теоретически теперь тест должен завершаться успешно. Давайте проверим.В том же экземпляре Visual Studio Code выполните команду
Test-AzTemplate
из встроенного терминала:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Теперь выходные данные выглядят следующим образом:
Validating custom\azuredeploy.json deploymentTemplate [+] Custom ParameterNaming (2 ms)
Готово! Вы реализовали и запустили пользовательский тест. Вы также исправили шаблон развертывания в соответствии с условием теста.
Разработка и выполнение пользовательского теста
Вы создадите пользовательский тест и выполните его с помощью набора средств для тестирования. Затем вам будет необходимо исправить шаблон развертывания, чтобы тесты выполнялись успешно. Пользовательский тест будет проверять, все ли параметры соответствуют правилу именования. Это связанное с предметной областью требование к продукту, над которым работает ваша группа.
Для этого упражнения рекомендуется открыть два текстовых редактора.
- Разработка пользовательского теста. Найдите подкаталог arm-ttk\testcases\deploymentTemplate\ в каталоге, в котором установлен набор средств для тестирования. Далее запустите Visual Studio Code, создайте и измените пользовательский тест.
- Создайте файл шаблона и запустите тесты. Выберите нужное расположение для этого пути. Рекомендуется запустить экземпляр Visual Studio Code из этого пути, чтобы можно было легко изменить файл azuredeploy.json, когда это потребуется. С этим экземпляром Visual Studio Code также желательно запустить встроенный терминал, что упростит выполнение тестов.
Создание файла шаблона
Выберите каталог и создайте файл с именем azuredeploy.json.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": []
}
Создание пользовательского теста
Откройте окно терминала.
Перейдите в каталог установки набора средств для тестирования.
Перейдите в подкаталог arm-ttk\testcases\deploymentTemplate.
Выполните следующую команду:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог вручную.
Создайте файл Custom-ParameterNaming.test.ps1 и добавьте в него следующее содержимое:
param( [Parameter(Mandatory=$false,Position=0)] #not mandatory for case of an empty resource array [PSObject] $MainTemplateResources ) Write-Error "To be implemented"
Не закрывайте текстовый редактор. Этот файл вы измените позже.
Выполнение пользовательского теста
Запустите пользовательский тест, выполнив указанные ниже действия.
Откройте новое окно терминала или используйте старое.
Перейдите к каталогу, где был создан файл azuredeploy.json.
Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте встроенный терминал. Откройте палитру команд, введите PowerShell и выберите Show integrated terminal (Показать встроенный терминал).
В терминале выполните следующую команду:
Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
В окне терминала выполните команду
Test-AzTemplate
:Test-AzTemplate -TemplatePath .
Выходные данные будут похожи на приведенные ниже. Обратите внимание, что в выделенных строках показан тест:
Validating custom\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (56 ms) Pass : 1 Fail : 0 Total : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (68 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (203 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (137 ms) artifacts parameter [+] artifacts parameter (145 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (171 ms) deploymentTemplate [-] Custom ParameterNaming (354 ms) To be implemented DependsOn Best Practices [+] DependsOn Best Practices (152 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (152 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (185 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (197 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (157 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (69 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (260 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (70 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (213 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (76 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (68 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (93 ms) Password params must be secure [+] Password params must be secure (111 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (68 ms) ResourceIds should not contain [+] ResourceIds should not contain (210 ms) Resources Should Have Location [+] Resources Should Have Location (113 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (147 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (242 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (129 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (201 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (180 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (132 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (91 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (114 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (130 ms) Pass : 31 Fail : 1 Total : 32
Теперь, когда вы нашли тест, оставьте окно терминала открытым. Он понадобится вам позже.
Рефакторинг пользовательского теста
Теперь вы реализуете пользовательский тест надлежащим образом.
Вернитесь в текстовый редактор с файлом Custom-ParameterNaming.test.ps1.
Примечание.
Если вы случайно закрыли Visual Studio Code, перейдите в подкаталог testcases\deploymentTemplate и откройте файл Custom-ParameterNaming.test.ps1.
Замените содержимое файла следующим кодом:
<# .Synopsis Ensures that all parameters adheres to a naming standard .Description All parameters should start with the company specific prefix 'tailwind' #> param( # The Template Object [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateObject, # The Template JSON Text [Parameter(Mandatory = $true, Position = 0)] [PSObject] $TemplateText ) foreach ($parameter in $TemplateObject.parameters.psobject.properties) { # If the parameter name starts with tailwind, then the parameter is correctly named if ($parameter.Name -notmatch 'tailwind*') { Write-Error "Parameter '$($parameter.Name)' must start with prefix 'tailwind'" -TargetObject $parameter } }
Предыдущий код выполняет итерацию по всем параметрам. Он проверяет атрибут
name
и определяет, начинается ли имя с префиксаtailwind
. Если параметр не соответствует правилу именования, код вызывает командлетWrite-Error
с подходящим сообщением об ошибке.
Обновление файла шаблона
Теперь в файл шаблона будет добавлен параметр.
Выберите текстовый редактор с файлом azuredeploy.json и измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
В приведенном выше содержимом шаблона определяется параметр
location
, который не соответствует правилу именования, так как в его имени отсутствует префиксtailwind
.
Повторный запуск набора средств для тестирования
На данный момент у вас есть готовый пользовательский тест. Однако имя файла шаблона не соответствует требованиям. Поэтому вы ожидаете, что тестовый запуск завершится неудачно. Проверьте это, выполнив указанные ниже действия.
Используйте имеющееся окно встроенного терминала Visual Studio Code, в котором была запущена оболочка PowerShell и импортирован набор средств для тестирования.
В Visual Studio Code выполните команду Test-AzTemplate
из встроенного терминала:
Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Приведенная выше команда выполняется с параметром -Test
, который принимает имя теста в качестве входных данных. Вы указали Custom-ParameterNaming
в качестве параметра, что означает, что будет запущен только новый созданный тест.
Совет
При разработке собственных тестов рекомендуется использовать этот параметр, так как он ограничивает количество выполняемых тестов и объем выходных данных в терминале.
В результате выполнения этой команды получаем следующее:
Validating custom\azuredeploy.json
deploymentTemplate
[-] Custom ParameterNaming (2ms)
Parameter 'location' must start with prefix 'tailwind'
Приведенный выше результат показывает, что тест работает. Давайте убедимся в этом, изменив файл развертывания.
Исправление файла шаблона
На данном этапе вам необходимо проверить правильность пользовательского теста, изменив файл шаблона так, чтобы он соответствовал правилам, установленным в пользовательском тесте.
В экземпляре Visual Studio Code с файлом azuredeploy.json измените содержимое файла на следующее:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "tailwindLocation": { "type": "string", "metadata": { "description": "a deployment location" } } }, "resources": [] }
Параметр с именем был
location
переименован вtailwindLocation
. Теоретически теперь тест должен завершаться успешно. Давайте проверим.В том же экземпляре Visual Studio Code выполните команду
Test-AzTemplate
из встроенного терминала:Test-AzTemplate -TemplatePath . -Test Custom-ParameterNaming
Теперь выходные данные выглядят следующим образом:
Validating custom\azuredeploy.json Custom ParameterNaming [+] Custom ParameterNaming (9 ms)
Готово! Вы реализовали и запустили пользовательский тест. Вы также исправили шаблон развертывания в соответствии с условием теста.