首页/新闻资讯/正文详情

使用 Terratest 为 Azure Cosmos DB Terraform 模块编写自动化测试

发布时间:2026/9/27 8:04:18 来源:云帆数科 栏目:资讯中心
使用 Terratest 为 Azure Cosmos DB Terraform 模块编写自动化测试
测试开发工具DevOps质量保障【免费下载链接】terratestTerratest is a Go library that makes it easier to write automated tests for your infrastructure code.项目地址https://gitcode.com/gh_mirrors/te/terratest点击查看免费下载导读本文以 Terratest 仓库中的 terraform-azure-cosmosdb-example 示例模块为线索完整讲解如何用 Terraform 在 Azure 上部署一个 Cosmos DB 账户含 SQL 数据库与三个 SQL 容器并配套编写 Go 自动化测试用 Azure SDK 独立回读真实资源属性并与 Terraform 输出断言比对。读完本文你将掌握该示例的资源拓扑、全部变量与输出参数、手动部署流程、测试命令以及 Terratest 中 Cosmos DB 测试辅助函数的底层调用链。⚠️成本警告本文模块及其自动化测试会在你的 Azure 账户中部署真实资源会产生实际费用。模块全景部署了哪些 Azure 资源该文件夹包含一个完整的 Terraform Cosmos DB 模块演示如何用 Terratest 为 Azure Terraform 代码编写自动化测试。模块共部署四类资源资源说明azurerm_resource_group.rg资源组命名terratest-cosmos-rg-${postfix}azurerm_cosmosdb_account.testCosmos DB 账户SQL APIkind GlobalDocumentDBazurerm_cosmosdb_sql_database.testdb一个 SQL 数据库名称固定为testdbazurerm_cosmosdb_sql_container.*三个 SQL 容器test-container-1/2/3对应的 Go 测试位于 test/azure/terraform_azure_cosmosdb_example_test.go用于验证该模块各配置参数与选项的正确性。Terraform 主配置逐块解读main.tf模块入口为 main.tf首先声明 Terraform 版本约束与 azurerm Providerterraform { required_version 1.0 required_providers { azurerm { source hashicorp/azurerm version ~ 3.0 } } } provider azurerm { features {} }资源组resource azurerm_resource_group rg { name terratest-cosmos-rg-${var.postfix} location var.location }Cosmos DB 账户resource azurerm_cosmosdb_account test { name terratest-${var.postfix} location azurerm_resource_group.rg.location resource_group_name azurerm_resource_group.rg.name offer_type Standard kind GlobalDocumentDB consistency_policy { consistency_level Session max_interval_in_seconds 5 max_staleness_prefix 100 } geo_location { location azurerm_resource_group.rg.location failover_priority 0 } }关键点kind GlobalDocumentDB表示使用 SQL文档API一致性策略为Session会话一致性并带有界内过期bounded staleness参数max_interval_in_seconds 5、max_staleness_prefix 100geo_location声明一个主区域failover_priority 0表示最高故障转移优先级。SQL 数据库与容器resource azurerm_cosmosdb_sql_database testdb { name testdb throughput var.throughput resource_group_name azurerm_resource_group.rg.name account_name azurerm_cosmosdb_account.test.name }三个容器结构与container1一致resource azurerm_cosmosdb_sql_container container1 { name test-container-1 throughput var.throughput partition_key_path /key1 resource_group_name azurerm_cosmosdb_account.test.resource_group_name account_name azurerm_cosmosdb_account.test.name database_name azurerm_cosmosdb_sql_database.testdb.name }container2、container3仅名称与分区键不同/key2、/key3。分区键路径是容器必配属性测试将逐一验证。变量与输出参数变量variables.tf模块没有必填变量全部为带默认值的可选参数定义于 variables.tf变量类型默认值说明postfixstringresource追加到资源名后缀集中避免命名冲突locationstringEast USCosmos DB 实例所在区域throughputnumber400数据库账户的 RU/s 吞吐量postfix在自动化测试中被替换为随机数见下文以支持并行测试互不干扰。输出outputs.tf定义于 outputs.tf其中primary_key被标记为sensitive trueoutput resource_group_name { value azurerm_resource_group.rg.name } output account_name { value azurerm_cosmosdb_account.test.name } output endpoint { value azurerm_cosmosdb_account.test.endpoint } output primary_key { value azurerm_cosmosdb_account.test.primary_key sensitive true }手动运行模块注册 Azure 账号使用 Azure CLI 支持的方式之一配置 Azure 凭据安装 Terraform 并确保其位于PATH确保相关环境变量已就绪见下节执行terraform init执行terraform apply完成后执行terraform destroy清理资源。Azure 环境变量速查参考 examples/azure/README.mdTerraform 与 Terratest 均通过以下环境变量获取 Azure 身份信息export ARM_CLIENT_IDyour_app_id export ARM_CLIENT_SECRETyour_password export ARM_SUBSCRIPTION_IDyour_subscription_id export ARM_TENANT_IDyour_tenant_id # 非公有云场景按需选择 export AZURE_ENVIRONMENTAzureUSGovernmentCloud # AzureChinaCloud / AzureGermanCloud / AzurePublicCloud / AzureStackCloudAZURE_ENVIRONMENT会被 modules/azure/client_factory.go 读取用于设定正确的 Azure 端点。Windows 下需以管理员 PowerShell 将这些变量设置为系统环境变量。对模块运行自动化测试前置步骤与手动运行相同Azure 账号、凭据、Terraform、配置 Go 测试环境然后cd test/azure go build terraform_azure_cosmosdb_example_test.go go test -v -timeout 60m -tags azure -run TestTerraformAzureCosmosDBExample说明-tags azure启用源文件顶部//go:build azure构建约束-timeout 60m为真实云资源的创建/销毁留出足够时间-run指定仅运行该用例。测试代码核心流程terraform_azure_cosmosdb_example_test.go 的TestTerraformAzureCosmosDBExample分四步1. 配置 Terraform 选项指向示例目录并用随机 postfix 与吞吐量 400 覆盖默认变量uniquePostfix : random.Random(10000, 99999) throughput : 400 terraformOptions : terraform.Options{ TerraformDir: ../../examples/azure/terraform-azure-cosmosdb-example, Vars: map[string]interface{}{ postfix: uniquePostfix, throughput: throughput, }, }2. 清理与部署defer terraform.DestroyContext(...)保证测试结束自动销毁随后terraform.InitAndApplyContext(...)执行initapply。3. 读取输出terraform.OutputContext(...)获取resource_group_name与account_name。4. 独立回读并断言通过azure模块的辅助函数结合assert.Equal验证账户azure.GetCosmosDBAccountContext(...)断言名称、Kind GlobalDocumentDB、一致性级别DefaultConsistencyLevelSessionSQL 数据库azure.GetCosmosDBSQLDatabaseContext(...)断言名称为testdb并通过GetCosmosDBSQLDatabaseThroughputContext断言吞吐量为400RU/s三个容器逐一断言名称及分区键路径/key1、/key2、/key3并验证容器吞吐量为 400。注意subscriptionID可传空字符串SDK 会回退到环境变量ARM_SUBSCRIPTION_ID的值。源码级原理Cosmos DB 测试辅助函数client_factory.go 中的客户端工厂测试的 SDK 客户端由 client_factory.go 统一创建func CreateCosmosDBAccountClientContextE(_ context.Context, subscriptionID string) (*armcosmos.DatabaseAccountsClient, error) { clientFactory, err : getArmCosmosClientFactory(subscriptionID) ... } func CreateCosmosDBSQLClientContextE(_ context.Context, subscriptionID string) (*armcosmos.SQLResourcesClient, error) { clientFactory, err : getArmCosmosClientFactory(subscriptionID) ... }两处均复用getArmCosmosClientFactory保证凭据与云环境解析逻辑单一来源。cosmosdb.go 中的读取辅助函数modules/azure/cosmosdb.go 提供全部回读能力每个 Get 函数都有三件套...Context失败即require.NoError终止测试、...ContextE返回 error、...WithClient接受外部注入的 client便于测试函数底层 SDK 调用GetCosmosDBAccountWithClientclient.Get(ctx, resourceGroupName, accountName, nil)GetCosmosDBSQLDatabaseWithClientclient.GetSQLDatabase(...)GetCosmosDBSQLContainerWithClientclient.GetSQLContainer(...)GetCosmosDBSQLDatabaseThroughputWithClientclient.GetSQLDatabaseThroughput(...)GetCosmosDBSQLContainerThroughputWithClientclient.GetSQLContainerThroughput(...)例如账户回读GetCosmosDBAccountContext先建 client再经GetCosmosDBAccountWithClient发起 SDK 请求最后把resp.DatabaseAccountGetResults返回给断言层。容器吞吐量的ThroughputSettingsGetResults通过Properties.Resource.Throughput暴露 RU/s 数值供测试与 Terraform 输出比对。测试设计要点总结回读而非仅信 Terraform 输出测试使用 Azure SDK 独立查询真实资源状态避免 Terraform state 与实际云资源不一致的假阳性。随机 postfix 避免命名冲突random.Random(10000, 99999)保证并行运行的测试实例资源名不冲突。defer destroy 保证清理无论测试成功失败terraform destroy都会执行防止残留付费资源。上下文贯穿调用链所有辅助函数接受context.Context支持超时与取消控制。若需进一步探索可阅读 test/azure 下其他测试文件与 modules/azure 中cosmosdb.go、client_factory.go的完整实现。赞分享测试开发工具DevOps质量保障【免费下载链接】terratestTerratest is a Go library that makes it easier to write automated tests for your infrastructure code.项目地址https://gitcode.com/gh_mirrors/te/terratest点击查看免费下载相关推荐使用 Terratest 为 Azure Key Vault Terraform 模块编写自动化测试使用 Terratest 为 Azure Key Vault Terraform 模块编写自动化测试 本文基于 Terratest 仓库中的 terraform测试开发工具DevOps质量保障使用 Terratest 为 Azure Synapse Analytics Terraform 模块编写自动化测试使用 Terratest 为 Azure Synapse Analytics Terraform 模块编写自动化测试 本指南以仓库中的 terraform az测试开发工具DevOps质量保障Travel Planning Agent Platform 实战基于真实 PRD 从零构建智能旅游规划 Agent 平台Travel Planning Agent Platform 实战基于真实 PRD 从零构建智能旅游规划 Agent 平台 导读 本文是 easy vibe测试开发工具DevOps质量保障上一篇终极指南如何用Skia引擎打造惊艳的彩色字体与SVG表情符号下一篇ThinkBayes2项目贡献指南如何参与开源贝叶斯教育项目创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

