通过Pipeline Assembler组装测试流水线(测试管道)

Pipeline Assembler 是 Testany 的可视化流水线编排器。你可以在画布上添加 case、连接执行依赖、配置 whenPassed / whenFailed、标记 expect: fail,也可以切换到 YAML View 直接编辑底层 Pipeline YAML。

📝

对于所有新建 Pipeline,推荐使用 kind: rule/v1.3rule/v1.3 支持 case 级并行调度;rule/v1.2 仅用于兼容历史 Pipeline,不支持 case 级并行执行。

开始之前

请先确认以下准备工作已经完成:

  1. 要编入 Pipeline 的 case 已经注册到 Testany 的 Test Case Library
  2. 你已经知道这些 case 的执行关系:哪些可以先跑,哪些必须等待上游 case 通过或失败后再跑。
  3. 如果要配置 relay,上游 case 已声明 Relay-Out 输出变量,下游 case 已声明对应的 Relay-In 输入环境变量。

打开 Pipeline Assembler

新建 Pipeline

  1. 在顶部选择目标 Workspace
  2. 进入左侧导航的 Pipelines 页面。
  3. 点击右上角的 Assemble pipeline。
  4. 填写 Name 和可选 Description,然后点击 Submit。
  5. 系统会创建 Pipeline 并进入 Pipeline 详情页。
  6. 在 Flow Diagram 区域点击 Open Pipeline Assembler 图标,进入可编辑的 Pipeline Assembler。

下图展示的是 Pipeline 详情页中的 Flow Diagram 区域。红框标出 Open Pipeline Assembler 图标。图里的 case key 只是示例;实际编排时请使用你自己 Workspace 中的 case。

Pipeline 详情页中的 Flow Diagram 和 Open Pipeline Assembler 图标

编辑已有 Pipeline

  1. 在 Pipelines 列表中打开目标 Pipeline。
  2. 在详情页的 Flow Diagram 区域查看当前编排图。
  3. 点击 Flow Diagram 右上角的 Open Pipeline Assembler 图标。
ℹ️

Pipeline 详情页默认展示只读 Flow Diagram。只有进入 Pipeline Assembler 后,才能修改 case、依赖、relay 或 YAML。

认识编辑界面

Pipeline Assembler 由下图编号标出的区域和控件组成:

  1. Test Case Library:搜索 case,并将 case 添加到当前 Pipeline。
  2. Canvas View 区域:通过节点和连线可视化编辑执行依赖。
  3. Properties Panel:查看或编辑当前选中的节点、边、Expect Fail、Relay-In 和 Relay-Out。
  4. Canvas View 按钮:回到可视化画布。
  5. YAML View 按钮:直接编辑 YAML。
  6. Reset Layout 按钮:重新整理画布布局。
  7. Legend 按钮:查看节点和边的含义。
  8. Save 按钮:校验并保存当前 Pipeline 定义。

Pipeline Assembler 画布总览,包含 Test Case Library、Canvas 和 Properties Panel

在 Canvas View 编排 Pipeline

添加 case

在左侧 Test Case Library 中搜索 case name 或 case key,然后点击 Add to Pipeline。被添加的 case 会成为画布上的一个节点。

下图中,1 标出搜索框,2 标出 Add to Pipeline 按钮:

在 Test Case Library 中搜索 case 并准备添加到 Pipeline

如果某个 case 已经在当前 Pipeline 中,添加操作会变成禁用状态,不能重复添加。同一个 Pipeline 中每个 run case key 必须唯一。

添加成功或 case 已存在时,添加按钮会变成禁用状态,避免重复编入同一个 Pipeline。红框标出这个禁用状态:

case 添加后添加按钮变为禁用状态

创建执行依赖

在画布中,从上游 case 节点右侧连接点拖出连接线,连到下游 case 节点左侧连接点。新建连线默认表示 whenPassed,也就是上游 case 向 Pipeline 报告 Passed 后,下游 case 才会被调度。

选择一条边后,可以在右侧 Properties Panel 中查看:

  1. Edge Type
  2. Source
  3. Target

下面的右侧面板展示了一条已选中的 whenPassed 边:它从 093710E4 指向 E18ADBB0。红框标出 Switch to WhenFailed 按钮。

选中 whenPassed 边后的 Edge Properties 面板

如果需要把条件从 whenPassed 改为 whenFailed,点击 Switch to 按钮切换边类型。

切换后的边会在 Edge Type 中显示 WhenFailed,并提供反向切换按钮。下图中,1 标出已经切换后的 Edge Type,2 标出 Switch to WhenPassed 按钮:

