Apidog Docs
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
  1. 测试场景
  • Apidog 学习中心
  • 入门
    • Apidog 简介
    • Apidog 中的基本概念
    • 导航 Apidog
    • 快速开始
      • 概述
      • 创建端点
      • 发送请求
      • 添加断言
      • 创建测试场景
      • 共享 API 文档
      • 探索更多
    • 迁移到 Apidog
      • 概述
      • 手动导入
      • 定时导入(绑定数据源)
      • 导入选项
      • 导出数据
      • 导入自
        • 从 Postman 导入
        • 导入 OpenAPI 规范
        • 导入 cURL
        • 导入 Markdown
        • 从 Insomnia 导入
        • 从 apiDoc 导入
        • 导入 .har 文件
        • 导入 WSDL
  • Mock API 数据
    • 概述
    • Smart Mock
    • 自定义模拟
    • 模拟优先级顺序
    • 模拟脚本
    • 云端模拟
    • 自托管 Runner 模拟
    • 模拟语言(区域设置)
  • 账号与偏好设置
    • 账户设置
    • 生成 OpenAPI 访问令牌
    • 通知
    • 语言设置
    • 快捷键
    • 网络代理配置
    • 备份数据
    • 更新 Apidog
    • 删除账户
    • 实验性功能
  • 发送请求
    • 概述
    • SSE 调试
    • MCP 客户端
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP 或 WebService
    • GraphQL
    • gRPC
    • 使用请求代理 Agent 进行调试
    • 创建请求
      • 请求历史
      • 请求基础
      • 参数和主体
      • 请求头部
      • 请求设置
      • 调试请求
      • 将请求保存为端点
      • HTTP/2
    • 身份验证与授权
      • 概述
      • CA 和客户端证书
      • 授权类型
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Hawk 身份验证
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • 响应和 Cookie
      • 查看 API 响应
      • 管理 Cookie
      • 概述
  • 开发和调试 API
    • 概述
    • 生成请求
    • 发送请求
    • 调试用例
    • 测试用例
    • 动态值
    • 验证响应
    • Design-First vs Request-First
    • 生成代码
    • 环境与变量
      • 概览
      • 使用变量
      • 环境管理
    • Vault 密钥
      • 概述
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • 动态值模块
      • Airline
      • 动物
      • 颜色
      • 商务
      • Company
      • 数据库
      • 数据类型
      • 日期
      • Finance
      • 食物
      • Git
      • Hacker
      • Helpers
      • 图像
      • Internet
      • 位置
      • Lorem
      • 音乐
      • 数字
      • Person
      • 电话
      • 科学
      • String
      • System
      • Vehicle
      • Word
    • 前置和后置处理器
      • 概述
      • 断言
      • 提取变量
      • 等待
      • 安全
      • 数据库操作
        • 概述
        • MySQL
        • MongoDB
        • Redis
        • Oracle 客户端
      • 使用脚本
        • 概述
        • 预处理器脚本
        • 后处理器脚本
        • 公共脚本
        • Postman 脚本参考
        • 调用其他编程语言
        • 使用 JS 库
        • 可视化响应
        • 脚本示例
          • 断言脚本
          • 使用变量
          • 修改请求
          • 其他示例
    • API 调试
      • AI Agent Debugger
      • A2A 调试器
  • 设计 API
    • 概述
    • 创建新的 API 项目
    • 端点基础
    • API 设计指南
    • 模块
    • 配置多个请求主体示例
    • 组件
    • 通用字段
    • 全局参数
    • 端点变更历史
    • 评论
    • 批量端点管理
    • 自定义协议 API
    • Spec-first 模式(Beta)
    • 安全方案
      • 概述
      • 创建安全方案
      • 使用安全方案
      • 在线文档中的安全方案
    • 高级功能
      • 自定义端点字段
      • 关联的测试场景
      • 端点状态
      • 参数列表的外观
      • 端点唯一标识
    • Schemas
      • 概述
      • 创建新 Schema
      • 构建 Schema
      • 从 JSON 等生成 Schema
      • oneOf, allOf, anyOf
      • 使用 Discriminator
  • Apidog Europe
    • Apidog Europe
  • API 测试
    • 概述
    • 测试场景
      • 创建测试场景
      • 在请求之间传递数据
      • 流程控制条件
      • 从端点和端点用例同步数据
      • 从其他项目导入端点和端点用例
      • 导出测试场景
    • 测试报告
      • 测试报告
    • 运行测试场景
      • 运行测试场景
      • 批量运行测试场景
      • 数据驱动测试
      • 共享测试数据
      • 定时任务
      • 管理来自其他项目的 API 运行环境
    • 测试套件
      • 概述
      • 创建测试套件
      • 编排测试套件
      • 本地运行测试套件
      • 通过 CLI 运行测试套件
      • 定时任务
    • 测试 API
      • 集成测试
      • 性能测试
      • 端到端测试
      • 回归测试
      • 契约测试
    • Apidog CLI
      • 概述
      • 安装和运行 Apidog CLI
      • Apidog CLI 选项
    • CI/CD
      • 概述
      • 与 Github Actions 集成
      • 与 Gitlab 集成
      • 与 Jenkins 集成
      • 通过 Git Commit 触发测试
  • 发布 API 文档
    • 概述
    • 支持的 API 技术
    • 快速分享
    • 查看 API 文档
    • Markdown 文档
    • 发布文档站点
    • 自定义登录页面
    • 自定义布局
    • 自定义 CSS、JavaScript、HTML
    • 自定义域名
    • AI 功能
    • SEO 设置
    • 高级设置
      • 文档搜索
      • CORS 代理
      • 集成 Google Analytics
      • 文件夹树设置
      • 可见性设置
      • 在文档 URL 中嵌入值
    • API 版本
      • 概述
      • 创建 API 版本
      • 发布 API 版本
      • 共享带有 API 版本的端点
  • 分支
    • 概述
    • 创建 Sprint 分支
    • 在分支中测试 API
    • 在分支中设计 API
    • 合并 Sprint 分支
    • 管理 Sprint 分支
    • AI Branch(Beta)
  • AI 功能
    • 概述
    • 启用 AI 功能
    • 生成测试用例
    • 使用 AI 修改 Schema
    • 端点合规性检查
    • API 文档完整性检查
    • AI 驱动的字段命名
    • 常见问题
  • Apidog MCP 服务器
    • 概述
    • 将 Apidog 项目连接到 AI
    • 将已发布的文档连接到 AI
    • 将 OpenAPI 文件连接到 AI
  • 最佳实践
    • 处理 API 签名
    • 访问受 OAuth 2.0 保护的 API
    • 协作工作流
    • 管理身份验证状态
  • 离线空间
    • 概述
  • 管理
    • 管理项目
      • 管理项目
      • 通知设置
      • 管理项目成员
      • 项目资源
        • 数据库连接
        • Git 连接
    • 管理团队
      • 管理团队
      • 管理团队成员
      • 团队活动
      • 团队角色与权限
      • 团队资源
        • General Runner
        • 团队变量
        • 请求代理 Agent
      • 实时协作
        • 团队协作
    • 入门检查清单
      • 基本概念
      • 入门指南
    • 管理组织
      • 管理组织
      • 组织角色与权限
      • 套餐管理
        • 组织中的账单管理员
      • 单点登录 (SSO)
        • SSO 概述
        • 配置 Microsoft Entra ID
        • 配置 Okta
        • 为组织配置 SSO
        • 管理用户账户
        • 将组映射到团队
      • SCIM 配置
        • SCIM 预配简介
        • Microsoft Entra ID
        • Okta
      • 组织资源
        • 自托管 Runner
  • 计费
    • 概述
    • 积分
    • 升级您的套餐
    • 替代支付方式
    • 管理订阅
    • 将付费团队移入组织
  • 附加组件
    • API Hub
    • Apidog Intellij IDEA 插件
    • 浏览器扩展
      • Chrome
      • Microsoft Edge
    • 请求代理
      • Web 中的请求代理
      • 共享文档中的请求代理
      • 客户端中的请求代理
  • 数据与安全
    • 数据存储和安全
    • 用户数据隐私与安全
    • 请求路由与数据安全
  • 参考
    • API 设计优先方法
    • Apidog OpenAPI 规范扩展
    • JSONPath
    • XPath
    • 正则表达式
    • JSON Schema
    • CSV 文件格式
    • 安装 Java 环境
    • Runner 部署环境
    • Apidog Markdown 语法
    • Apidog Swagger 扩展
      • 概述
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Apidog JSON Schema 扩展
      • 概述
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • 支持中心
  1. 测试场景

