Yakın zamanda altyapı kodunu test etmek için İsviçre çakısı kaynaklı Terratest'i açtık .
Bugün, muhtemelen tüm altyapı kodunuzu manuel olarak test ederek, doğrulayarak ve geri alarak test ediyoruz. Terratest, bu işlemi otomatikleştirmenize yardımcı olur:
- Go'da testler yaz.
- Gerçek altyapıyı (örneğin sunucular) gerçek bir ortamda (örn. AWS) dağıtmak için gerçek IaC araçlarınızı (örneğin, Terraform, Packer, vb.) Çalıştırmak için Terratest'teki yardımcıları kullanın.
- HTTP istekleri, API çağrıları, SSH bağlantıları vb. Yaparak altyapının bu ortamda doğru çalıştığını doğrulamak için Terratest'teki yardımcıları kullanın.
- Testin sonunda her şeyi dağıtmak için Terratest'teki yardımcıları kullanın.
İşte bazı Terraform kodu için bir örnek test:
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)
Bunlar entegrasyon testleridir ve ne test ettiğinize bağlı olarak 5 - 50 dakika sürebilir. Hızlı değil ( Docker ve test aşamalarını kullanıyor olsanız da, bazı şeyleri hızlandırabilirsiniz) ve testleri güvenilir hale getirmek için çalışmanız gerekecek, ancak zaman ayırmaya değer.
Check out Terratest repo dokümanlar ve altyapı kod çeşitli örnekler sürü ve bunlara karşılık gelen testler için.