SuperAPI AI 工具集

running-devops-test-suite

部署与运维

查看项目

更新于 10-15 11:59

技能介绍

用途

本技能用于在 DevOps Center 流水线的指定阶段上异步触发一个或多个测试套件的执行。它通过 Connect API 的 stage/execute 端点发起测试运行,适用于 Pre-Promote、Post-Promote 或 Review 事件。此外,它还支持“重触发模式”,用于在质量门禁因覆盖率不足而阻止晋升、且覆盖率问题已解决后,重新触发门禁检查。

前置条件

使用本技能前,必须先加载并遵循 checking-devops-prerequisites 技能,完成前置条件 1–4 以及前置条件 5(流水线阶段),因为本技能针对特定阶段操作。在继续之前,需要确认以下信息:

  • doce-org-alias(在前置条件 1 中确定)
  • pipelineId(来自前置条件 4,流水线选择)
  • stageId(来自前置条件 5,流水线阶段确认)

所需输入

调用本技能前需要准备以下输入:

  • pipelineId:来自前置条件 4(流水线选择)
  • stageId:来自前置条件 5(流水线阶段确认)
  • event:与用户确认,为 Pre-Promote 或 Post-Promote(如果上下文是审查环境,则为 Review)
  • testSuiteIds:来自套件选择或推荐步骤中确认的套件 ID
  • doce-org-alias:在前置条件 1 中确定

确认门禁

该调用会改变组织状态,因此未经用户明确确认不得继续。在调用 API 之前,需向用户展示以下配置信息并等待确认:

“我即将使用以下配置运行测试:

流水线:<pipelineName>

阶段:<stageName>

事件:<event>

套件:<suiteName(s)>

组织:<doce-org-alias>

是否继续?”

在用户确认之前,不要发起 API 调用。

API 调用

sf api request rest \
  "/services/data/v67.0/connect/devopstesting/pipeline/<pipelineId>/stage/execute" \
  --method POST \
  --body '{
    "stageId": "<stageId>",
    "event": "<event>",
    "testSuiteIds": ["<suiteId1>", "<suiteId2>"]
  }' \
  --target-org <doce-org-alias>

请求体字段说明:

  • stageId(字符串):要执行测试的流水线阶段 ID
  • event(字符串):Pre-Promote、Post-Promote 或 Review
  • testSuiteIds(字符串数组):要执行的一个或多个测试套件 ID

成功时

从响应中提取 runId(或执行 ID),并告知用户:

“测试正在 <doce-org-alias> 中运行。结果就绪后我会通知你。”

随后立即将 runId 交给 polling-test-results 技能,开始轮询循环。

错误处理

  • 400:“测试执行请求无效。请检查阶段和套件 ID 是否正确。”
  • 403:“你没有在此流水线上运行测试的权限。请检查你的 DevOps Testing API 访问权限。”
  • 404:“未找到流水线或阶段。它可能已被删除。”
  • 500:“DevOps Center 组织返回了服务器错误。请几分钟后重试。”

切勿向用户暴露原始 API 错误。

重触发模式(重新运行质量门禁)

当晋升因质量门禁失败而被阻止,且覆盖率缺口此后已解决时,使用此模式。

额外前置条件(必须全部满足):

  • 最新 DevopsTestSuiteExecution 上的 Coverage 字段达到或超过 DevopsQualityGateRule 中定义的阈值
  • 用户已明确要求重触发门禁
  • 已知被阻止晋升时使用的相同 pipelineId、stageId 和 event

如果覆盖率仍低于阈值,不要重触发。应回复:

“覆盖率仍为 <X>%,低于 <threshold>% 的门禁。在达到阈值之前无法重触发门禁。以下是剩余未覆盖的方法:<list>。”

不要重试。解释必须先解决什么,然后停止。

重触发所需输入:

  • pipelineId:来自被阻止晋升的上下文
  • stageId:来自被阻止晋升的上下文
  • event:最初阻止时相同的事件类型(Pre-Promote 或 Post-Promote)
  • suiteIds:最初运行的相同套件
  • doce-org-alias:在前置条件 1 中确定

重触发确认门禁:在执行 API 调用之前,展示以下确认提示并等待用户明确批准:

“覆盖率已确认为 <X>%,达到 <threshold>% 的门禁。我将为 <stageName> 阶段(<event>)重新触发质量门禁检查。确认?”

仅在用户确认后继续。如果用户拒绝,则停止,不进行任何 API 调用。

重触发 API 调用(使用相同的 Connect API stage/execute 端点):

sf api request rest "/services/data/v67.0/connect/devopstesting/pipeline/<pipelineId>/stage/execute" --method POST --body '{"stageId":"<stageId>","event":"<event>","testSuiteIds":["<suiteId1>"]}' --target-org <doce-org-alias>

调用返回 runId 后,将新的 runId 交给 polling-test-results 技能以监控执行结果。

重触发错误处理:如果 API 返回错误表明门禁无法重触发,应回复:

“质量门禁目前无法重触发。原因:<通俗语言摘要>。以下是需要先解决的内容:<list>。”

切勿向用户暴露原始 API 错误详情。

相关技能

  • polling-test-results:在收到 runId 后轮询异步运行结果
  • recommending-devops-tests:在触发执行前推荐应先运行哪些套件
  • managing-suite-assignments:如果套件尚未链接,将其分配或映射到流水线阶段
  • configuring-quality-gate:配置新的门禁或阈值