---
title: "使用输出中继让测试更稳健和灵活"
language: "zh"
url: "https://docs.testany.io/zh/docs/build-your-tests-more-robust-flexible-with-output-/"
markdown_url: "https://docs.testany.io/zh/docs/build-your-tests-more-robust-flexible-with-output-.md"
translation: "https://docs.testany.io/en/docs/build-your-tests-more-robust-flexible-with-output-.md"
last_updated: "2026-03-26T15:39:24+08:00"
---

# 使用输出中继让测试更稳健和灵活

## 概述

[视频](https://customer-en3hmhs3okg5hi37.cloudflarestream.com/484425b413c0fa7952c939a6205b6994/watch)


> **提示**
>
> **初次接触 Output Relay？** 如果你还不熟悉 Output Relay 的概念，建议先阅读[《理解 Output Relay》](https://docs.testany.io/zh/docs/understanding-output-relay.md)，其中包含可视化图解和核心术语说明。


本指南聚焦于 Output Relay 的**实际应用**和最佳实践。


> **备注**
>
> 对于所有新建且包含 Output Relay 的 Pipeline，推荐使用 `kind: rule/v1.3`。`rule/v1.2` 继续兼容历史 Pipeline，但不具备 case 级并行执行能力。


## 输出中继的典型用例

一个典型的用例是多个API请求依赖的测试。例如：

- **用例A**：为用户获取系统访问令牌。
- **用例B**：使用用例A中获得的令牌调用“获取用户列表”服务，并从列表中获取用户ID。
- **用例C**：使用用例A中的令牌和用例B中的用户ID调用“用户详情服务”以获取用户的位置信息。

在这个场景中，用例B依赖于用例A的输出，而用例C则依赖于用例A和用例B的输出。输出中继帮助保持每个测试用例的独立性，同时允许实现这些依赖关系，避免编写复杂的代码逻辑。

## 关键概念

关于 Output Relay 的完整概念说明，包括**输出用例（Output Case）**、**输入用例（Input Case）**、**Relay 变量**以及数据流向图解，请参阅[《理解 Output Relay》](https://docs.testany.io/zh/docs/understanding-output-relay.md)。


> **警告**
>
> **核心约束：** 你只能从**通过**的测试用例获取 relay 数据。如果 Output Case 失败，其 relay 数据不可用。详见[《约束和限制》](https://docs.testany.io/zh/docs/understanding-output-relay.md#约束和限制)。


## 如何使用输出中继

### 编写输出用例和输入用例

要使用输出中继，首先必须定义输出用例和输入用例。有关如何编写输出用例和输入用例的更多详细信息，请参考[《通过中继管理测试用例》](https://docs.testany.io/zh/docs/managing-test-case-with-relay-case.md)。

### 配置包含输出用例和输入用例的测试管道

编写完输出用例和输入用例后，下一步是将它们正确排列在同一个测试管道中。有关如何使用输出中继配置管道的详细步骤，请参考[《测试管道编写指南及示例》](https://docs.testany.io/zh/docs/test-pipeline-writing-guideline-and-samples.md)。

### 执行逻辑与标准管道

启用了输出中继的测试管道与标准管道在执行逻辑上的关键区别，是测试用例之间存在显式的数据依赖关系。在 `rule/v1.3` 中，没有显式依赖的同层 case 可以并行调度；但只要某个 case 依赖 relay 输出，平台就要求提供 relay 的测试脚本先稳定完成，再启动消费 relay 的测试脚本。因此，Output Relay 不是“强制全部串行”，而是“在并行能力下仍保持数据依赖正确”。

### 常见的错误配置与系统响应

一些常见的错误配置示例如下：

- **错误配置示例1**：用例B设置为只有在用例A失败时才执行。系统将拒绝此配置。
- **错误配置示例2**：用例B依赖于用例A的输出，但用例A未声明任何输出。在这种情况下，系统不会拒绝配置，但在管道详情页面上，用户不会看到任何标记为“中继输出用例”的测试用例。此提示会提醒用户检查依赖设置，确保其符合预期。

## 常见问题及最佳实践

### 输出中继的最佳使用场景

输出中继功能最适合以下场景：

- 多步骤功能测试，其中每个步骤都依赖于前一个步骤的输出。
- API调用链，使用中继数据减少冗余。
- 集成测试，需要重复使用前一步骤中的凭据或其他动态数据。

### 常见错误及故障排除方法

以下是一些常见错误及其排除建议：

- **未声明输出变量**：如果输出用例未正确声明其输出变量，系统将使用输入用例的初始值。如果测试结果不符合预期，请检查依赖配置并确保正确声明了输出和输入变量。
- **不合逻辑的测试配置**：如果输入用例设置为在输出用例失败时执行，系统将拒绝此配置。此情况可能发生在用户错误设置执行顺序时。请调整管道逻辑，确保测试用例执行顺序符合预期的依赖关系。

### 编写高效的中继依赖测试用例

为了充分利用输出中继功能，用户应遵循以下最佳实践：

- 明确区分管道中的执行逻辑（如`whenpassed`、`whenfailed`）与输出中继引入的依赖关系（如`ref`），避免管道配置中的混淆。
- 在 `rule/v1.3` 中，如果某个下游 case 依赖 relay 输出，请避免把它放在可能与提供 relay 的测试脚本同时 ready 的 sibling 关系中。
- 保持测试用例的原子性，确保每个测试用例仅执行单一、独立的功能。
- 明确声明输出和输入变量，确保依赖关系透明。
- 避免创建过于复杂的依赖链，保持测试用例的简洁和可维护性。

## 本页术语

- [执行 (Execution)](https://docs.testany.io/zh/docs/glossary.md#execution)
- [用户 (User)](https://docs.testany.io/zh/docs/glossary.md#user)
- [输出中继 (Output Relay)](https://docs.testany.io/zh/docs/glossary.md#output-relay)
- [测试用例 (Test Case)](https://docs.testany.io/zh/docs/glossary.md#test-case)
- [测试脚本 (Test Script)](https://docs.testany.io/zh/docs/glossary.md#test-script)