选中 whenFailed 边后的 Edge Properties 面板

⚠️

一个 case 节点最多只能有一个执行依赖入边。也就是说,一个下游 case 只能由一个 whenPassedwhenFailed 条件直接触发。系统也会阻止自环和循环依赖。

编排 fan-out 并行分支

rule/v1.3 中,fan-out 没有单独的 YAML 字段。它的 YAML 结构是:多个下游 case 的 whenPassedwhenFailed 都引用同一个上游 case,并使用相同的触发条件。

在 Canvas View 中,你可以从同一个上游节点分别连到多个下游节点。红框标出同一个上游 case 发出的三条 whenPassed 连线:

一个上游 case 连接到三个 whenPassed 下游 case 的 fan-out 画布

Plain Text
A
├─ whenPassed -> B
├─ whenPassed -> C
└─ whenPassed -> D

对应 YAML 是:

YAML
kind: rule/v1.3
spec:
  rules:
    - run: A1B2C3D4
    - run: B1B2C3D4
      whenPassed: A1B2C3D4
    - run: C1B2C3D4
      whenPassed: A1B2C3D4
    - run: D1B2C3D4
      whenPassed: A1B2C3D4

A1B2C3D4 通过后,B1B2C3D4C1B2C3D4D1B2C3D4 会在语义上同时 ready。实际是否同时启动,取决于当前 Workspace 的可用并发槽位;如果槽位不足,平台会排队补位。

没有入边的 root case 在 rule/v1.3 下也可以并行调度:

YAML
kind: rule/v1.3
spec:
  rules:
    - run: A1B2C3D4
    - run: B1B2C3D4
    - run: C1B2C3D4

标记 Expect Fail

选择一个 case 节点,在右侧 Properties Panel 中打开 Expect Fail。红框标出 Expect Fail 控件。

在节点属性面板中勾选 Expect Fail

被标记为 Expect Fail 的 case 会写成:

YAML
- run: B1B2C3D4
  whenPassed: A1B2C3D4
  expect: fail

expect: fail 表示该 case 即使实际执行失败,也会向 Pipeline 报告 Passed。因此,如果后续 case 依赖它继续执行,应使用 whenPassed,不要使用 whenFailed

配置 relay

Relay 用于把上游 case 运行时产生的变量传给下游 case。

准备 relay case

配置 relay 前,需要先准备好 case 的环境变量:

  • 上游 case 必须有 Output Variables,也就是 Relay-Out 变量。
  • 下游 case 必须有 Input Variables,也就是 type: env 的输入环境变量。
  • 变量名称和测试脚本里的读写逻辑应保持一致。

更多 case 侧配置请参考 Managing Test Case with Relay CaseUnderstanding Output Relay

在 Pipeline Assembler 中配置 relay

  1. 在画布上选择提供数据的上游 case 节点,确认它已经声明 Output Variables (Relay-Out)。
  2. 在画布上选择消费数据的下游 case 节点。
  3. 在右侧 Properties Panel 找到 Input Variables (Relay-In)。
  4. 点击目标输入变量旁边的配置图标,或展开目标输入变量条目。
  5. 在 relay 表单中选择 Select Relay-Out Case。
  6. 选择 Select Relay-Out Variable。
  7. 如需要在日志中可见,勾选 Non-Secret Variable (nonSecret)。
  8. 点击 Apply。

下图演示的是上游 case 节点中 Output Variables (Relay-Out) 列表的位置。1 标出 Relay-Out 变量列表;实际配置时请选择你要提供运行时变量的上游 case。

上游节点属性面板中的 Relay-Out 输出变量

然后选中下游 case,展开目标 Input Variables (Relay-In) 条目。如果条目尚未展开,点击输入变量旁边的配置图标即可打开同一个表单。下图中,1 标出 Relay-In 变量卡片,2 标出展开/收起控件,3 标出 Select Relay-Out Case,4 标出 Select Relay-Out Variable,5 标出 Non-Secret Variable,6 标出 Apply:

Relay 表单中选择上游 case、变量和 Non-Secret

保存后,YAML 中会生成类似配置:

YAML
- run: B1B2C3D4
  whenPassed: A1B2C3D4
  relay:
    - key: ACCESS_TOKEN
      refKey: A1B2C3D4/ACCESS_TOKEN
      nonSecret: true
⚠️

不能跨 whenFailed 依赖配置 relay。如果一条边已经有 relay 引用,系统会阻止你把这条边切换成 whenFailed。如果必须改成失败分支,请先清除 relay 引用。

