Ми нещодавно відкрили джерело Terratest , наш швейцарський армійський ніж для тестування інфраструктурного коду.
Сьогодні ви, ймовірно, випробовуєте весь свій інфраструктурний код вручну, розгортаючи, перевіряючи та нерозгортаючи. Terratest допомагає вам автоматизувати цей процес:
- Пишіть тести на Go.
- Використовуйте помічників у Terratest для виконання ваших реальних інструментів IaC (наприклад, Terraform, Packer тощо) для розгортання реальної інфраструктури (наприклад, серверів) в реальному середовищі (наприклад, AWS).
- Використовуйте помічників у Terratest для перевірки правильності роботи інфраструктури в цьому середовищі, роблячи HTTP-запити, API-дзвінки, SSH-з'єднання тощо.
- Використовуйте помічників у Terratest, щоб не розблокувати все в кінці тесту.
Ось приклад тесту для деяких кодів 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)
Це інтеграційні тести, і залежно від того, що ви тестуєте, може зайняти 5 - 50 хвилин. Це не швидко (хоча, використовуючи Docker і тестові етапи , ви можете прискорити деякі речі), і вам доведеться попрацювати, щоб зробити тести надійними, але це варто того часу.
Перегляньте репортаж Terratest щодо документів та безлічі прикладів різних типів інфраструктурного коду та відповідних тестів для них.