网页的维护与更新完整流程
网页的维护与更新完整流程

网页维护更新哪家强?3个步骤告别拖延症 改个文案建站公司拖一周?这种憋屈事谁没干过?很多老板觉得找对 哪家好 的供应商就能一劳永逸,其实大错特错。网站交付只是开始,后续的 网页的维护与更新 才是决定生死的关键。… · 2026/9/27 8:04:18

react-native-video 生态导航:官方与社区实用项目完全指南
react-native-video 生态导航:官方与社区实用项目完全指南

音视频移动开发 【免费下载链接】react-native-video A component for react-native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-video 点击查看 免费下载 react-native-video 是 React Native 生态中最成熟的开源视频播放组件,但一个完… · 2026/9/27 8:04:12

二级网站建设方案模板:新手入门避坑指南
二级网站建设方案模板:新手入门避坑指南

二级网站建设方案模板:新手入门避坑指南 网站上线三个月,后台流量曲线一条直线,后台数据惨淡得让人心慌。这是很多新手站长最绝望的时刻,花了钱买了服务器,熬了几个通宵写代码,结果没人访问。别急着怪自己代码写得烂,问题很可能出在架构选型的底层逻辑… · 2026/9/27 8:04:12

Penrose Style Collectors 深度指南:在 Style 语言中实现跨匹配聚合
Penrose Style Collectors 深度指南:在 Style 语言中实现跨匹配聚合

