Files
effekt-interface/resources/automation_api_doc.md
2026-05-11 14:29:16 +08:00

13 KiB
Raw Blame History

自动化执行接口文档

1. 基础说明

  • 接口前缀:/it/api
  • 鉴权方式:沿用现有登录鉴权,前端请求需携带 token
  • 返回格式:沿用现有项目统一返回结构

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {}
}

失败返回示例

{
  "code": 40009,
  "msg": "参数错误",
  "data": null
}

2. 状态枚举

2.1 执行主单状态 status

含义
0 待触发
1 触发中
2 排队中
3 执行中
4 成功
5 失败
6 已取消
7 触发失败
8 回调异常

2.2 执行明细状态 status

含义
0 待执行
1 执行中
2 通过
3 失败
4 阻塞
5 跳过
6 未找到
7 已取消

2.3 触发类型 trigger_type

含义
1 单条执行
2 计划执行

2.4 执行模式 run_mode

含义
1 串行
2 并行

3. 接口清单

接口 方法 说明
/automation/case/run POST 单条自动化用例执行
/automation/plan/run POST 计划自动化用例执行
/automation/execution/list GET 自动化执行记录列表
/automation/execution/detail GET 自动化执行详情
/automation/execution/case/list GET 自动化执行明细列表

以下接口为 Jenkins / pytest 内部调用,前端无需接入:

  • /automation/execution/case/pull
  • /automation/execution/queued
  • /automation/execution/start
  • /automation/execution/case/result
  • /automation/execution/finish
  • /automation/execution/abort

4. 单条自动化用例执行

接口

  • 方法:POST
  • 路径:/it/api/automation/case/run

请求体

{
  "caseId": 1001,
  "envCode": "st",
  "runMode": 1,
  "jenkinsJobName": "pytest-auto-runner",
  "remark": "前端手动触发"
}

请求参数说明

字段 类型 必填 说明
caseId number 功能用例 ID也是自动化桥梁 ID
envCode string 执行环境编码
runMode number 执行模式1串行2并行默认1
jenkinsJobName string 指定 Jenkins Job不传走后端默认值
remark string 触发备注

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {
    "id": 12,
    "execution_no": "AE20250920153000123",
    "trigger_type": 1,
    "project_id": 3,
    "plan_id": null,
    "plan_round_no": null,
    "source_case_id": 1001,
    "env_code": "st",
    "run_mode": 1,
    "status": 2,
    "jenkins_job_name": "pytest-auto-runner",
    "jenkins_queue_id": 321,
    "jenkins_build_number": null,
    "jenkins_build_url": null,
    "console_url": null,
    "report_url": null,
    "total_count": 1,
    "pending_count": 1,
    "running_count": 0,
    "passed_count": 0,
    "failed_count": 0,
    "blocked_count": 0,
    "skipped_count": 0,
    "not_found_count": 0,
    "trigger_by": 8,
    "trigger_source": "platform",
    "trigger_message": "http://jenkins/queue/item/321/",
    "start_time": null,
    "end_time": null,
    "duration_seconds": null,
    "ext": {},
    "created_time": "2025-09-20 15:30:00",
    "updated_time": "2025-09-20 15:30:01"
  }
}

失败返回示例

{
  "code": 40009,
  "msg": "caseId、envCode 为必传参数",
  "data": null
}
{
  "code": 40009,
  "msg": "该用例不存在或未接入自动化",
  "data": null
}

5. 计划自动化用例执行

接口

  • 方法:POST
  • 路径:/it/api/automation/plan/run

请求体:执行计划下全部自动化用例

{
  "planId": 2001,
  "envCode": "st",
  "runMode": 1,
  "roundNo": 1,
  "jenkinsJobName": "pytest-auto-runner",
  "remark": "执行计划自动化"
}

请求体:执行计划下指定用例

{
  "planId": 2001,
  "envCode": "st",
  "runMode": 1,
  "roundNo": 1,
  "caseIds": [1001, 1002, 1003],
  "jenkinsJobName": "pytest-auto-runner",
  "remark": "只执行勾选用例"
}

请求参数说明

