Niedawno otworzyliśmy Terratest , nasz szwajcarski scyzoryk do testowania kodu infrastruktury.
Dzisiaj prawdopodobnie testujesz cały kod infrastruktury ręcznie, wdrażając, sprawdzając i wycofując. Terratest pomaga zautomatyzować ten proces:
- Napisz testy w Go.
- Użyj pomocników w Terratest, aby uruchomić swoje prawdziwe narzędzia IaC (np. Terraform, Packer itp.) W celu wdrożenia prawdziwej infrastruktury (np. Serwerów) w prawdziwym środowisku (np. AWS).
- Użyj pomocników w Terratest, aby sprawdzić poprawność działania infrastruktury w tym środowisku, wykonując żądania HTTP, wywołania API, połączenia SSH itp.
- Użyj pomocników w Terratestie, aby cofnąć wszystko pod koniec testu.
Oto przykładowy test dla niektórych kodów Terraform:
terraformOptions := &terraform.Options {
// The path to where your Terraform code is located
TerraformDir: "../examples/terraform-basic-example",
}
// This will run `terraform init` and `terraform apply` and fail the test if there are any errors
terraform.InitAndApply(t, terraformOptions)
// At the end of the test, run `terraform destroy` to clean up any resources that were created
defer terraform.Destroy(t, terraformOptions)
// Run `terraform output` to get the value of an output variable
instanceUrl := terraform.Output(t, terraformOptions, "instance_url")
// Verify that we get back a 200 OK with the expected text
// It can take a minute or so for the Instance to boot up, so retry a few times
expected := "Hello, World"
maxRetries := 15
timeBetweenRetries := 5 * time.Second
http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)
Są to testy integracyjne, w zależności od tego, co testujesz, może to zająć od 5 do 50 minut. Nie jest to szybkie (chociaż używając Dockera i etapów testowania , możesz przyspieszyć niektóre rzeczy) i będziesz musiał pracować, aby testy były wiarygodne, ale warto poświęcić czas.
Sprawdź repozytorium Terratest, aby uzyskać dokumenty i wiele przykładów różnych rodzajów kodu infrastruktury i odpowiadających im testów.