流程控制条件

你可以向测试场景中添加流程控制条件(循环、条件、等待、分组等)。这可以提升更复杂测试场景/流程配置的利用率,最终通过自动化测试功能解决复杂场景的测试难题。
流程控制条件

For 循环#

当你需要连续多次发送单个请求时,使用 for 循环是一种高效的方法。以下是在 Apidog 测试场景中有效使用 for 循环的方法:
设置迭代次数:决定循环应运行多少次。这可以是固定数字,也可以是 {{variable}}。
添加请求:在 for 循环中,你可以包含一个或多个请求,也可以包含其他循环或条件分支。这种灵活性允许构建复杂的测试场景,在其中需要按顺序测试多个操作。
Break If 条件:你可以向 for 循环添加 Break if 条件。如果条件满足,循环将立即终止。你可以拖拽并调整 Break if 的位置,甚至添加多个 Break if 条件来处理不同场景。
On Error 处理:通过向循环添加 On Error 条件来管理错误。如果发生错误,将触发指定操作:
忽略:循环继续执行下一个请求。
继续:跳过当前循环周期中的剩余请求,并进入下一次迭代。
中断执行:停止循环,并继续执行循环外的后续请求。
结束执行:完全停止整个测试场景。
On Error 条件固定在循环开头,无法移动。

