如何用Terraform配置Datadog Synthetics浏览器测试?报错排查
Datadog Synthetics浏览器测试Terraform配置错误修复
问题场景
通过Terraform批量创建Datadog Synthetics浏览器测试,测试流程为:访问目标URL → 在登录表单输入模拟凭证 → 点击登录 → 断言页面返回「无效用户名/密码」提示。执行terraform apply时失败,因官方文档无typeText步骤示例,怀疑params配置不符合要求。
原代码
resource "datadog_synthetics_test" "login_tests" { for_each = var.browser_test_urls type = "browser" request_definition { method = "GET" url = each.value } device_ids = ["laptop_large"] locations = ["aws:us-east-1"] options_list { tick_every = 1800 follow_redirects = true retry { count = 2 interval = 60000 } } name = "Login Test for ${each.key}" message = "Login test failed for ${each.key} on url ${each.value}" status = "paused" browser_step { name = "Type Username" type = "typeText" params { element = "#userItem" value = "username" } } browser_step { name = "Type Password" params { element = "#passItem" value = "password" } type = "typeText" } browser_step { name = "Click Login Button" params { element = "#btlogin" } type = "click" } browser_step { name = "Check for Invalid Login Message" params { check = "contains" value = "Invalid username or password!" } type = "assertPageContains" } }
报错信息
│ Error: error creating synthetics browser test from https://us3.datadoghq.com/api/v1/synthetics/tests/browser: 400 Bad Request: {"errors":["Invalid steps data: Step 0 has invalid params: None is not of type 'object'"]} │ │ with module.datadog.datadog_synthetics_test.login_tests["Test"], │ on modules\datadog\browser_tests.tf line 1, in resource "datadog_synthetics_test" "login_tests": │ 1: resource "datadog_synthetics_test" "login_tests" {
解决方案
错误根源是typeText步骤的params结构不符合Datadog API规范,正确结构需将元素选择器嵌套在target块内,而非直接使用element字段。
核心修正点
将两个typeText步骤的params修改为以下格式:
browser_step { name = "Type Username" type = "typeText" params { value = "username" target { selector { type = "css" value = "#userItem" } } } } browser_step { name = "Type Password" type = "typeText" params { value = "password" target { selector { type = "css" value = "#passItem" } } } }
完整修正代码
resource "datadog_synthetics_test" "login_tests" { for_each = var.browser_test_urls type = "browser" request_definition { method = "GET" url = each.value } device_ids = ["laptop_large"] locations = ["aws:us-east-1"] options_list { tick_every = 1800 follow_redirects = true retry { count = 2 interval = 60000 } } name = "Login Test for ${each.key}" message = "Login test failed for ${each.key} on url ${each.value}" status = "paused" browser_step { name = "Type Username" type = "typeText" params { value = "username" target { selector { type = "css" value = "#userItem" } } } } browser_step { name = "Type Password" type = "typeText" params { value = "password" target { selector { type = "css" value = "#passItem" } } } } browser_step { name = "Click Login Button" params { target { selector { type = "css" value = "#btlogin" } } } type = "click" } browser_step { name = "Check for Invalid Login Message" params { check = "contains" value = "Invalid username or password!" } type = "assertPageContains" } }
关键说明
typeText步骤的params必须包含value(输入文本内容)和target(目标元素定位)target内的selector需明确选择器类型(如css、xpath)及对应值- 建议同步修改
click步骤的元素定位方式,保持配置结构一致性
内容的提问来源于stack exchange,提问作者Fred Jack
相关产品推荐
相关产品推荐

