DevOps-bootcamp · Oppitunti

Yksikkötestaus Terratestillä

Oppikaa kirjoittamaan Terraform-moduulien yksikkötestejä Terratestillä, joka on infrastruktuurikoodin testaamiseen tarkoitettu Go-kirjasto.

Oppitunti 2/411 vaihetta

Yksikkötestaus Terratestillä on ilmainen DevOps-bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu DevOps-bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. DevOps-bootcamp-kurssilla on yhteensä 4 oppituntia.

Miksi IaC:tä kannattaa testata?

Infrastructure as Code (IaC) mahdollistaa infrastruktuurin hallinnan ohjelmiston tavoin. Ohjelmistojen tapaan myös IaC-määrityksissä voi olla virheitä!

  • Luotettavuus: Havaitse virheet ennen käyttöönottoa.
  • Yhdenmukaisuus: Varmista, että resurssit luodaan odotetulla tavalla.
  • Luottamus: Tee muutoksia pienemmällä riskillä rikkoa olemassa oleva infrastruktuuri.

Terraform-koodin testaaminen on olennaista vankkojen ja ylläpidettävien pilviympäristöjen rakentamisessa.

Yksikkötestit ja integraatiotestit

IaC:tä testattaessa puhumme usein kahdesta päätyypistä:

  • Yksikkötestit: Keskittyvät koodin pieniin, eristettyihin osiin, kuten yksittäiseen Terraform-moduuliin. Ne varmistavat, että yksittäiset komponentit toimivat oikein erillään.
  • Integraatiotestit: Varmistavat, että useat komponentit tai moduulit toimivat yhdessä järjestelmänä. Niissä otetaan usein käyttöön todellisia resursseja pilviympäristöön.

Tässä oppitunnissa keskitymme Terraform-moduulien yksikkötestaukseen.

Terratestin esittely

Terratest on HashiCorpin (Terraformin kehittäjän) kehittämä Go-kirjasto, joka on suunniteltu erityisesti infrastruktuurikoodin testaamiseen.

  • Sen avulla voit kirjoittaa automaattisia testejä Terraform-, Packer-, Kubernetes- ja muulle IaC-koodille.
  • Terratest voi ottaa todellisen infrastruktuurin käyttöön pilvipalveluntarjoajallasi, suorittaa sille tarkistuksia ja poistaa infrastruktuurin sen jälkeen.
  • Se soveltuu tehokkaasti sekä yksikkö- että integraatiotestaukseen.

Terratestin edellytykset

Terratestin käytön aloittamiseen tarvitaan muutama asia:

  • Go: Terratest on Go-kirjasto, joten Go on asennettava (suositeltu versio on vähintään 1.13).
  • Terraform CLI: Terraform-komentorivityökalun on oltava asennettuna ja käytettävissä.
  • Pilvipalveluntarjoajan tunnistetiedot: Jos otatte käyttöön oikeita resursseja (myös yksikkötesteissä, jotka käyttävät pilvipalvelun ohjelmointirajapintaa), tarvitsette todennetun käyttöoikeuden pilvipalveluntarjoajaan (esimerkiksi määritetyn AWS CLI:n).

Tarvitsette myös Go-ohjelmoinnin peruskäsitteiden tuntemusta.

Go-testitiedoston rakenne

Terratest-testit kirjoitetaan Golla, ja niissä noudatetaan Gon vakiintuneita testaussääntöjä:

  • Testitiedostojen nimen lopussa on _test.go (esimerkiksi main_test.go).
  • Testifunktioiden nimi alkaa merkkijonolla Test (esimerkiksi TestMyModule(t *testing.T)).
  • Niissä käytetään Gon sisäänrakennettua testing-pakettia.

Nämä tiedostot sijaitsevat yleensä Terraform-moduulin yhteydessä tai erillisessä test-hakemistossa.

`terraform.Options` – selitys

Terratestin Terraform-testin ydin on terraform.Options-rakenne. Tämä olio määrittää Terratestille, miten Terraform suoritetaan.

Tärkeimpiä kenttiä ovat:

  • TerraformDir: Terraform-moduulin polku.
  • Vars: Terraform-moduulin syötemuuttujat.
  • EnvVars: Terraform-prosessille asetettavat ympäristömuuttujat.
  • BackendConfig: Terraform-taustajärjestelmän määritykset.

