在本文中,我们将探讨使用不同类型的常用测试、工具和平台的 Terraform 测试策略。让我们直接开始吧!
我们将涵盖:
Terraform 通过检查以下扩展名来发现配置中的测试文件:
每个测试文件都由以下根级属性和块组成:
Terraform 按顺序执行运行块,模拟在配置目录中运行的 Terraform 命令序列。变量和提供程序块的排列顺序无关紧要,因为 Terraform 会在测试过程开始时评估这些块中的所有值。为了清晰起见,建议将变量和提供程序块放在测试文件的开头。
运行块命令可以是 plan 或 apply,如果省略添加,则默认值为 plan。
run "example_test" {
command = plan
// Define any variables required for your test
variables {
example_variable = "value"
}
// Assertions to validate the test outcome
assert {
condition = example_resource.attribute == var.example_variable
error_message = "Test failed: the attribute value was not as expected."
}
// Optionally, you can specify providers if your test requires it
provider "aws" {
region = "us-west-2"
}
}
在运行块中,您可以添加可选变量和断言,并且可以像在任何 Terraform 配置中使用变量一样,在断言中使用变量,只需在变量前添加 var 前缀即可。变量也可以全局定义(在运行块外部),或者仅在运行块内部定义,以便仅由该特定运行块访问。
运行块中的断言会检查一个条件,如果该条件不成立,则会在 Terraform 验证结束时显示。
您可以定义所需的提供程序数量,并将其指定为运行块的一部分或外部。
Terraform 测试命令用于运行配置中定义的所有测试文件。
Terraform 测试命令会读取配置文件中定义的 Terraform 测试文件,方法是查看所有以 .tftest.json 和 .tftest.hcl 为扩展名的文件,并执行这些文件中定义的测试。默认情况下,Terraform 会在当前目录以及指定的测试目录(默认为 tests)中搜索这些文件。
Terraform 测试命令可以接收以下几个可选属性:
terraform test -filter=tests/my_test.tftest.hcl – 这将仅测试 tests/my_test.tftest.hcl 文件
terraform test -verbose – 将打印每个运行块的计划或状态
terraform test -test-directory=my_tests – 将从当前目录和 my_tests 目录运行测试
下面通过一个例子演示如何运行terraform test 命令
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.0"
}
}
required_version = ">=