0Pricing
DevOps Bootcamp · Урок

Модульное тестирование с 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 состоит из следующих шагов:

  1. Определите параметры: создайте структуру terraform.Options, укажите в ней путь к модулю и задайте переменные.
  2. Разверните: используйте terraform.InitAndApply(t, options), чтобы инициализировать и применить конфигурацию.
  3. Отложите удаление: сразу добавьте defer terraform.Destroy(t, options), чтобы обеспечить очистку после выполнения теста.
  4. Проверьте утверждения: используйте 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 — локальная установка не требуется.

Все уроки этого курса

  1. `validate` и `fmt` в Terraform
  2. Модульное тестирование с Terratest
  3. Интеграционное тестирование облачных ресурсов
  4. Политика как код и проверки соответствия требованиям
← Назад к DevOps Bootcamp