💡

如果下游 case 消费上游 case 的 relay 输出,建议在画布上保留清晰的 whenPassed 执行依赖,让执行顺序和数据依赖保持一致。

使用 YAML View

当你已经知道完整规则结构,或者需要一次性调整多个依赖时,可以切换到 YAML View。

YAML View 会持久化以下字段:

  • run
  • whenPassed
  • whenFailed
  • expect: fail
  • relay

切换视图和保存时,系统会解析 YAML、加载相关 case、检查图结构,并通过后端校验当前定义。保存失败时,请根据错误信息修正 YAML 或回到 Canvas View 调整。

YAML View 展示的是和画布等价的 Pipeline 定义。下图中,1 标出 schema version,2 标出带 relay 的预期失败分支,3 标出另一个带 relay 的 fan-out 兄弟分支,4 标出 BF18144BwhenFailed 失败分支。

Pipeline Assembler YAML View 中的 rule/v1.3 定义

📝

新建或翻新 Pipeline 时,优先使用 kind: rule/v1.3。如果你打开的是历史 rule/v1.2 Pipeline,请确认是否只是维护旧行为;不要把 rule/v1.2 当作新 Pipeline 的默认版本。

复杂 v1.3 示例

下面的示例包含一个 setup case、三个 whenPassed fan-out 下游分支(其中一个设置 expect: fail)、relay,以及一个只有在某个分支失败时才执行whenFailed 分支。

YAML
kind: rule/v1.3
spec:
  rules:
    - run: '093710E4'
    - run: 'E18ADBB0'
      whenPassed: '093710E4'
      expect: fail
      relay:
        - key: URL
          refKey: 093710E4/BASE_URL
          nonSecret: true
    - run: 'AA923134'
      whenPassed: '093710E4'
      relay:
        - key: URL
          refKey: 093710E4/BASE_URL
          nonSecret: true
    - run: 'BD3C03F5'
      whenPassed: '093710E4'
    - run: 'BF18144B'
      whenFailed: 'AA923134'

这个示例在 Canvas View 中的核心结构是 093710E4 通过后扇出到三个同一波次的下游 case,并额外保留一条 whenFailed 分支:

复杂 rule/v1.3 示例的 Canvas View fan-out 结构

这个 Pipeline 的执行语义是:

  1. 093710E4 先执行。
  2. 093710E4 通过后,E18ADBB0AA923134BD3C03F5 变为同一 ready 波次,可按 rule/v1.3 并行调度。
  3. E18ADBB0 设置了 expect: fail,即使实际失败,也会作为预期失败处理,不会导致 Pipeline 失败。
  4. AA923134 使用 093710E4 输出的 BASE_URL
  5. 只有 AA923134 向 Pipeline 报告 Failed、Aborted 或 Timeout 时,BF18144B 才会执行;如果 AA923134 通过,BF18144B 会被跳过。

保存和验证

编辑完成后点击 Save。系统会:

  1. 从 Canvas View 生成 YAML,或读取 YAML View 当前内容。
  2. 校验 YAML 是否可解析。
  3. 校验 case key、依赖关系、relay 引用和循环依赖。
  4. 调用后端验证 Pipeline YAML。
  5. 保存 Pipeline 定义。

保存后,你可以在 Pipeline 详情页查看 Flow Diagram 和 Test Case List。触发一次执行后,在 Execution Detail 中确认:

  • Pipeline 总状态是否符合预期。
  • expect: fail 的 case 是否显示为预期失败或等价成功状态。
  • 未满足条件的 whenFailed 分支是否被跳过。
  • rule/v1.3 的 fan-out 分支是否在可用并发范围内并行启动。

常见问题

问题处理方式
找不到要添加的 case确认 case 已注册,并且你在正确的 Workspace 中搜索。
不能连接两个节点检查是否存在自环、循环依赖,或目标节点是否已经有一条执行依赖入边。
不能切换为 whenFailed如果这条依赖上存在 relay 引用,请先清除 relay。
relay 表单没有可选变量确认上游 case 已声明 Relay-Out,且下游 case 已声明 Input Variables。
保存失败打开错误信息,检查 YAML 结构、case key、重复 run、relay refKeywhenPassed / whenFailed 互斥规则。
fan-out 没有同时启动确认 Pipeline 是 rule/v1.3,并检查 Workspace 当前并发槽位是否足够。

还有疑问?

我们的团队随时为您服务。欢迎联系我们,我们会尽快回复。