字段 类型 必填 说明
planId number 测试计划 ID
envCode string 执行环境编码
runMode number 执行模式1串行2并行默认1
roundNo number 指定计划轮次
caseIds number[] 指定执行的功能用例 ID 列表;不传则执行计划下全部自动化用例
jenkinsJobName string 指定 Jenkins Job
remark string 触发备注

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {
    "id": 13,
    "execution_no": "AE20250920153500123",
    "trigger_type": 2,
    "project_id": 3,
    "plan_id": 2001,
    "plan_round_no": 1,
    "source_case_id": null,
    "env_code": "st",
    "run_mode": 1,
    "status": 2,
    "jenkins_job_name": "pytest-auto-runner",
    "jenkins_queue_id": 322,
    "total_count": 10,
    "pending_count": 10,
    "running_count": 0,
    "passed_count": 0,
    "failed_count": 0,
    "blocked_count": 0,
    "skipped_count": 0,
    "not_found_count": 0
  }
}

失败返回示例

{
  "code": 40009,
  "msg": "planId、envCode 为必传参数",
  "data": null
}
{
  "code": 40009,
  "msg": "计划下无可执行自动化用例",
  "data": null
}

6. 自动化执行记录列表

接口

  • 方法:GET
  • 路径:/it/api/automation/execution/list

Query 参数

字段 类型 必填 说明
pageNo number 页码默认1
pageSize number 每页数量默认20
projectId number 按项目过滤
planId number 按计划过滤
status number 按执行主单状态过滤
triggerType number 按触发类型过滤1单条2计划

请求示例

GET /it/api/automation/execution/list?pageNo=1&pageSize=20&planId=2001

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {
    "list": [
      {
        "id": 13,
        "execution_no": "AE20250920153500123",
        "trigger_type": 2,
        "project_id": 3,
        "plan_id": 2001,
        "plan_round_no": 1,
        "source_case_id": null,
        "env_code": "st",
        "run_mode": 1,
        "status": 3,
        "jenkins_job_name": "pytest-auto-runner",
        "jenkins_queue_id": 322,
        "jenkins_build_number": 108,
        "jenkins_build_url": "http://jenkins/job/pytest-auto-runner/108/",
        "console_url": "http://jenkins/job/pytest-auto-runner/108/console",
        "report_url": "http://allure/report/108",
        "total_count": 10,
        "pending_count": 3,
        "running_count": 2,
        "passed_count": 4,
        "failed_count": 1,
        "blocked_count": 0,
        "skipped_count": 0,
        "not_found_count": 0,
        "trigger_by": 8,
        "trigger_source": "platform",
        "trigger_message": "",
        "start_time": "2025-09-20 15:36:00",
        "end_time": null,
        "duration_seconds": null,
        "ext": {},
        "created_time": "2025-09-20 15:35:00",
        "updated_time": "2025-09-20 15:38:20"
      }
    ],
    "total": 1
  }
}

7. 自动化执行详情

接口

  • 方法:GET
  • 路径:/it/api/automation/execution/detail

Query 参数

字段 类型 必填 说明
executionId number 执行主单 ID

请求示例

GET /it/api/automation/execution/detail?executionId=13

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {
    "id": 13,
    "execution_no": "AE20250920153500123",
    "trigger_type": 2,
    "project_id": 3,
    "plan_id": 2001,
    "plan_round_no": 1,
    "source_case_id": null,
    "env_code": "st",
    "run_mode": 1,
    "status": 4,
    "jenkins_job_name": "pytest-auto-runner",
    "jenkins_queue_id": 322,
    "jenkins_build_number": 108,
    "jenkins_build_url": "http://jenkins/job/pytest-auto-runner/108/",
    "console_url": "http://jenkins/job/pytest-auto-runner/108/console",
    "report_url": "http://allure/report/108",
    "total_count": 10,
    "pending_count": 0,
    "running_count": 0,
    "passed_count": 9,
    "failed_count": 1,
    "blocked_count": 0,
    "skipped_count": 0,
    "not_found_count": 0,
    "trigger_by": 8,
    "trigger_source": "platform",
    "trigger_message": "",
    "start_time": "2025-09-20 15:36:00",
    "end_time": "2025-09-20 15:45:00",
    "duration_seconds": 540,
    "ext": {},
    "created_time": "2025-09-20 15:35:00",
    "updated_time": "2025-09-20 15:45:00",
    "summary": {
      "total": 10,
      "pending": 0,
      "running": 0,
      "passed": 9,
      "failed": 1,
      "blocked": 0,
      "skipped": 0,
      "notFound": 0,
      "canceled": 0
    }
  }
}

