Модульное тестирование с Terratest
Научитесь писать модульные тесты для модулей Terraform с помощью Terratest — библиотеки Go для тестирования кода инфраструктуры.
«Модульное тестирование с Terratest» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Terraform Infrastructure as Code, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Terraform Infrastructure as Code содержит 4 уроков всего.
Зачем тестировать инфраструктуру как код?
Инфраструктура как код (IaC) позволяет управлять инфраструктурой подобно программному обеспечению. Как и в программном обеспечении, в конфигурациях IaC могут быть ошибки!
- Надёжность: Обнаруживайте ошибки до развёртывания.
- Согласованность: Убеждайтесь, что ресурсы создаются ожидаемым образом.
- Уверенность: Вносите изменения, меньше опасаясь нарушить существующую инфраструктуру.
Тестирование кода Terraform крайне важно для создания надёжных и удобных в сопровождении облачных окружений.
Модульные и интеграционные тесты
При тестировании IaC обычно говорят о двух основных типах:
- Модульные тесты: Сосредоточены на небольших изолированных частях кода, например на одном модуле Terraform. Они проверяют корректную работу отдельных компонентов независимо друг от друга.
- Интеграционные тесты: Проверяют совместную работу нескольких компонентов или модулей как единой системы, часто развёртывая реальные ресурсы в облачном окружении.
На этом уроке мы сосредоточимся на модульном тестировании Ваших модулей Terraform.
Знакомство с Terratest
Terratest — это библиотека Go, разработанная HashiCorp (создателями Terraform) специально для тестирования кода инфраструктуры.
- Она помогает писать автоматизированные тесты для Terraform, Packer, Kubernetes и другого кода IaC.
- Terratest может развёртывать реальную инфраструктуру у Вашего облачного провайдера, выполнять проверки утверждений, а затем удалять её.
- Библиотека эффективна как для модульного, так и для интеграционного тестирования.
Предварительные требования Terratest
Чтобы начать работу с Terratest, Вам понадобится несколько вещей:
- Go: Terratest — это библиотека Go, поэтому Go должен быть установлен (рекомендуется версия 1.13 или выше).
- Terraform CLI: интерфейс командной строки Terraform должен быть установлен и доступен.
- Учетные данные облачного провайдера: если Вы развертываете реальные ресурсы (даже в модульных тестах, которые обращаются к облачному API), Вам потребуется аутентифицированный доступ к облачному провайдеру (например, настроенный AWS CLI).
Также Вам потребуется базовое знакомство с концепциями программирования на Go.
Структура файла тестов Go
Тесты Terratest пишутся на Go и следуют стандартным соглашениям тестирования Go:
- Имена файлов тестов заканчиваются на
_test.go(например,main_test.go). - Имена тестовых функций начинаются с
Test(например,TestMyModule(t *testing.T)). - В них используется встроенный пакет Go
testing.
Обычно эти файлы находятся рядом с модулем Terraform или в отдельном каталоге test.
Объяснение `terraform.Options`
Основа теста Terraform в Terratest — структура terraform.Options. Этот объект сообщает Terratest, как запускать Terraform.
Основные поля:
TerraformDir: путь к модулю Terraform.Vars: входные переменные модуля Terraform.EnvVars: переменные окружения, которые нужно задать для процесса Terraform.BackendConfig: конфигурация серверной части Terraform.
Это шаблон, определяющий выполнение команд Terraform в рамках теста.
Базовый рабочий процесс теста
Типичный модульный тест Terraform с использованием Terratest состоит из следующих шагов:
- Определите параметры: создайте структуру
terraform.Options, укажите в ней путь к модулю и задайте переменные. - Разверните: используйте
terraform.InitAndApply(t, options), чтобы инициализировать и применить конфигурацию. - Отложите удаление: сразу добавьте
defer terraform.Destroy(t, options), чтобы обеспечить очистку после выполнения теста. - Проверьте утверждения: используйте
testify/assertиз Go илиterraform.Outputиз Terratest, чтобы проверить свойства ресурсов или результаты.
Это обеспечивает чистую изолированную среду для теста.
Написание `terraform.Options`
Ниже приведена простая программа на Go, демонстрирующая настройку terraform.Options. Это основополагающий шаг для любого взаимодействия с Terratest.
package main
import (
"fmt"
"path/filepath"
"github.com/gruntwork-io/terratest/modules/terraform"
)
func main() {
// Define the path to your Terraform configuration directory.
// In a real test, this would point to your module under test.
terraformConfigDir := filepath.Join(".", "my-example-module")
// Create a terraform.Options object.
// This struct holds all the configuration for running Terraform via Terratest.
options := &terraform.Options{
TerraformDir: terraformConfigDir,
// You would add input variables here, e.g.:
// Vars: map[string]interface{}{"instance_type": "t2.micro"},
// And environment variables, e.g.:
// EnvVars: map[string]string{"AWS_REGION": "us-east-1"},
}
fmt.Println("--- Terratest Options Configuration Demo ---")
fmt.Printf("Configured Terraform Directory: %s\n", options.TerraformDir)
fmt.Println("This shows how to initialize Terratest options.")
fmt.Println("Actual Terratest unit tests are run using 'go test' command.")
}Проверка результатов
После применения конфигурации Terraform Вам потребуется проверить ее результаты. Terratest предоставляет функции для простого получения этих значений.
terraform.Output(t, options, "output_name"): получает один строковый результат.terraform.OutputMap(t, options, "output_name"): получает результат в виде карты.terraform.OutputList(t, options, "output_name"): получает результат в виде списка.
Затем с помощью проверок пакета тестирования Go (например, из github.com/stretchr/testify/assert) Вы проверяете соответствие результатов ожидаемым значениям.
Проверьте понимание
Terratest помогает тестировать код Terraform, взаимодействуя с реальными облачными ресурсами. Что из перечисленного НЕ является обычным шагом рабочего процесса модульного теста Terratest?
Итоги и следующие шаги
Вы изучили основы модульного тестирования Terraform с помощью Terratest!
- Terratest — это библиотека Go для тестирования инфраструктуры как кода.
- Она позволяет развертывать реальную облачную инфраструктуру, проверять ее и выполнять очистку.
- К основным компонентам относятся файлы
_test.go,func TestXxx(t *testing.T)и структураterraform.Options. - Рабочий процесс включает определение параметров, применение Terraform, выполнение проверок и обеспечение очистки с помощью
defer.
Далее изучите написание более сложных проверок и интеграцию Terratest в конвейеры CI/CD для автоматизированного тестирования.
Часто задаваемые вопросы
Урок «Модульное тестирование с Terratest» бесплатный?
Да — полный текст урока «Модульное тестирование с Terratest» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.
Чему я научусь в уроке «Модульное тестирование с Terratest»?
Научитесь писать модульные тесты для модулей Terraform с помощью Terratest — библиотеки Go для тестирования кода инфраструктуры. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?
Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Модульное тестирование с Terratest»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Terraform Infrastructure as Code?
Да. Каждый урок Terraform Infrastructure as Code включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- `validate` и `fmt` в Terraform
- Модульное тестирование с Terratest
- Интеграционное тестирование облачных ресурсов
- Политика как код и проверки соответствия требованиям