Recientemente abrimos Terratest , nuestra navaja suiza para probar el código de infraestructura.
Hoy, probablemente esté probando todo su código de infraestructura manualmente mediante la implementación, la validación y la eliminación de la implementación. Terratest te ayuda a automatizar este proceso:
- Escribe pruebas en Go.
- Use ayudantes en Terratest para ejecutar sus herramientas IaC reales (por ejemplo, Terraform, Packer, etc.) para implementar infraestructura real (por ejemplo, servidores) en un entorno real (por ejemplo, AWS).
- Use ayudantes en Terratest para validar que la infraestructura funciona correctamente en ese entorno al hacer solicitudes HTTP, llamadas API, conexiones SSH, etc.
- Use ayudantes en Terratest para anular la implementación de todo al final de la prueba.
Aquí hay una prueba de ejemplo para algún código de 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)
Estas son pruebas de integración y, dependiendo de lo que esté probando, puede tomar de 5 a 50 minutos. No es rápido (aunque con Docker y las etapas de prueba , puede acelerar algunas cosas), y tendrá que trabajar para que las pruebas sean confiables, pero vale la pena el tiempo.
Consulte el repositorio de Terratest para obtener documentos y muchos ejemplos de varios tipos de código de infraestructura y las pruebas correspondientes para ellos.