多步探测的变量系统允许您在多个 HTTP 请求之间传递数据,实现复杂的业务场景测试。变量可以从前一步的响应中提取,并在后续步骤的 URL、请求头、请求体中使用。本指南将详细介绍多步探测中变量的类型、提取方式、引用方法以及最佳实践,帮助您充分利用这一强大功能。
变量类型
多步探测支持两种类型的变量:
配置变量(Config Variables)
配置变量是在任务开始时定义的初始变量,您可以为其设置默认值。这些变量在整个多步探测任务中可用。
配置示例:
在控制台中,您可以在任务配置页面找到环境变量设置区域,输入变量名称和默认值。

API 参数示例:
{ "config_variables": [ {"name": "user", "value": "test_username"}, {"name": "password", "value": "test_password"}, {"name": "account_id", "value": "123", "secure": true} ] }字段说明:
name:变量名称,必须唯一且不含特殊字符。value:初始值,可以是空字符串。secure:是否为敏感信息,设为 true 时在日志中会被脱敏显示。
提取变量(Extracted Variables)
提取变量是从 HTTP 响应中动态提取的变量。它们允许您从前一步骤的结果中获取数据,并将其用于后续步骤。
变量提取方式:支持多种变量提取方式,以适应不同的响应格式和需求。
变量引用
提取的变量可在后续步骤中使用,支持两种语法:
新语法(推荐):
{{variable_name}}。老语法(兼容):
{{$.variable_name}}。
支持如下三种引用位置:
1. URL 中引用
{
"url": "https://api.example.com/users/{{user_id}}/profile"
}2. 请求头中引用
在设置请求头时,您可以在值中使用变量:
{
"option": {
"request_headers": [
{
"name": "Authorization",
"value": "Bearer {{access_token}}"
}
]
}
}3. 请求体中引用
在构建请求体时,您可以在 JSON 或其他格式的内容中使用变量:
{
"option": {
"http_method": "POST",
"request_body": "{\"userId\": \"{{user_id}}\", \"action\": \"update\"}"
}
}完整使用示例
场景:用户登录 → 获取信息 → 更新资料
以下是一个完整的多步探测配置示例,演示了一个典型的用户登录和信息更新流程:
{
"config_variables": [
{"name": "base_url", "value": "https://api.example.com"},
{"name": "username", "value": "testuser"},
{"name": "password", "value": "test123", "secure": true},
{"name": "access_token", "value": ""},
{"name": "user_id", "value": ""}
],
"steps": [
{
"step_name": "登录获取令牌",
"step_type": "http",
"url": "{{base_url}}/auth/login",
"option": "{\"http_method\":\"POST\",\"request_body\":\"{\\\"username\\\":\\\"{{username}}\\\",\\\"password\\\":\\\"{{password}}\\\"}\",\"request_headers\":[{\"name\":\"Content-Type\",\"value\":\"application/json\"}]}",
"extracted_variables": [
{
"name": "access_token",
"parser": {
"parser_type": "json_path",
"value": "$.token"
},
"extracted_type": "http_body"
},
{
"name": "user_id",
"parser": {
"parser_type": "json_path",
"value": "$.userId"
},
"extracted_type": "http_body"
}
]
},
{
"step_name": "获取用户信息",
"step_type": "http",
"url": "{{base_url}}/users/{{user_id}}",
"option": "{\"http_method\":\"GET\",\"request_headers\":[{\"name\":\"Authorization\",\"value\":\"Bearer {{access_token}}\"}]}",
"extracted_variables": [
{
"name": "email",
"parser": {
"parser_type": "json_path",
"value": "$.email"
},
"extracted_type": "http_body"
}
]
},
{
"step_name": "更新用户资料",
"step_type": "http",
"url": "{{base_url}}/users/{{user_id}}/profile",
"option": "{\"http_method\":\"PUT\",\"request_body\":\"{\\\"email\\\":\\\"{{email}}\\\",\\\"verified\\\":true}\",\"request_headers\":[{\"name\":\"Authorization\",\"value\":\"Bearer {{access_token}}\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"}]}"
}
]
}这个示例展示了如何:
使用配置变量设置基础信息。
在第一步中使用用户名密码登录并提取令牌和用户ID。
在第二步中使用提取的用户ID获取信息,并进一步提取邮箱地址。
在第三步中使用前面提取的所有信息更新用户资料。
最佳实践
1. 变量命名规范
使用有意义的名称:例如使用
user_id而非简单的id。避免使用特殊字符和空格。
采用下划线命名法:如
access_token、user_account_id。
2. 敏感信息保护
对于包含敏感信息的变量,务必设置 secure 属性为 true:
{
"name": "api_secret",
"value": "your-secret-key",
"secure": true
}这样可以确保敏感信息在日志中被脱敏显示。
3. 设置默认值
为避免变量未提取成功导致任务失败,建议为关键变量设置合理的默认值。
4. 变量作用域
变量在定义后的所有后续步骤中可用。
同名变量会被后续提取的值覆盖。
重要提示:当前步骤的断言无法引用当前步骤提取的变量(断言先于提取执行)。
5. 提取失败处理
如果某个变量的提取不是必须的,您可以设置该步骤允许失败:
{
"allow_failure": true
}这可以防止因非关键变量提取失败而导致整个任务中断。
常见问题
Q1:变量未提取到值怎么办?
检查以下几点:
确认 JSONPath 路径是否正确,特别是嵌套层级和字段名。
验证响应内容格式是否符合预期,可通过调试模式查看原始响应。
检查正则表达式是否包含正确的捕获组。
确保响应头字段名称拼写正确(大小写敏感)。
Q2:如何在 URL 查询参数中使用变量?
直接在 URL 中拼接变量:
{
"url": "https://api.example.com/search?keyword={{keyword}}&page={{page_num}}&category={{category}}"
}Q3:变量提取后为什么在下一步中不可用?
检查以下情况:
确认提取变量的步骤已成功执行。
检查变量名称是否拼写正确。
验证变量是否在同一步骤中被提取(如果是,则在该步骤的断言中不可用)。
查看是否有同名变量被后续步骤覆盖。



