跳转至

E2E CI 测试

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

背景

E2E-Full 工作流(pr_test.yaml)通常在 PR 带有 ready 标签时运行完整的 E2E 测试套件。这会消耗大量的 CI 资源和时间。

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

如何触发

1. 发布评论

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

/e2e [test-path-1] [test-path-2] ...
  • 每个路径必须是相对于仓库根目录的有效 pytest 路径。
  • 可以在单条评论中列出多个路径,用空格分隔。
  • 可以使用 :: 表示法定位特定的测试用例。
注释格式 效果
/e2e tests/e2e/pull_request/one_card/test_foo.py 在 one_card 上运行一个测试文件
/e2e tests/e2e/pull_request/two_card/test_bar.py 在 two_card 上运行一个测试文件
/e2e path1 path2 path3 运行多个文件,按路径模式路由
/e2e tests/e2e/pull_request/one_card/test_foo.py::test_case 运行指定的测试用例

2. 添加标签

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

Note

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

Warning

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

Note

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

3. 等待结果

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

路径路由规则

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

路径模式 硬件 运行器
路径中包含 two_card two_card A3 NPU linux-aarch64-a3-2
路径中包含 four_card four_card A3 NPU linux-aarch64-a3-4
one/two_card 下文件名包含 _310p Ascend 310P x1 linux-aarch64-310p-*
four_card 下文件名包含 _310p Ascend 310P x4 linux-aarch64-310p-*
所有其他路径 one_card A2 NPU linux-aarch64-a2b3-1

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

测试路径参考

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

tests/e2e/pull_request/
├── one_card/          # Single card tests → A2 NPU x1 runner
├── two_card/          # Two card tests → A3 NPU x2 runner
├── four_card/         # Four card tests → A3 NPU x4 runner

310P 测试在相应的卡目录下使用 _310p 子目录或 _310p.py 文件名后缀:

tests/e2e/pull_request/one_card/_310p/   # 310P single card
tests/e2e/pull_request/four_card/_310p/  # 310P four card

与完整 E2E 套件的比较

方面 完整端到端测试套件 每条测试的注释触发
触发方式 ready 标签 /e2e 评论 + ready 标签
范围 所有 E2E 测试 仅指定的测试路径
触发权限 任何可添加标签的人 PR 作者或具有写入/管理员权限的协作者
使用场景 合入前验证 特定测试的迭代调试

示例

运行单个 one_card 测试:

/e2e tests/e2e/pull_request/one_card/test_offline_inference.py

运行 two_card 测试:

/e2e tests/e2e/pull_request/two_card/test_data_parallel.py

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

/e2e tests/e2e/pull_request/one_card/test_offline_inference.py tests/e2e/pull_request/two_card/test_data_parallel.py

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

故障排除

添加标签后工作流没有启动。

  • 确保 /e2e 评论是在添加标签**之前**发布的。 如果先添加了标签,请移除它,然后在发布评论后重新添加。
  • 检查评论是否以 /e2e 开头,后跟至少一个路径,斜杠前没有前导空格或额外字符。
  • 修复问题后重新触发,只需推送一个新的提交——工作流将自动重用现有的 /e2e 评论。

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

  • 检查路径是否包含预期的目录段(one_cardtwo_cardfour_card_310p)。不匹配这些模式中任何一个的路径默认会路由到 one_card 运行器。

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

  • 只有 PR 作者或写入/管理员协作者才能使用评论触发。 请让维护者代为发布 /e2e 评论。