Se toimii suunnitelmana Terraform-komentojen suorittamiseen testin aikana.

Testin peruskulku

Tyypillinen Terraformin Terratest-yksikkötesti etenee seuraavasti:

  1. Määritä asetukset: Luo terraform.Options-rakenne, joka viittaa moduuliinne ja määrittää muuttujat.
  2. Ota käyttöön: Alusta ja ota määritykset käyttöön komennolla terraform.InitAndApply(t, options).
  3. Ajasta tuhoaminen: Lisää heti defer terraform.Destroy(t, options) varmistaaksesi resurssien siivouksen testin suorittamisen jälkeen.
  4. Tee tarkistukset: Tarkista resurssien ominaisuudet tai tulosteet Gon testify/assert-paketilla tai Terratestin terraform.Output-funktiolla.

Näin testausympäristö pysyy puhtaana ja eristettynä.

`terraform.Options`-rakenteen koodaaminen

Tässä on yksinkertainen Go-ohjelma, joka havainnollistaa terraform.Options-rakenteen määrittämistä. Tämä on Terratestin käytön perusta.

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.")
}

Tulosteiden tarkistaminen

Kun Terraform-määritykset on otettu käyttöön, niiden tulosteet kannattaa tarkistaa. Terratest tarjoaa funktioita näiden arvojen helppoon hakemiseen.

  • terraform.Output(t, options, "output_name"): Hakee yksittäisen merkkijonotulosteen.
  • terraform.OutputMap(t, options, "output_name"): Hakee karttatulosteen.
  • terraform.OutputList(t, options, "output_name"): Hakee listatulosteen.

Käyttäkää sen jälkeen Gon testiväitteitä (esimerkiksi paketin github.com/stretchr/testify/assert tarjoamia) tarkistamaan, vastaavatko tulosteet odotuksianne.

Testaa ymmärryksesi

Terratest auttaa testaamaan Terraform-koodia käsittelemällä oikeita pilviresursseja. Mikä seuraavista EI ole tyypillinen Terratest-yksikkötestin vaihe?

Kertaus ja seuraavat vaiheet

Olette oppineet Terratestin avulla tehtävän Terraformin yksikkötestauksen perusteet!

  • Terratest on IaC:n testaamiseen tarkoitettu Go-kirjasto.
  • Sen avulla voitte ottaa käyttöön oikeaa pilvi-infrastruktuuria, tehdä tarkistuksia ja siivota resurssit.
  • Tärkeisiin osiin kuuluvat _test.go-tiedostot, func TestXxx(t *testing.T) ja terraform.Options-rakenne.
  • Työnkulkuun kuuluvat asetusten määrittäminen, Terraformin käyttöönottaminen, tarkistusten tekeminen ja siivouksen varmistaminen defer-komennolla.

Seuraavaksi tutustukaa monimutkaisempien tarkistusten kirjoittamiseen ja Terratestin integroimiseen CI/CD-putkiinne automaattista testausta varten.

Aloita maksutta

Opi DevOps-bootcamp tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
142
Oppitunnit
568

Usein kysytyt kysymykset

Onko oppitunti ”Yksikkötestaus Terratestillä” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa DevOps-bootcamp-oppimispolun 3 oppituntia, myös oppitunnin “Yksikkötestaus Terratestillä”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. DevOps-bootcamp-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yksikkötestaus Terratestillä”?

Oppikaa kirjoittamaan Terraform-moduulien yksikkötestejä Terratestillä, joka on infrastruktuurikoodin testaamiseen tarkoitettu Go-kirjasto. Harjoittelet DevOps-bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni DevOps-bootcamp-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin DevOps-bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Yksikkötestaus Terratestillä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä DevOps-bootcamp-oppitunnilla?

Kyllä. Jokainen DevOps-bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Terraformin `validate` ja `fmt`
  2. Yksikkötestaus Terratestillä
  3. Pilviresurssien integraatiotestaus
  4. Käytännöt koodina ja vaatimustenmukaisuuden tarkistukset
← Takaisin: DevOps-bootcamp