You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:35:28