Test unitari con Terratest
Impari a scrivere test unitari per i moduli Terraform utilizzando Terratest, una libreria Go per il testing del codice d'infrastruttura.
Test unitari con Terratest è una lezione Terraform Infrastructure as Code gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Terraform Infrastructure as Code, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Terraform Infrastructure as Code include 4 lezioni in totale.
Perché testare l'IaC?
L'Infrastructure as Code (IaC) consente di gestire l'infrastruttura come il software. Proprio come il software, anche le configurazioni IaC possono contenere bug.
- Affidabilità: individuare gli errori prima del deployment.
- Coerenza: assicurarsi che le risorse vengano create come previsto.
- Sicurezza: apportare modifiche con meno timore di compromettere l'infrastruttura esistente.
Testare il codice Terraform è fondamentale per creare ambienti cloud robusti e facili da mantenere.
Test unitari e test di integrazione
Quando si testa l'IaC, si parla spesso di due tipi principali:
- Test unitari: si concentrano su parti piccole e isolate del codice, come un singolo modulo Terraform. Verificano che i singoli componenti funzionino correttamente in isolamento.
- Test di integrazione: verificano che più componenti o moduli funzionino insieme come sistema, spesso creando risorse reali in un ambiente cloud.
In questa lezione ci concentreremo sui test unitari dei moduli Terraform.
Introduzione a Terratest
Terratest è una libreria Go sviluppata da HashiCorp (i creatori di Terraform), progettata specificamente per testare il codice dell'infrastruttura.
- Aiuta a scrivere test automatizzati per Terraform, Packer, Kubernetes e altro codice IaC.
- Terratest può creare infrastrutture reali presso il cloud provider, eseguire asserzioni su di esse e quindi rimuoverle.
- È uno strumento efficace sia per i test unitari sia per i test di integrazione.
Prerequisiti di Terratest
Per iniziare a usare Terratest, sono necessari alcuni elementi:
- Go: Terratest è una libreria Go, quindi è necessario installare Go (si consiglia la versione 1.13 o successiva).
- Terraform CLI: L'interfaccia a riga di comando di Terraform deve essere installata e accessibile.
- Credenziali del provider cloud: Se si distribuiscono risorse reali (anche per test unitari che accedono a un'API cloud), è necessario disporre di un accesso autenticato al provider cloud (ad esempio, con AWS CLI configurata).
È inoltre necessaria una conoscenza di base dei concetti di programmazione in Go.
Struttura dei file di test Go
I test Terratest sono scritti in Go e seguono le convenzioni standard dei test Go:
- I file di test terminano con
_test.go(ad esempio,main_test.go). - Le funzioni di test iniziano con
Test(ad esempio,TestMyModule(t *testing.T)). - Usano il pacchetto integrato
testingdi Go.
In genere, questi file si trovano accanto al modulo Terraform o in una directory test dedicata.
Spiegazione di `terraform.Options`
Il componente fondamentale di un test Terraform con Terratest è la struct terraform.Options. Questo oggetto indica a Terratest come eseguire Terraform.
I campi principali includono:
TerraformDir: percorso del modulo Terraform.Vars: variabili di input per il modulo Terraform.EnvVars: variabili d'ambiente da impostare per il processo Terraform.BackendConfig: configurazione del backend Terraform.
È il modello di riferimento per eseguire i comandi Terraform all'interno del test.
Flusso di lavoro di base dei test
Un tipico test unitario Terratest per Terraform segue questi passaggi:
- Definire le opzioni: creare una struct
terraform.Optionsche punti al modulo e imposti le variabili. - Distribuire: usare
terraform.InitAndApply(t, options)per inizializzare e applicare la configurazione. - Rimandare la distruzione: aggiungere immediatamente
defer terraform.Destroy(t, options)per garantire la pulizia al termine del test. - Verificare: usare
testify/assertdi Go oppureterraform.Outputdi Terratest per controllare le proprietà o gli output delle risorse.
In questo modo si garantisce un ambiente di test pulito e isolato.
Scrivere codice con `terraform.Options`
Ecco un semplice programma Go che mostra come configurare terraform.Options. Si tratta di un passaggio fondamentale per qualsiasi interazione con 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.")
}Verifica degli output
Dopo aver applicato la configurazione Terraform, è opportuno verificarne gli output. Terratest offre funzioni che consentono di recuperare facilmente questi valori.
terraform.Output(t, options, "output_name"): recupera un singolo output stringa.terraform.OutputMap(t, options, "output_name"): recupera un output di tipo mappa.terraform.OutputList(t, options, "output_name"): recupera un output di tipo elenco.
È quindi possibile usare le asserzioni di testing di Go (ad esempio, quelle di github.com/stretchr/testify/assert) per verificare che gli output corrispondano alle aspettative.
Verifica della comprensione
Terratest consente di testare il codice Terraform interagendo con risorse cloud reali. Quale delle seguenti NON è una fase tipica del flusso di lavoro di un test unitario Terratest?
Riepilogo e prossimi passaggi
Ha appreso i fondamenti dei test unitari di Terraform con Terratest!
- Terratest è una libreria Go per testare l'IaC.
- Consente di distribuire, verificare e ripulire un'infrastruttura cloud reale.
- I componenti principali includono i file
_test.go,func TestXxx(t *testing.T)e la structterraform.Options. - Il flusso di lavoro prevede la definizione delle opzioni, l'applicazione di Terraform, l'esecuzione delle asserzioni e la pulizia garantita da
defer.
Successivamente, esplori come scrivere asserzioni più complesse e integrare Terratest nelle pipeline CI/CD per i test automatizzati.
Domande Frequenti
La lezione «Test unitari con Terratest» è gratuita?
Sì — il testo completo di «Test unitari con Terratest» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Terraform Infrastructure as Code, passa a CoddyKit PRO. Il corso Terraform Infrastructure as Code include 4 lezioni in totale.
Cosa imparerò in «Test unitari con Terratest»?
Impari a scrivere test unitari per i moduli Terraform utilizzando Terratest, una libreria Go per il testing del codice d'infrastruttura. Eserciti Terraform Infrastructure as Code con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Terraform Infrastructure as Code?
Non è richiesta alcuna esperienza precedente. Terraform Infrastructure as Code su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Test unitari con Terratest»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Terraform Infrastructure as Code?
Sì. Ogni lezione Terraform Infrastructure as Code include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- `validate` e `fmt` di Terraform
- Test unitari con Terratest
- Test d'integrazione delle risorse cloud
- Policy as Code e controlli di conformità