运维部署
运行或诊断 Terraform Provider…
当需要运行、排查或验证以 TestAcc 开头的 Terraform provider Go 验收测试(包括缺失环境变量、失败或可疑通过)时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
运行或诊断 Terraform Prov特定
解决思路
- 确认目标测试是 Go 测试函数,且名称以 TestAcc 为前缀。
- 运行前确认验收测试会针对 provider 的实时 API 创建真实基础设施,可能产生费用;确认已配置的凭据指向测试账号后再继续。
- 运行指定验收测试 TestAccFeatureHappyPath:执行 `go test -run=TestAccFeatureHappyPath -timeout 60m`,并设置环境变量 `TF_ACC=1`。
- 默认使用非 verbose 的测试输出;始终显式传入 `-timeout`,因为 `go test` 默认 10 分钟后终止测试运行,而验收测试通常会超过该时间。
- 验收测试可能需要特定 provider 的额外环境变量;通过阅读测试的 `PreCheck` / `testAccPreCheck` 函数来发现这些变量。
- 通过搜索测试文件发现环境变量:运行 `grep -rn "os.Getenv" --include="*_test.go"`。
- 检查仓库的 README、CONTRIBUTING 或 `.env.example` 中记录的测试设置。
- 查看 provider 的 `Configure` 方法以了解凭据如何解析;如果可用,使用 `provider-configuration` 技能理解凭据 provider chain。
- 为单次测试调用设置环境变量,例如 `EXAMPLE_API_KEY=... TF_ACC=1 go test ...`,而不是 export 到 shell profile;绝不要把 secret 值写入仓库内的文件。
- 诊断失败的验收测试时,按顺序使用以下累积选项;每个选项都包含上面所有选项:先重新运行测试。
- 重新运行时使用 `-count=1` 选项,确保 `go test` 不使用缓存结果。
- 提供 verbose 的 `go test` 输出:使用 `-v` 选项。
- 提供 debug 级别日志:使用环境变量 `TF_LOG=debug`。
- 提供持久化验收测试的 Terraform workspace:使用环境变量 `TF_ACC_WORKING_DIR_PERSIST=1`。
- 验收测试通过可能是 false negative;要“翻转”通过状态的验收测试 TestAccFeatureHappyPath:编辑 TestCase 中某个 TestStep 的某个 TestCheckFunc 的值。
- 运行该验收测试,预期测试失败。
- 如果测试失败,则撤销编辑并报告成功的 flip;否则保留编辑并报告不成功的 flip。
- 如果测试运行被中断,可能残留真实资源;如果 provider 注册了 sweepers,运行 provider 的 sweepers(如可用,参见 `provider-test-patterns` 技能的 sweeper 参考)。
- 编写或重构测试时,使用 `provider-test-patterns` 技能。
适用边界 · 注意事项
- 没有指向测试账号的凭据,或无法承担创建真实基础设施的费用时,不要运行验收测试。
- 仅需要运行不创建真实基础设施的普通单元测试时,不适用该验收测试流程。
- 只是编写或重构测试时,不应使用本流程,而应使用 `provider-test-patterns` 技能。