在请求中使用循环索引#

当前循环索引可以在请求中用作局部变量,以动态调整参数或请求主体。使用方法如下:
1
添加一个 for 循环,并在循环中包含一个请求。
2
点击请求参数中的魔法棒图标 🪄,并选择“获取前置步骤数据”。
“获取前置步骤数据”功能仅在“测试”模块中可用,在“APIs”模块中不可用。
使用“获取前置步骤数据”时,只有在整个测试场景一起运行时才能获取该值;运行单个步骤时无法访问。
3
选择循环选项,通常标记为“循环 n 次”。
4
选择“当前循环索引”。
5
你将获得类似 {{$.5.index}} 的动态变量。点击“插入”,运行时它会被替换为当前循环的索引,例如 0 或 5。
循环索引始终从 0 开始。

ForEach 循环#

当你有一个包含多个元素的数组(特定内容列表或从前置步骤获取的列表),并且需要对列表中的每一项执行相同操作时(例如,先获取产品列表,然后将列表中的每个产品加入购物车),你需要使用 ForEach 循环。
在 ForEach 循环中,循环内的操作会针对数组中的每个元素执行。
它与 For 循环的区别在于,你无需关心迭代次数;只需关注循环数组的内容。
设置循环数组:在 ForEach 循环中,你需要设置一个数组作为循环对象。你可以使用变量,也可以手动输入数组,例如 ["a","b","c"]。
添加请求:在 ForEach 循环中,你可以添加一个或多个请求,或者添加其他循环或条件分支等。
Break If 条件和 On Error 处理:你可以向 ForEach 循环添加 Break if 和 On error,与上文提到的 for 循环一致。
TIP
在 ForEach 循环的高级设置中,你还可以为 Break If 和 On Error 自定义异常处理选项。更多信息请参见判断规则。

ForEach 使用示例#

假设有两个端点:一个用于获取宠物信息列表,另一个用于获取单个宠物的详情。如果你需要获取最近添加到列表中的某只宠物的详情,可以在自动化测试中使用 ForEach 循环设置此场景。
1.
ForEach 循环外的第一步是请求宠物信息列表端点,以获取实际列表数据。通常,该接口的响应包含一个数组,其中包含多只宠物的基础信息,例如宠物 ID 和名称。
2.
设置一个 ForEach 循环,源数组为上一步响应中的宠物数组子集。
3.
在循环内,设置一个请求到“获取宠物信息”端点,并使用 ForEach 循环中的元素值填充该请求中的 ID 参数。

在请求中使用循环元素#

当前循环元素/索引可以在请求中用作局部变量,以动态调整参数或请求主体。使用方法如下:
1
添加一个 ForEach 循环,并在循环中包含一个请求。
2
点击请求参数中的 魔法棒图标,并选择“获取前置步骤数据”。
3
选择循环选项,通常标记为“循环 {{array}} 中的每个元素”。
4
选择“当前循环元素”。你可以使用 JSONPath 提取元素的属性。
5
你将获得类似 {{$.17.element}} 的动态变量。点击“插入”,运行时它会被替换为当前循环的元素,该元素是循环数组中的一个元素。
TIP
当前循环元素:系统会自动从 ForEach 循环中指定的数组提取元素,并将其存储到指定变量中。在每次迭代开始时,该变量会更新为数组中当前元素的值。如果元素是对象,你可以使用 JSONPath 提取特定子字段,例如 {{$.1.element.data.name}}。
当前循环索引:当前循环的索引存储在此变量中。它从 0 开始,并在每次后续迭代开始时递增 1,以反映当前索引。

