0Pricing
Terraform Infrastructure as Code · Lekcja

Testy jednostkowe za pomocą Terratest

Dowiedz się, jak pisać testy jednostkowe modułów Terraform za pomocą Terratest — biblioteki Go do testowania kodu infrastruktury.

Testy jednostkowe za pomocą Terratest to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Terraform Infrastructure as Code, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Dlaczego testować IaC?

Infrastruktura jako kod (IaC) umożliwia zarządzanie infrastrukturą podobnie jak oprogramowaniem. Tak jak oprogramowanie, konfiguracje IaC mogą zawierać błędy!

  • Niezawodność: Wykrywanie błędów przed wdrożeniem.
  • Spójność: Zapewnienie, że zasoby są udostępniane zgodnie z oczekiwaniami.
  • Pewność: Wprowadzanie zmian bez obawy o uszkodzenie istniejącej infrastruktury.

Testowanie kodu Terraform ma kluczowe znaczenie dla tworzenia solidnych i łatwych w utrzymaniu środowisk chmurowych.

Testy jednostkowe a integracyjne

Podczas testowania IaC często wyróżniamy dwa główne typy:

  • Testy jednostkowe: Koncentrują się na małych, odizolowanych częściach kodu, takich jak pojedynczy moduł Terraform. Sprawdzają, czy poszczególne komponenty działają poprawnie w izolacji.
  • Testy integracyjne: Weryfikują, czy wiele komponentów lub modułów współdziała jako system, często wdrażając rzeczywiste zasoby w środowisku chmurowym.

W tej lekcji skupimy się na testowaniu jednostkowym modułów Terraform.

Wprowadzenie do Terratest

Terratest to biblioteka Go opracowana przez HashiCorp (twórców Terraform), przeznaczona specjalnie do testowania kodu infrastruktury.

  • Pomaga pisać automatyczne testy dla kodu Terraform, Packer, Kubernetes i innego kodu IaC.
  • Terratest może wdrażać rzeczywistą infrastrukturę u dostawcy chmury, wykonywać na niej asercje, a następnie ją usuwać.
  • Jest przydatny zarówno w testach jednostkowych, jak i integracyjnych.

Wymagania wstępne Terratest

Aby rozpocząć pracę z Terratest, potrzebują Państwo kilku rzeczy:

  • Go: Terratest to biblioteka Go, dlatego Go musi być zainstalowane (zalecana jest wersja 1.13 lub nowsza).
  • Terraform CLI: Interfejs wiersza poleceń Terraform musi być zainstalowany i dostępny.
  • Dane uwierzytelniające dostawcy chmury: Jeśli wdrażają Państwo rzeczywiste zasoby (nawet w ramach testów jednostkowych korzystających z API chmury), potrzebny będzie uwierzytelniony dostęp do dostawcy chmury (np. skonfigurowany AWS CLI).

Potrzebna będzie również podstawowa znajomość koncepcji programowania w Go.

Struktura pliku testowego Go

Testy Terratest są pisane w Go i stosują standardowe konwencje testowania w Go:

  • Pliki testowe kończą się ciągiem _test.go (np. main_test.go).
  • Funkcje testowe zaczynają się od Test (np. TestMyModule(t *testing.T)).
  • Korzystają z wbudowanego pakietu Go testing.

Pliki te zwykle znajdują się obok modułu Terraform lub w osobnym katalogu test.

Wyjaśnienie `terraform.Options`

Podstawą testu Terraform w Terratest jest struktura terraform.Options. Ten obiekt informuje Terratest, jak uruchamiać Terraform.

Najważniejsze pola to:

  • TerraformDir: Ścieżka do modułu Terraform.
  • Vars: Zmienne wejściowe modułu Terraform.
  • EnvVars: Zmienne środowiskowe ustawiane dla procesu Terraform.
  • BackendConfig: Konfiguracja backendu Terraform.

