Unit-Tests mit Terratest
Lernen Sie, mit Terratest, einer Go-Bibliothek zum Testen von Infrastrukturcode, Unit-Tests für Ihre Terraform-Module zu schreiben.
Unit-Tests mit Terratest ist eine kostenlose DevOps Bootcamp-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des DevOps Bootcamp-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
Warum sollten Sie Ihre IaC testen?
Infrastructure as Code (IaC) ermöglicht es Ihnen, Infrastruktur wie Software zu verwalten. Genau wie Software können auch IaC-Konfigurationen Fehler enthalten!
- Zuverlässigkeit: Erkennen Sie Fehler vor der Bereitstellung.
- Konsistenz: Stellen Sie sicher, dass Ressourcen wie erwartet bereitgestellt werden.
- Vertrauen: Nehmen Sie Änderungen mit geringerem Risiko vor, bestehende Infrastruktur zu beschädigen.
Das Testen Ihres Terraform-Codes ist entscheidend für robuste und wartbare Cloud-Umgebungen.
Unit-Tests vs. Integrationstests
Beim Testen von IaC sprechen wir häufig über zwei Hauptarten:
- Unit-Tests: Sie konzentrieren sich auf kleine, isolierte Teile Ihres Codes, beispielsweise ein einzelnes Terraform-Modul. Sie stellen sicher, dass einzelne Komponenten unabhängig voneinander korrekt funktionieren.
- Integrationstests: Sie überprüfen, ob mehrere Komponenten oder Module als System zusammenarbeiten, und stellen dafür häufig reale Ressourcen in einer Cloud-Umgebung bereit.
In dieser Lektion konzentrieren wir uns auf das Unit-Testing Ihrer Terraform-Module.
Terratest kennenlernen
Terratest ist eine von HashiCorp (den Entwicklern von Terraform) entwickelte Go-Bibliothek, die speziell für das Testen von Infrastrukturcode konzipiert wurde.
- Sie unterstützt Sie beim Schreiben automatisierter Tests für Ihren Terraform-, Packer-, Kubernetes- und sonstigen IaC-Code.
- Terratest kann reale Infrastruktur bei Ihrem Cloud-Provider bereitstellen, darauf Assertions ausführen und sie anschließend wieder bereinigen.
- Es eignet sich sowohl für Unit- als auch für Integrationstests.
Voraussetzungen für Terratest
Für den Einstieg in Terratest benötigen Sie einige Dinge:
- Go: Terratest ist eine Go-Bibliothek. Daher muss Go installiert sein (Version 1.13 oder höher wird empfohlen).
- Terraform CLI: Die Befehlszeilenschnittstelle von Terraform muss installiert und verfügbar sein.
- Anmeldedaten des Cloud-Anbieters: Wenn Sie echte Ressourcen bereitstellen (auch bei Unit-Tests, die auf eine Cloud-API zugreifen), benötigen Sie authentifizierten Zugriff auf den Cloud-Anbieter (z. B. eine konfigurierte AWS CLI).
Außerdem benötigen Sie grundlegende Kenntnisse der Go-Programmierkonzepte.
Struktur einer Go-Testdatei
Terratest-Tests werden in Go geschrieben und folgen den standardmäßigen Testkonventionen von Go:
- Testdateien enden mit
_test.go(z. B.main_test.go). - Testfunktionen beginnen mit
Test(z. B.TestMyModule(t *testing.T)). - Sie verwenden das integrierte Go-Paket
testing.
Diese Dateien befinden sich normalerweise neben Ihrem Terraform-Modul oder in einem eigenen test-Verzeichnis.
`terraform.Options` erklärt
Das zentrale Element eines Terratest-Terraform-Tests ist die Struktur terraform.Options. Dieses Objekt legt fest, wie Terratest Terraform ausführt.
Zu den wichtigsten Feldern gehören:
TerraformDir: Pfad zu Ihrem Terraform-Modul.Vars: Eingabevariablen für Ihr Terraform-Modul.EnvVars: Umgebungsvariablen, die für den Terraform-Prozess gesetzt werden.BackendConfig: Konfiguration für Ihr Terraform-Backend.
Sie dient als Vorlage für die Ausführung von Terraform-Befehlen innerhalb des Tests.
Grundlegender Testablauf
Ein typischer Terratest-Unit-Test für Terraform umfasst die folgenden Schritte:
- Optionen definieren: Erstellen Sie eine Struktur
terraform.Options, die auf Ihr Modul verweist und Variablen festlegt. - Bereitstellen: Verwenden Sie
terraform.InitAndApply(t, options), um Ihre Konfiguration zu initialisieren und anzuwenden. - Zerstörung aufschieben: Fügen Sie sofort
defer terraform.Destroy(t, options)hinzu, damit nach Abschluss des Tests eine Bereinigung erfolgt. - Assertions durchführen: Verwenden Sie Go-Assertions aus
testify/assertoder Terrateststerraform.Output, um Ressourceneigenschaften oder Ausgaben zu überprüfen.
So wird eine saubere, isolierte Testumgebung sichergestellt.
`terraform.Options` programmieren
Hier sehen Sie ein einfaches Go-Programm, das zeigt, wie terraform.Options eingerichtet wird. Dies ist ein grundlegender Schritt für jede Interaktion mit 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.")
}Ausgaben überprüfen
Nach dem Anwenden Ihrer Terraform-Konfiguration möchten Sie deren Ausgaben überprüfen. Terratest stellt Funktionen bereit, mit denen Sie diese Werte einfach abrufen können.
terraform.Output(t, options, "output_name"): Ruft eine einzelne String-Ausgabe ab.terraform.OutputMap(t, options, "output_name"): Ruft eine Map-Ausgabe ab.terraform.OutputList(t, options, "output_name"): Ruft eine Listen-Ausgabe ab.
Anschließend verwenden Sie die Test-Assertions von Go (z. B. aus github.com/stretchr/testify/assert), um zu prüfen, ob die Ausgaben Ihren Erwartungen entsprechen.
Verständnis überprüfen
Terratest unterstützt Sie beim Testen Ihres Terraform-Codes, indem es mit echten Cloud-Ressourcen interagiert. Welcher der folgenden Schritte gehört NICHT typischerweise zum Ablauf eines Terratest-Unit-Tests?
Zusammenfassung und nächste Schritte
Sie haben die Grundlagen des Testens von Terraform mit Terratest gelernt!
- Terratest ist eine Go-Bibliothek zum Testen von IaC.
- Damit können Sie echte Cloud-Infrastruktur bereitstellen, überprüfen und bereinigen.
- Zu den wichtigsten Bestandteilen gehören
_test.go-Dateien,func TestXxx(t *testing.T)und die Strukturterraform.Options. - Der Ablauf umfasst das Definieren von Optionen, das Anwenden von Terraform, das Durchführen von Assertions und das Sicherstellen der Bereinigung mit
defer.
Sehen Sie sich als Nächstes an, wie Sie komplexere Assertions schreiben und Terratest für automatisierte Tests in Ihre CI/CD-Pipelines integrieren.
Häufig gestellte Fragen
Ist die Lektion „Unit-Tests mit Terratest“ kostenlos?
Ja — der vollständige Text von „Unit-Tests mit Terratest“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des DevOps Bootcamp-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Unit-Tests mit Terratest“?
Lernen Sie, mit Terratest, einer Go-Bibliothek zum Testen von Infrastrukturcode, Unit-Tests für Ihre Terraform-Module zu schreiben. Du übst DevOps Bootcamp mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um DevOps Bootcamp zu starten?
Keine Vorkenntnisse erforderlich. DevOps Bootcamp auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Unit-Tests mit Terratest“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser DevOps Bootcamp-Lektion Code schreiben und ausführen?
Ja. Jede DevOps Bootcamp-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Terraform `validate` und `fmt`
- Unit-Tests mit Terratest
- Integrationstests für Cloud-Ressourcen
- Policy as Code und Compliance-Prüfungen