If#

当你需要根据不同场景发送不同请求时,可以使用 If 语句添加条件分支。当指定条件满足时,将执行对应步骤;否则将跳过。更具体的详细信息,请参阅判断规则。
设置 If 语句:If 语句支持等于、不等于、包含、不包含等多种条件。条件两侧都可以使用常量和变量。
添加请求:可以在条件分支中添加多个请求,也可以添加其他循环或条件分支。
执行条件分支:如果配置中设置的条件满足,则执行测试步骤;否则跳过。
Else 语句:可以在条件分支中添加 Else 语句,用于处理 If 条件不满足的场景。

If 使用示例#

宠物店店主需要根据前一天宠物的销售状态,如果某只宠物已售出,则将其销售状态改为“已售出”。否则(else),需要查看仍在售宠物列表。
1.
点击底部的“添加步骤”按钮,并选择“条件分支”。
2.
将从 API 请求响应中获得的变量 saleStatus 输入到“If”之后的输入框中,并选择条件“等于”。最后,输入 true 作为比较值。
3.
将鼠标悬停在条件分支操作上,可以看到“ + Else”选项。点击它以添加步骤“在售宠物列表”(用于条件不满足时,即查询仍在售宠物列表)。

判断规则#

在测试场景中使用 If 语句时,你可以定义条件规则来控制测试执行。如果条件满足,对应步骤将运行;否则将跳过。同样,在 ForEach 和 For 循环的 Break If 设置中,你可以设置判断规则,以更灵活地控制执行流程。
规则描述
等于检查两个值是否相等。
不等于检查两个值是否不相等。
存在检查某个字段或变量是否存在。
不存在检查某个字段或变量是否不存在。
小于检查一个值是否小于另一个值。
小于或等于检查一个值是否小于或等于另一个值。
大于检查一个值是否大于另一个值。
大于或等于检查一个值是否大于或等于另一个值。
匹配正则表达式检查字符串是否匹配指定的正则表达式。
包含检查字符串或数组是否包含指定值。
不包含检查字符串或数组是否不包含指定值。
为空检查字段、数组或变量是否为空。
不为空检查字段、数组或变量是否不为空。
在列表中检查某个值是否属于指定列表。
不在列表中检查某个值是否不属于指定列表。
执行条件检查时(例如大于、大于或等于、等于或不等于),如果要比较的值是整数或字符串,系统会自动将字符串转换为数字以进行准确比较。例如,如果你将字符串 "18" 与数字 18 进行比较,系统会在比较前将字符串 "18" 转换为数字 18。

等于#

检查两个值是否相等。如果相等,则条件满足并执行测试步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户年龄是否等于 18。
条件示例:{{$.5.response.body.data.age}} Equals 18
实际执行效果:如果从前置步骤提取的年龄值为 18(字符串会自动转换为数字),则执行该步骤,例如显示特定信息或执行某些操作。

不等于#

检查两个值是否不相等。如果不相等,则条件满足并执行测试步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的订单状态是否不等于“Paid”。
条件示例:{{$.4.response.body.data.status}} Does not equal Paid
实际执行效果:如果从前置步骤提取的订单状态是其他值(例如“Pending”或“Shipped”),则执行该步骤。

存在#

检查某个字段或变量是否存在。如果存在,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户数据中是否存在 email 字段。
条件示例:{{$.3.response.body.data.email}} Exists
实际执行效果:如果从前置步骤提取的用户数据中存在 email 字段,则执行该步骤。

不存在#

检查某个字段或变量是否不存在。如果不存在,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户数据中是否不存在 phone 字段。
条件示例:{{$.2.response.body.data.phone}} Does not exist
实际执行效果:如果从前置步骤提取的用户数据中缺少 phone 字段,则执行该步骤。

小于#

