产品概述
产品优势
应用场景
export TF_ACC=true
export TENCENTCLOUD_SECRET_ID=xxxxexport TENCENTCLOUD_SECRET_KEY=yyyy
export TF_LOG=DEBUGexport TF_LOG_PATH=./terraform.log
tencentcloud 目录下创建 resource_tc_vpc_test.go 文件,指定一个 VPC 资源,编写其初始配置和更新配置:// filename: tencentcloud/resource_tc_vpc_test.goconst testAccVpcConfig = `resource "tencentcloud_vpc" "foo" {name = "test-vpc"cidr_block = "172.16.0.0/16"}`const testAccVpcConfigUpdate = `resource "tencentcloud_vpc" "foo" {name = "test-vpc__update"cidr_block = "172.16.0.0/22"is_multicast = true}`
TestAccTencentCloud 起头表示验收测试,函数名规则为TestAccTencentCloud${模块名}${资源类型}_${子名称},正则表达式: TestAccTencentCloud[a-zA-Z]+(Resource|DataSource)_[a-zA-Z]+, 调用 resource.Test 中引入这两个配置并添加断言:package tencentcloudimport ("testing""github.com/hashicorp/terraform-plugin-sdk/helper/resource""github.com/hashicorp/terraform-plugin-sdk/terraform")func TestAccTencentCloudVpcResource_Basic(t *testing.T) {resource.Test(t, resource.TestCase{Providers: testAccProviders,Steps: []resource.TestStep{{// 上文声明的初始配置Config: testAccVpcConfig,Check: resource.ComposeTestCheckFunc(testAccCheckVpcExists("tencentcloud_vpc.foo"),resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", "172.16.0.0/16"),resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", "test-vpc"),),},{// 上文声明的更新配置Config: testAccVpcConfig,Check: resource.ComposeTestCheckFunc(testAccCheckVpcExists("tencentcloud_vpc.foo"),resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", "172.16.0.0/22"),resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", "test-vpc__update"),resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"),),},},})}
go test -v -run TestAccTencentCloudVpcResource ./tencentcloud 验证测试结果:TestAccTencentCloudVpcResource_Basic=== RUN TestAccTencentCloudVpcResource_Basic=== PAUSE TestAccTencentCloudVpcResource_Basic=== CONT TestAccTencentCloudVpcResource_Basic--- PASS: TestAccTencentCloudVpcResource_Basic (26.30s)PASSok github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud 27.153s
tencentcloud/terraform.log 中写入。isExpectError(err) 用来检查云 API 的错误码决定程序应该重试(比如客户端网络不稳定)还是异常退出,可以编写以下测试用例。以 Test* 开始:package tencentcloudimport ("testing"sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors""github.com/stretchr/testify/assert")func TestIsExpectError(t *testing.T) {err := sdkErrors.NewTencentCloudSDKError("ClientError.NetworkError", "", "")// ExpectedexpectedFull := []string{"ClientError.NetworkError"}expectedShort := []string{"ClientError"}assert.Equalf(t, isExpectError(err, expectedFull), true, "")assert.Equalf(t, isExpectError(err, expectedShort), true, "")// UnexpectedunExpectedMatchHead := []string{"ClientError.HttpStatusCodeError"}unExpectedShort := []string{"SystemError"}assert.Equalf(t, isExpectError(err, unExpectedMatchHead), false, "")assert.Equalf(t, isExpectError(err, unExpectedShort), false, "")}
go test -v -run TestIsExpectError ./tencentcloud ,查看结果:=== RUN TestIsExpectError--- PASS: TestIsExpectError (0.00s)PASSok github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud 1.312s
tencentcloud/resource_tc_vpc_test.go 中加入 init 函数,注册一个名为 tencentcloud_vpc 的 Sweeper:func init() {resource.AddTestSweepers("tencentcloud_vpc", &resource.Sweeper{Name: "tencentcloud_vpc",F: testSweepVpcInstance,})}// 伪代码逻辑,实现指定地域下 test 开头的 VPC 清理func testSweepVpcInstance(region string) {vpcs := getAllVpc(region)for _, vpc in range vpcs {if vpc.name == "test" {deleteVpc(vpc.id)}}}
go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_vpc , Terraform SDK 会匹配名称为 tencentcloud_vpc 的 Sweeper 并传入 -sweep 指定的地域给函数并执行,完成该地域的资源清理。文档反馈