Недавно мы открыли исходный код 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 вы найдете документы и множество примеров различных типов кода инфраструктуры и соответствующих тестов для них.