我想使用go test
该terratest
库对具有约 10 个不同组件(pod、服务、负载均衡器、组件之间的链接等)的集群进行集成测试。用于构建基础设施的工具是terraform
、kubernetes
和helm
。建设基础设施大约需要。10 分钟,这样我就不想每次测试都单独做。我的解决方案建议使用在测试套件中设置测试基础设施的模式,TestMain(*testing.M)
并在测试套件中对测试进行分组,例如TestAuth(*testing.T)
,TestMonitoring(*testing.T)
等。现在,我需要调用terratest
诸如terraform.InitAndApply(*testing.T, terraformOptions)
测试套件之外的组件,这显然对我来说是不可能的.
我尝试了以下方法:
func TestMain(m *testing.M) {
setupInfrastructure()
rc = m.Run()
teadDownInfrastructure()
os.Exit(rc)
}
func setupInfrastructure() {
terraformOptions := &terraform.Options{
TerraformDir: testFolder,
EnvVars: map[string]string{
"TF_VAR_cluster_size": 3,
},
}
terraform.InitAndApply(t, terraformOptions) // <-- this is the problem
}
由于这是建立综合测试基础设施的自然方式,我错过了什么?
我看到所有terratest
样本(https://github.com/gruntwork-io/terratest/tree/master/test)都使用一个测试套件、阶段和子测试,我不想这样做,因为它放弃了大部分的特征go testing
。这真的是完成这项工作的唯一方法吗?