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 DevOps Bootcamp 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 DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp 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:
- Zdefiniowanie opcji: Należy utworzyć strukturę
terraform.Optionswskazującą moduł i ustawiającą zmienne. - Wdrożenie: Należy użyć
terraform.InitAndApply(t, options), aby zainicjować i zastosować konfigurację. - Odroczone usunięcie: Należy od razu dodać
defer terraform.Destroy(t, options), aby zapewnić sprzątanie po zakończeniu testu. - Asercja: Należy użyć asercji Go
testify/assertlub funkcji Terratestterraform.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 strukturaterraform.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 DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp 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 DevOps Bootcamp 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ąć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp 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 DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp 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
- `validate` i `fmt` w Terraform
- Testy jednostkowe za pomocą Terratest
- Testy integracyjne zasobów chmurowych
- Policy as Code i kontrole zgodności