E2E CI 测试#

本文档说明如何通过评论命令针对 PR 代码触发特定的 E2E 测试,而无需运行完整的 E2E 测试套件。

背景#

当 PR 同时具有 readyready-for-test 标签时,E2E-Full 工作流(pr_test_full.yaml)通常会运行完整的 E2E 测试套件。这会消耗大量的 CI 资源和时间。

授权用户可以通过在 PR 上发布 /e2e 评论,然后添加 ready 标签,仅触发他们关心的特定测试文件。

如何触发#

1.发布评论#

首先,在 PR 上发布一条评论,指定要运行的测试路径:

/e2e [test-path-1] [test-path-2] ...
  • 每个路径必须是相对于仓库根目录的有效 pytest 路径。

  • 可以在单条评论中列出多个路径,使用空格分隔。

  • 可以使用 :: 表示法来指定特定的测试用例。

评论格式

效果

/e2e tests/e2e/singlecard/test_foo.py

在 singlecard 上运行一个测试文件

/e2e tests/e2e/multicard/2-cards/test_bar.py

在 2 卡上运行一个测试文件

/e2e path1 path2 path3

运行多个文件,按路径模式路由

/e2e tests/e2e/singlecard/test_foo.py::test_case

运行特定的测试用例

2.添加标签#

发布评论后,为 PR 添加 ready 标签。添加标签才是实际触发工作流的操作——此时工作流会读取现有评论以找到 /e2e 命令。

备注

只有仓库的贡献者(Triage 角色)和维护者(Write 角色)可以添加标签。如果您没有此权限,请让维护者为您添加标签。您可以通过查看 CODEOWNERS 文件来找到维护者和贡献者列表。

重要

评论必须在添加标签之前发布。如果您先添加标签,工作流将找不到 /e2e 评论,也不会触发任何单测试运行。

备注

此外,只有 PR 作者或具有仓库写入或管理员权限的合作者才能通过评论触发测试。工作流会在继续之前验证评论者的权限。

3.等待结果#

GitHub Actions 将触发 E2E-Full 工作流。只有与提供的测试路径匹配的硬件任务会运行,从而节省 CI 资源。

路径路由规则#

工作流会根据路径模式自动将每个测试路径路由到正确的硬件 runner:

路径模式

硬件

Runner

路径中包含 multicard/2-cards

2 卡 A3 NPU

linux-aarch64-a3-2

路径中包含 multicard/4-cards

4 卡 A3 NPU

linux-aarch64-a3-4

路径中包含 310p

Ascend 310P

linux-aarch64-310p-*

所有其他路径

单卡 A2 NPU

linux-aarch64-a2b3-1

当单条评论中列出了来自多个类别的路径时,每个类别的测试会在其对应的硬件上并行运行。

测试路径参考#

tests/e2e/ 目录按硬件类别组织:

tests/e2e/
├── singlecard/          # Single A2 card tests → singlecard runner
├── multicard/
│   ├── 2-cards/         # 2-card tests → 2-card runner
│   └── 4-cards/         # 4-card tests → 4-card runner
└── 310p/                # Ascend 310P tests → 310P runner
    ├── singlecard/
    └── multicard/

与完整 E2E 套件的对比#

方面

完整 E2E 套件

按测试评论触发

触发条件

ready + ready-for-test 标签

/e2e 评论 + ready 标签

范围

所有 E2E 测试

仅指定的测试路径

可触发人员

任何可以添加标签的人

PR 作者或写入/管理员合作者

使用场景

合入前验证

特定测试的迭代调试

示例#

运行单个 singlecard 测试:

/e2e tests/e2e/singlecard/test_offline_inference.py

运行 2 卡测试:

/e2e tests/e2e/multicard/2-cards/test_data_parallel.py

在一条评论中跨多个硬件类别运行测试:

/e2e tests/e2e/singlecard/test_offline_inference.py tests/e2e/multicard/2-cards/test_data_parallel.py

修复问题后重新触发:只需推送一个新的提交。synchronize 事件会重新运行工作流并自动获取现有的 /e2e 评论——无需发布新评论。

故障排查#

添加标签后工作流未启动。

  • 确保 /e2e 评论是在添加标签之前发布的。如果先添加了标签,请移除它,然后在发布评论后重新添加。

  • 检查评论是否以 /e2e 精确开头,后跟至少一个路径,斜杠前没有前导空格或多余字符。

  • 修复问题后重新触发,只需推送一个新的提交——工作流会自动重用现有的 /e2e 评论。

测试运行在了错误的硬件上。

  • 检查路径是否包含预期的目录片段(2-cards4-cards310p)。不匹配这些模式的路径默认会被路由到 singlecard runner。

parse-comment 任务因权限错误被跳过。

  • 只有 PR 作者或具有写入/管理员权限的协作者可以使用评论触发功能。请让维护者代为发布 /e2e 评论。