开发工具数据可视化 【免费下载链接】penrose Create beautiful diagrams just by typing notation in plain text. 项目地址: https://gitcode.com/gh_mirrors/pe/penrose 点击查看 免费下载 Collectors(收集器)是 Penrose Style 语言中一类… · 2026/9/27 8:47:25

BFS算法解决FloodFill问题
BFS算法解决FloodFill问题

BFS算法解决FloodFill问题图像渲染岛屿数量岛屿的最大面积被围住的区域图像渲染 题目解析:就是将这里面指定一个元素将其上下左右和这个一样的值,全部修改成另外一个值,并且其上下左右也可以进行上下左右进行扩展,也就是将这个一片… · 2026/9/27 8:47:25

数据集特征漂移自适应:基于在线增量主成分分析(Incremental PCA)
数据集特征漂移自适应:基于在线增量主成分分析(Incremental PCA)

数据集特征漂移自适应:基于在线增量主成分分析(Incremental PCA)在面对高维大规模数据流(如亿级在线文本嵌入向量、多模态特征流)时,主成分分析(PCA) 是最经典的高维降维与正交特征提… · 2026/9/27 8:47:19

深入 Chrome Performance 深度分析:消灭主线程长任务与动画掉帧
深入 Chrome Performance 深度分析:消灭主线程长任务与动画掉帧

深入 Chrome Performance 深度分析:消灭主线程长任务与动画掉帧在现代 Web 前端性能调优中,“界面偶发性卡顿与掉帧(Jank & Dropped Frames)”是用户体验最敏感、但也最难以通过常规日志排查的深水区: 用户在输入框… · 2026/9/27 8:47:13

网络营销的主要形式有建设网站避坑指南
网络营销的主要形式有建设网站避坑指南

3步搞定网络营销建设网站完整流程拒绝拖延 改个需求建站公司拖一周,这大概是每个甲方对接人最崩溃的瞬间。你急得电话打爆,对方却回复“排期满了”或“需要走流程”。别怪你脾气大,是因为你没盯着他们的 完整流程 ,只盯着了结果。很多老板觉得… · 2026/9/27 8:47:13

Tekton Pipeline Pod 模板(PodTemplate)完整指南:TaskRun/PipelineRun 调度配置、参数替换与全局默认模板合并策略
Tekton Pipeline Pod 模板(PodTemplate)完整指南:TaskRun/PipelineRun 调度配置、参数替换与全局默认模板合并策略

云原生CI/CDDevOps后端 【免费下载链接】pipeline A cloud-native Pipeline resource. 项目地址: https://gitcode.com/gh_mirrors/pipelin/pipeline 点击查看 免费下载 本文是一份关于 Tekton Pipeline 中 Pod 模板(Pod Template)的技术指南… · 2026/9/27 8:47:00

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码