失败返回示例

{
  "code": 40011,
  "msg": "executionId 为必传参数",
  "data": null
}

8. 自动化执行明细列表

接口

  • 方法:GET
  • 路径:/it/api/automation/execution/case/list

Query 参数

字段 类型 必填 说明
executionId number 执行主单 ID
status number 按执行明细状态过滤
pageNo number 页码默认1
pageSize number 每页数量默认20

请求示例

GET /it/api/automation/execution/case/list?executionId=13&pageNo=1&pageSize=100

成功返回示例

{
  "code": 20000,
  "msg": "success",
  "data": {
    "list": [
      {
        "id": 101,
        "execution_id": 13,
        "plan_case_id": 5001,
        "case_id": 1001,
        "case_key": "1001",
        "case_title": "订单创建成功",
        "run_order": 1,
        "status": 2,
        "pytest_nodeid": "tests/order/test_create_order.py::test_create_order",
        "result_message": "执行通过",
        "error_message": "",
        "stack_trace": "",
        "report_url": "http://allure/case/101",
        "duration_seconds": 18,
        "started_time": "2025-09-20 15:36:02",
        "finished_time": "2025-09-20 15:36:20",
        "retry_count": 0,
        "ext": {},
        "created_time": "2025-09-20 15:35:00",
        "updated_time": "2025-09-20 15:36:20"
      },
      {
        "id": 102,
        "execution_id": 13,
        "plan_case_id": 5002,
        "case_id": 1002,
        "case_key": "1002",
        "case_title": "订单取消失败提示正确",
        "run_order": 2,
        "status": 3,
        "pytest_nodeid": "tests/order/test_cancel_order.py::test_cancel_order",
        "result_message": "断言失败",
        "error_message": "AssertionError: xxx",
        "stack_trace": "Traceback ...",
        "report_url": "http://allure/case/102",
        "duration_seconds": 12,
        "started_time": "2025-09-20 15:36:21",
        "finished_time": "2025-09-20 15:36:33",
        "retry_count": 0,
        "ext": {},
        "created_time": "2025-09-20 15:35:00",
        "updated_time": "2025-09-20 15:36:33"
      }
    ],
    "total": 10
  }
}

失败返回示例

{
  "code": 40011,
  "msg": "executionId 为必传参数",
  "data": null
}

9. 前端接入建议

9.1 单条执行

  • 页面位置:功能用例列表页 / 详情页
  • 按钮:执行自动化
  • 调用接口:POST /automation/case/run
  • 成功后拿返回 data.id 作为 executionId
  • 再调用:
    • GET /automation/execution/detail
    • GET /automation/execution/case/list

9.2 计划执行

  • 页面位置:测试计划详情页
  • 按钮:执行自动化用例
  • 调用接口:POST /automation/plan/run
  • 支持:
    • 执行全部自动化用例
    • 执行勾选用例(传 caseIds

9.3 轮询建议

执行为异步触发,前端建议轮询:

  • GET /automation/execution/detail?executionId=xx
  • GET /automation/execution/case/list?executionId=xx&pageNo=1&pageSize=100

轮询频率建议:

  • 执行中:每 3~5 秒 1 次
  • 终态停止轮询

主单终态:

  • 4 成功
  • 5 失败
  • 6 已取消
  • 7 触发失败
  • 8 回调异常

10. 备注

  1. 返回字段命名为下划线风格,如:
    • execution_no
    • project_id
    • created_time
  2. summary 仅在执行详情接口返回:
    • /automation/execution/detail
  3. report_urlconsole_url 在刚触发时可能为空,待 Jenkins / pytest 回调后更新。