Enhetstesting med Terratest
Lær å skrive enhetstester for Terraform-modulene dine ved hjelp av Terratest, et Go-bibliotek for testing av infrastrukturkode.
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 eksempelmain_test.go). - Testfunksjoner begynner med
Test(for eksempelTestMyModule(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:
- Definer alternativer: Opprett en
terraform.Options-struct som peker på modulen og setter variabler. - Distribuer: Bruk
terraform.InitAndApply(t, options)til å initialisere og bruke konfigurasjonen. - Utsett destruksjon: Legg umiddelbart til
defer terraform.Destroy(t, options)for å sikre opprydding etter at testen er kjørt. - Kontroller: Bruk Gos
testify/asserteller Terratest-funksjonenterraform.Outputtil å 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 structenterraform.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.
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
- Terraform `validate` og `fmt`
- Enhetstesting med Terratest
- Integrasjonstesting av skyressurser
- Policy som kode og samsvarskontroller