Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Terraform включает определение, предварительную версию и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.
Сквозное тестирование (E2E) используется для проверки работы программы перед развертыванием в рабочей среде. Примером сценария может быть модуль Terraform, развертывающий две виртуальные машины в виртуальной сети. Возможно, вы захотите предотвратить возможность выполнения команды ping между двумя машинами. В этом примере можно определить тест для проверки предполагаемого результата перед развертыванием.
Тестирование E2E обычно является трехэтапным процессом.
- Конфигурация применяется к тестовой среде.
- Код выполняется для проверки результатов.
- Тестовая среда повторно инициализирована или снята (например, удаление виртуальной машины).
В этой статье вы узнаете, как:
- Понимание основ сквозного тестирования с Terratest
- Узнайте, как создавать сквозные тесты с помощью Golang
- Узнайте, как использовать Azure DevOps для автоматического активации сквозных тестов при фиксации кода в репозитории.
1. Настройка среды
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись перед началом работы.
Настройте Terraform: если вы еще не сделали этого, настройте Terraform с помощью одного из следующих параметров:
Язык программирования Go: Установка Go.
Пример кода и ресурсов: С помощью средства DownGit скачайте из GitHub проект сквозного тестирования и распакуйте его в новый каталог, чтобы он содержал пример кода. Этот каталог называется примером каталога.
2. Общие сведения о сквозном тестировании
Сквозные тесты проверяют, работает ли система как коллективное целое. Этот тип тестирования отличается от тестирования определенных модулей. Для проектов Terraform сквозное тестирование позволяет проверять развернутые проекты. Этот тип тестирования отличается от многих других типов, которые тестируют сценарии предварительного развертывания. Комплексные тесты критически важны для тестирования сложных систем, которые включают несколько модулей и работают над несколькими ресурсами. В таких сценариях сквозное тестирование — единственный способ определить, правильно ли взаимодействуют различные модули.
В этой статье рассматривается использование Terratest для реализации сквозного тестирования. Terratest предоставляет все сантехники, необходимые для выполнения следующей задачи:
- Развертывание конфигурации Terraform
- Позволяет написать тест с помощью языка Go для проверки развернутых компонентов.
- Организовать тесты по этапам
- Разорвать развернутую инфраструктуру
3. Общие сведения о тестовом примере
В этой статье мы используем пример, доступный в репозитории Azure/terraform.
В этом примере определяется конфигурация Terraform, которая развертывает две виртуальные машины Linux в одной виртуальной сети. Одна виртуальная машина с именем vm-linux-1
— имеет общедоступный IP-адрес. Только порт 22 открыт для подключений по SSH. Вторая виртуальная машина — vm-linux-2
не имеет определенного общедоступного IP-адреса.
Тест проверяет следующие сценарии:
- Инфраструктура развертывается правильно
- С помощью порта 22 можно открыть сеанс SSH для
vm-linux-1
- С помощью сеанса SSH на
vm-linux-1
можно пинговатьvm-linux-2
Если вы скачали пример, в файле можно найти src/main.tf
конфигурацию Terraform для этого сценария. Файл main.tf
содержит все необходимое для развертывания инфраструктуры Azure, представленной на предыдущем рисунке.
Если вы не знакомы с тем, как создать виртуальную машину, см. статью "Создание виртуальной машины Linux с инфраструктурой в Azure с помощью Terraform".
Осторожность
Пример сценария, представленного в этой статье, предназначен только для иллюстрации. Мы специально сделали всё просто, чтобы сфокусироваться на шагах концевого теста. Не рекомендуется использовать рабочие виртуальные машины, предоставляющие порты SSH через общедоступный IP-адрес.
4. Изучите пример теста
Сквозный тест написан на языке Go и использует платформу Terratest. Если вы скачали пример, тест определяется в src/test/end2end_test.go
файле.
В следующем исходном коде показана стандартная структура теста Golang с помощью Terratest:
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
test_structure "github.com/gruntwork-io/terratest/modules/test-structure"
)
func TestEndToEndDeploymentScenario(t *testing.T) {
t.Parallel()
fixtureFolder := "../"
// Use Terratest to deploy the infrastructure
test_structure.RunTestStage(t, "setup", func() {
terraformOptions := &terraform.Options{
// Indicate the directory that contains the Terraform configuration to deploy
TerraformDir: fixtureFolder,
}
// Save options for later test stages
test_structure.SaveTerraformOptions(t, fixtureFolder, terraformOptions)
// Triggers the terraform init and terraform apply command
terraform.InitAndApply(t, terraformOptions)
})
test_structure.RunTestStage(t, "validate", func() {
// run validation checks here
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
publicIpAddress := terraform.Output(t, terraformOptions, "public_ip_address")
})
// When the test is completed, teardown the infrastructure by calling terraform destroy
test_structure.RunTestStage(t, "teardown", func() {
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
terraform.Destroy(t, terraformOptions)
})
}
Как видно в предыдущем фрагменте кода, тест состоит из трех этапов:
- настройка: Запускает Terraform для развертывания конфигурации
- validate': выполняет проверки и утверждения
- разборка: очистка инфраструктуры после выполнения теста
В следующем списке показаны некоторые ключевые функции, предоставляемые платформой Terratest:
-
terraform. InitAndApply: включает выполнение
terraform init
иterraform apply
из кода Go - terraform. Выходные данные: извлекает значение выходной переменной развертывания.
-
terraform.Destroy: выполнение
terraform destroy
команды в коде Go. - test_structure. LoadTerraformOptions: загружает параметры Terraform , такие как конфигурация и переменные , из состояния
- test_structure.SaveTerraformOptions: сохраняет параметры Terraform, такие как конфигурация и переменные, в состояние.
5. Запуск тестового примера
Следующие шаги выполняют тест для примера конфигурации и развертывания.
Откройте окно bash/терминала.
Войдите в учетную запись Azure.
Чтобы выполнить этот пример теста, вам потребуется имя
id_rsa
пары закрытых и открытых ключей SSH иid_rsa.pub
в домашнем каталоге. Замените<your_user_name>
именем домашнего каталога.export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
В каталоге примера перейдите к каталогу
src/test
.Запустите тест.
go test -v ./ -timeout 10m
6. Проверка результатов
После успешного выполнения go test
отображаются результаты, аналогичные следующим выходным данным:
--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok test 391.052s
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure