Модульное тестирование с Terratest
Научитесь писать модульные тесты для модулей Terraform с помощью Terratest — библиотеки Go для тестирования кода инфраструктуры.
«Модульное тестирование с Terratest» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Модульное тестирование с Terratest»?
Научитесь писать модульные тесты для модулей Terraform с помощью Terratest — библиотеки Go для тестирования кода инфраструктуры. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Модульное тестирование с Terratest»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- `validate` и `fmt` в Terraform
- Модульное тестирование с Terratest
- Интеграционное тестирование облачных ресурсов
- Политика как код и проверки соответствия требованиям