我们最近开源了用于测试基础结构代码的瑞士军刀Terratest。
今天,您可能正在通过部署,验证和取消部署来手动测试所有基础结构代码。Terratest可帮助您自动化此过程:
- 在Go中编写测试。
- 使用Terratest中的助手来执行您的真实IaC工具(例如Terraform,Packer等),以在真实环境(例如AWS)中部署真实基础架构(例如服务器)。
- 通过发出HTTP请求,API调用,SSH连接等,在Terratest中使用帮助程序来验证基础架构在该环境中是否正常运行。
- 在测试结束时使用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存储库中的文档,以及各种类型的基础架构代码的示例以及针对它们的相应测试。