DevOps-bootcamp · leksjon

Enhetstesting med Terratest

Lær å skrive enhetstester for Terraform-modulene dine ved hjelp av Terratest, et Go-bibliotek for testing av infrastrukturkode.

Leksjon 2 av 411 trinn

Enhetstesting med Terratest er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hvorfor teste IaC?

Infrastructure as Code (IaC) gjør det mulig å administrere infrastruktur på samme måte som programvare. Akkurat som programvare kan IaC-konfigurasjoner inneholde feil!

  • Pålitelighet: Oppdag feil før distribusjon.
  • Konsistens: Sørg for at ressursene opprettes som forventet.
  • Trygghet: Gjør endringer med mindre frykt for å ødelegge eksisterende infrastruktur.

Testing av Terraform-koden Deres er avgjørende for å bygge robuste og vedlikeholdbare skymiljøer.

Enhetstester kontra integrasjonstester

Når vi tester IaC, snakker vi ofte om to hovedtyper:

  • Enhetstester: Fokuserer på små, isolerte deler av koden, for eksempel én Terraform-modul. De sikrer at enkeltkomponenter fungerer korrekt hver for seg.
  • Integrasjonstester: Kontrollerer at flere komponenter eller moduler fungerer sammen som et system, ofte ved å opprette faktiske ressurser i et skymiljø.

I denne leksjonen fokuserer vi på enhetstesting av Terraform-modulene Deres.

Introduksjon til Terratest

Terratest er et Go-bibliotek utviklet av HashiCorp (skaperne av Terraform), spesielt utformet for testing av infrastrukturkode.

  • Det hjelper Dem med å skrive automatiserte tester for Terraform-, Packer-, Kubernetes- og annen IaC-kode.
  • Terratest kan opprette faktisk infrastruktur hos skyleverandøren, kjøre påstander mot den og deretter rydde den opp.
  • Det er effektivt både for enhets- og integrasjonstesting.

Forutsetninger for Terratest

For å komme i gang med Terratest trenger De noen få ting:

  • Go: Terratest er et Go-bibliotek, så Go må være installert (versjon 1.13 eller nyere anbefales).
  • Terraform CLI: Terraform-kommandolinjeverktøyet må være installert og tilgjengelig.
  • Påloggingsinformasjon for skyleverandør: Hvis De distribuerer faktiske ressurser (også for enhetstester som bruker et sky-API), trenger De autentisert tilgang til skyleverandøren (for eksempel en konfigurert AWS CLI).

De trenger også grunnleggende kjennskap til konsepter innen Go-programmering.

Strukturen til Go-testfiler

Terratest-tester skrives i Go og følger Gos standardkonvensjoner for testing:

  • Testfiler slutter med _test.go (for eksempel main_test.go).
  • Testfunksjoner begynner med Test (for eksempel TestMyModule(t *testing.T)).
  • De bruker Gos innebygde testing-pakke.

Disse filene ligger vanligvis sammen med Terraform-modulen eller i en egen test-katalog.

`terraform.Options` forklart

Kjernen i en Terratest-test av Terraform er structen terraform.Options. Dette objektet forteller Terratest hvordan Terraform skal kjøres.

Viktige felter omfatter:

  • TerraformDir: Banen til Terraform-modulen.
  • Vars: Inndatavariabler for Terraform-modulen.
  • EnvVars: Miljøvariabler som skal settes for Terraform-prosessen.
  • BackendConfig: Konfigurasjon for Terraform-backend-en.

Dette er planen De bruker for å kjøre Terraform-kommandoer i testen.

Grunnleggende testarbeidsflyt

En typisk Terratest-enhetstest for Terraform følger disse trinnene:

  1. Definer alternativer: Opprett en terraform.Options-struct som peker på modulen og setter variabler.
  2. Distribuer: Bruk terraform.InitAndApply(t, options) til å initialisere og bruke konfigurasjonen.
  3. Utsett destruksjon: Legg umiddelbart til defer terraform.Destroy(t, options) for å sikre opprydding etter at testen er kjørt.
  4. Kontroller: Bruk Gos testify/assert eller Terratest-funksjonen terraform.Output til å kontrollere egenskaper eller outputverdier for ressurser.

Dette sikrer et rent og isolert testmiljø.

Koding med `terraform.Options`

Her er et enkelt Go-program som viser hvordan De setter opp terraform.Options. Dette er et grunnleggende trinn i all bruk av 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.")
}

Kontrollere outputverdier

Etter at Terraform-konfigurasjonen er tatt i bruk, vil De gjerne kontrollere outputverdiene. Terratest tilbyr funksjoner som gjør det enkelt å hente disse verdiene.

  • terraform.Output(t, options, "output_name"): Henter én outputverdi som en streng.
  • terraform.OutputMap(t, options, "output_name"): Henter en outputverdi som et map.
  • terraform.OutputList(t, options, "output_name"): Henter en outputverdi som en liste.

Deretter bruker De Gos påstander for testing (for eksempel fra github.com/stretchr/testify/assert) til å kontrollere om outputverdiene samsvarer med forventningene.

Kontroller forståelsen

Terratest hjelper Dem med å teste Terraform-koden ved å samhandle med faktiske skyressurser. Hvilket av alternativene nedenfor er IKKE et typisk trinn i arbeidsflyten for en Terratest-enhetstest?

Oppsummering og neste trinn

De har lært det grunnleggende om enhetstesting av Terraform med Terratest!

  • Terratest er et Go-bibliotek for testing av IaC.
  • Det gjør det mulig å distribuere, kontrollere og rydde opp i faktisk skyinfrastruktur.
  • Viktige komponenter omfatter _test.go-filer, func TestXxx(t *testing.T) og structen terraform.Options.
  • Arbeidsflyten innebærer å definere alternativer, bruke Terraform, utføre kontroller og sikre opprydding med defer.

Utforsk deretter hvordan De kan skrive mer komplekse kontroller og integrere Terratest i CI/CD-pipelines for automatisert testing.

Gratis å komme i gang

Lær deg DevOps-bootcamp med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
142
Leksjoner
568

Ofte stilte spørsmål

Er leksjonen «Enhetstesting med Terratest» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Enhetstesting med Terratest», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hva lærer jeg i «Enhetstesting med Terratest»?

Lær å skrive enhetstester for Terraform-modulene dine ved hjelp av Terratest, et Go-bibliotek for testing av infrastrukturkode. Du øver på DevOps-bootcamp med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med DevOps-bootcamp?

Ingen tidligere erfaring er nødvendig. DevOps-bootcamp på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Enhetstesting med Terratest»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne DevOps-bootcamp-leksjonen?

Ja. Alle DevOps-bootcamp-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Terraform `validate` og `fmt`
  2. Enhetstesting med Terratest
  3. Integrasjonstesting av skyressurser
  4. Policy som kode og samsvarskontroller
← Tilbake til DevOps-bootcamp