用途:Terraform 内置测试框架用于验证模块配置更新是否引入破坏性变更,测试在临时资源上执行,从而保护现有基础设施与状态文件。
主要能力:测试文件使用 .tftest.hcl 或 .tftest.json 扩展名,通常放在 tests/ 目录。组成包括:test 块(测试级设置,Terraform 1.6.0 起可用)、run 块(单个测试场景,每个文件至少一个)、assert 块(断言条件,全部通过测试才成功)、variables 块、provider 块、mock_provider 块(1.7.0 起可用)。测试模式分 apply(默认,创建真实基础设施)与 plan(不创建资源,验证逻辑)。run 块支持 command、plan_options、variables、module、providers、assert、expect_failures、state_key、parallel 属性。mock_provider 可模拟 provider 行为而不创建真实基础设施。
使用方式:在配置目录或 tests/ 目录运行 terraform test;可指定文件 terraform test tests/defaults.tftest.hcl;使用 -verbose 输出详情,-test-directory 指定目录,-filter 按名称过滤,-no-cleanup 保留资源用于调试。
适用场景:模块作者的单元测试(plan 模式)与集成测试(apply 模式),验证默认值、输出、资源数量、条件资源、标签、输入校验失败等。
限制:module 块仅支持本地模块与 Terraform Registry(公共及 HCP 私有),不支持 Git 仓库、HTTP URL 及其他远程来源;并行执行要求 run 块之间无输出引用且使用不同状态文件;测试文件中的变量优先级最高,会覆盖环境变量、变量文件与命令行输入。