检查一个值是否小于另一个值。如果是,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的产品库存是否小于 10。
条件示例:{{$.1.response.body.data.stock}} Less Than 10
实际执行效果:如果从前置步骤提取的库存值为 8,则条件满足并执行该步骤。

小于或等于#

检查一个值是否小于或等于另一个值。如果是,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的年龄是否小于或等于 12。
条件示例:{{$.2.response.body.data.age}} Less than or equal 12
实际执行效果:如果从前置步骤提取的年龄值为 10,则条件满足并执行该步骤。

大于#

检查一个值是否大于另一个值。如果是,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的订单金额是否大于 1000。
条件示例:{{$.1.response.body.data.amount}} Greater than 1000
实际执行效果:如果从前置步骤提取的订单金额值为 1105,则条件满足并执行该步骤。

大于或等于#

检查一个值是否大于或等于另一个值。如果是,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户积分是否大于或等于 500。
条件示例:{{$.3.response.body.data.points}} Greater than or equal 500
实际执行效果:如果从前置步骤提取的积分值为 600,则条件满足并执行该步骤。

匹配正则表达式#

检查字符串是否匹配指定的正则表达式。如果匹配,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的电子邮件格式是否正确。
条件示例:{{$.2.response.body.data.email}} Matches with Regex /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
实际执行效果:如果从前置步骤提取的电子邮件格式匹配该正则表达式(例如 test@gmail.com),则执行该步骤。
TIP
正则表达式应使用“字面量”语法编写,即模式用 / 包裹,并可在末尾追加可选修饰符(例如 g 表示全局匹配,i 表示不区分大小写)。有关编写正则表达式的更多信息,你可以参考 MDN 文档。

包含#

检查字符串或数组是否包含指定值。如果包含,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户角色列表是否包含“admin”角色。
条件示例:{{$.3.response.body.data.roles}} Contains admin
实际执行效果:如果从前置步骤提取的角色列表包含“admin”,则执行该步骤。

不包含#

检查字符串或数组是否不包含指定值。如果不包含,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户购物车是否不包含某个产品。
条件示例:{{$.4.response.body.data.cartItems}} Does not contain productId123
实际执行效果:如果从前置步骤提取的购物车数组不包含产品 productId123,则执行该步骤。

为空#

检查字段、数组或变量是否为空。如果为空,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的备注字段是否为空。
条件示例:{{$.2.response.body.data.remarks}} Is empty
实际执行效果:如果从前置步骤提取的备注字段为空,则执行该步骤。

不为空#

检查字段、数组或变量是否不为空。如果不为空,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的订单备注是否已填写。
条件示例:{{$.1.response.body.data.orderRemarks}} Is not Empty
实际执行效果:如果从前置步骤提取的订单备注不为空,则执行该步骤。

在列表中#

检查某个值是否属于指定列表。如果属于,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户选择的产品是否在推荐产品列表中。
条件示例:{{$.3.response.body.data.productId}} In List ["prod123", "prod456", "prod789"]
实际执行效果:如果从前置步骤提取的产品 ID 是“prod456”,则执行该步骤。
TIP
在 Apidog 中,输入列表时,每个元素应单独输入,并通过按 Enter 键分隔。

不在列表中#

检查某个值是否不属于指定列表。如果不属于,则条件满足并执行该步骤;否则将跳过。
示例:
场景:检查从前置步骤提取的用户输入的促销码是否不在已使用促销码列表中。
条件示例:{{$.4.response.body.data.promoCode}} Not in List ["usedCode1", "usedCode2"]
实际执行效果:如果从前置步骤提取的促销码是“newPromo”,则条件满足并执行该步骤;否则将跳过。

分组#

当测试流程中的多个步骤相互关联时,可以将它们分组在一起进行分类。通过对测试步骤进行分组,可以提升测试场景的可读性和可操作性。

等待#

当测试流程中的某个步骤需要等待一段时间后再执行时,你可以添加等待条件来解决此问题。

等待使用示例#

模拟用户查看宠物详情,并在浏览 1000ms 后更新宠物信息的浏览状态。
1.
点击底部的“添加步骤”按钮,并选择“等待”。
2.
输入要等待的时间,1000(单位为毫秒)。
当你使用测试流程控制时,测试报告不会显示 If、for 等步骤,而只会按执行顺序以线性方式列出实际执行的请求。
Modified at 2026-06-09 08:55:47
Previous
在请求之间传递数据
Next
从端点和端点用例同步数据
Built with