To plan wykonywania poleceń Terraform w ramach testu.

Podstawowy przebieg testu

Typowy test jednostkowy Terraform w Terratest przebiega w następujących krokach:

  1. Zdefiniowanie opcji: Należy utworzyć strukturę terraform.Options wskazującą moduł i ustawiającą zmienne.
  2. Wdrożenie: Należy użyć terraform.InitAndApply(t, options), aby zainicjować i zastosować konfigurację.
  3. Odroczone usunięcie: Należy od razu dodać defer terraform.Destroy(t, options), aby zapewnić sprzątanie po zakończeniu testu.
  4. Asercja: Należy użyć asercji Go testify/assert lub funkcji Terratest terraform.Output, aby sprawdzić właściwości zasobów albo wartości wyjściowe.

Zapewnia to czyste i odizolowane środowisko testowe.

Pisanie kodu z użyciem `terraform.Options`

Oto prosty program w Go pokazujący, jak skonfigurować terraform.Options. To podstawowy krok w każdej interakcji z 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.")
}

Sprawdzanie wartości wyjściowych

Po zastosowaniu konfiguracji Terraform warto zweryfikować jej wartości wyjściowe. Terratest udostępnia funkcje umożliwiające łatwe pobieranie tych wartości.

  • terraform.Output(t, options, "output_name"): Pobiera pojedynczą wartość wyjściową typu string.
  • terraform.OutputMap(t, options, "output_name"): Pobiera wartość wyjściową w postaci mapy.
  • terraform.OutputList(t, options, "output_name"): Pobiera wartość wyjściową w postaci listy.

Następnie należy użyć asercji testów Go (np. z pakietu github.com/stretchr/testify/assert), aby sprawdzić, czy wartości wyjściowe są zgodne z oczekiwaniami.

Sprawdź swoją wiedzę

Terratest pomaga testować kod Terraform poprzez interakcję z rzeczywistymi zasobami chmurowymi. Który z poniższych elementów NIE jest typowym krokiem w przebiegu testu jednostkowego Terratest?

Podsumowanie i kolejne kroki

Poznali Państwo podstawy testowania jednostkowego Terraform za pomocą Terratest!

  • Terratest to biblioteka Go służąca do testowania IaC.
  • Umożliwia wdrażanie rzeczywistej infrastruktury chmurowej, wykonywanie asercji i jej sprzątanie.
  • Najważniejsze elementy to pliki _test.go, func TestXxx(t *testing.T) oraz struktura terraform.Options.
  • Przebieg pracy obejmuje definiowanie opcji, zastosowanie Terraform, wykonywanie asercji i zapewnienie sprzątania za pomocą defer.

Następnie warto poznać sposoby pisania bardziej złożonych asercji i integrowania Terratest z potokami CI/CD na potrzeby automatycznego testowania.

Często zadawane pytania

Czy lekcja „Testy jednostkowe za pomocą Terratest” jest bezpłatna?

Tak — pełny tekst „Testy jednostkowe za pomocą Terratest” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Terraform Infrastructure as Code, przejdź na CoddyKit PRO. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Co nauczysz się w „Testy jednostkowe za pomocą Terratest”?

Dowiedz się, jak pisać testy jednostkowe modułów Terraform za pomocą Terratest — biblioteki Go do testowania kodu infrastruktury. Ćwiczysz Terraform Infrastructure as Code z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Terraform Infrastructure as Code?

Nie wymagamy żadnego doświadczenia. Terraform Infrastructure as Code w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Testy jednostkowe za pomocą Terratest”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Terraform Infrastructure as Code?

Tak. Każda lekcja Terraform Infrastructure as Code zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. `validate` i `fmt` w Terraform
  2. Testy jednostkowe za pomocą Terratest
  3. Testy integracyjne zasobów chmurowych
  4. Policy as Code i kontrole zgodności
← Powrót do Terraform Infrastructure as Code