Recentemente, abrimos o Terratest , nosso canivete suíço para testes de código de infraestrutura.
Hoje, você provavelmente está testando todo o seu código de infraestrutura manualmente implantando, validando e desimplantando. O Terratest ajuda a automatizar esse processo:
- Escreva testes no Go.
- Use os auxiliares do Terratest para executar suas ferramentas IaC reais (por exemplo, Terraform, Packer etc.) para implantar infraestrutura real (por exemplo, servidores) em um ambiente real (por exemplo, AWS).
- Use os auxiliares do Terratest para validar se a infraestrutura funciona corretamente nesse ambiente, fazendo solicitações HTTP, chamadas de API, conexões SSH etc.
- Use ajudantes no Terratest para desimplementar tudo no final do teste.
Aqui está um exemplo de teste para algum código do 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)
Esses são testes de integração e, dependendo do que você está testando, podem levar de 5 a 50 minutos. Não é rápido (apesar de usar o Docker e as etapas de teste , você pode acelerar algumas coisas) e precisará trabalhar para tornar os testes confiáveis, mas vale a pena o tempo gasto.
Confira o repositório Terratest para obter documentos e vários exemplos de vários tipos de código de infraestrutura e os testes correspondentes para eles.