测试工程领域 Action 插件

运行于 GitCode Actions的测试工程领域插件集合,覆盖 pytest 用例元数据收集、结果上传、用例执行调度与结果汇总展示。

uses 路径格式为 openlibing/test-action/<插件目录>@<tag>,下文示例统一使用 @v1.0.0,请按最新的标签替换。

插件一览

插件 作用
openlibing-metadata-collect 收集 pytest 用例元数据,生成 XML 报告
openlibing-upload-reports 将元数据/结果文件上传至 OpenLibing OBS
pytest-orch 带环境调度的 pytest 用例执行器
test-result-display 从结果 JSON 生成 Markdown 汇总并写入步骤摘要

典型串联示例

元数据收集与上传

steps:
  # 收集用例元数据
  - name: Collect metadata
    id: collect
    uses: openlibing/test-action/openlibing-metadata-collect@v1.0.0
    with:
      testcase-path: tests

  # 上传元数据
  - name: Upload metadata
    uses: openlibing/test-action/openlibing-upload-reports@v1.0.0
    with:
      files: ${{ steps.collect.outputs.metadata-output-path }}
      openlibing-secret: ${{ secrets.OPENLIBING_SECRET }}
      label: smoke

用例执行与结果展示

steps:
  # 调度执行用例
  - name: Run tests
    id: orch
    uses: openlibing/test-action/pytest-orch@v1.0.0
    with:
      git-username: ${{ secrets.GIT_USERNAME }}
      git-password: ${{ secrets.GIT_PASSWORD }}
      scheduler-secret: ${{ secrets.SCHEDULER_SECRET }}
      obs-ak: ${{ secrets.OBS_AK }}
      obs-sk: ${{ secrets.OBS_SK }}
      obs-bucket-name: ${{ secrets.OBS_BUCKET }}
      obs-server: ${{ secrets.OBS_SERVER }}
      obs-base-url: ${{ secrets.OBS_BASE_URL }}
      testcase-repo: my-org/my-tests

  # 汇总展示结果
  - name: Display results
    uses: openlibing/test-action/test-result-display@v1.0.0
    with:
      json-file: ${{ steps.orch.outputs.testcase-file }}

openlibing-metadata-collect

收集 pytest 测试用例元数据并生成 XML 报告。插件会在随机临时目录创建 Python 虚拟环境,从 GitCode release 下载 pytest-testcase-collector wheel 并安装,随后执行 pytest --collect-only --metadata-output <file> 产出元数据 XML,执行结束后清理临时环境。

收集 metadata 信息示例 workflow

输入参数

参数 必填 默认值 说明
testcase-path '' 测试用例目录路径。当指定 pytest-config-file 且由其 testpaths 决定收集范围时可省略
metadata-output-path metadata_test.xml XML 输出文件路径,文件名必须以 metadata 开头;并发场景下请指定不同路径以避免覆盖
pytest-config-file - pytest 配置文件路径(如 pytest.ini),指定后由配置中的 testpaths 自动收集
rootdir '' pytest rootdir 覆盖路径,作为 testpaths 与相对路径的解析基准

输出参数

参数 说明
metadata-output-path 生成的 XML 文件绝对路径

使用约束

  • testcase-pathpytest-config-file 至少指定其一,否则执行失败。
  • 输出文件名必须以 metadata 开头(由 validateOutputPath 校验)。
  • 所有路径须位于工作区内,禁止路径遍历(..)与符号链接逃逸。
  • 镜像源可通过环境变量 PYPI_INDEX_URL 覆盖:必须 HTTPS,且主机须在白名单内:pypi.orgfiles.pythonhosted.orgmirrors.huaweicloud.commirrors.aliyun.compypi.tuna.tsinghua.edu.cnmirrors.cloud.tencent.com

使用示例

指定用例目录:

- name: Collect metadata
  id: collect
  uses: openlibing/test-action/openlibing-metadata-collect@v1.0.0
  with:
    testcase-path: tests
    metadata-output-path: metadata_test.xml

使用 pytest 配置文件(由其 testpaths 决定收集范围):

- uses: openlibing/test-action/openlibing-metadata-collect@v1.0.0
  with:
    pytest-config-file: pytest.ini

收集后上传至 OpenLibing OBS(与 openlibing-upload-reports 串联):

steps:
  - name: Collect metadata
    id: collect
    uses: openlibing/test-action/openlibing-metadata-collect@v1.0.0
    with:
      testcase-path: tests
  - name: Upload metadata
    uses: openlibing/test-action/openlibing-upload-reports@v1.0.0
    with:
      files: ${{ steps.collect.outputs.metadata-output-path }}
      openlibing-secret: ${{ secrets.OPENLIBING_SECRET }}
      label: smoke

openlibing-upload-reports

将测试元数据/结果文件上传至 OpenLibing OBS bucket。支持两种归档模式:流水线模式pipeline-id / pipeline-run-id / job-id)与标签模式label + 可选 archive-path)。提供 label 即进入标签模式并忽略所有流水线参数。

上传测试报告示例 workflow

输入参数

参数 必填 默认值 说明
files - 上传文件路径,空格分隔,例如 "metadata.xml results.xml"
openlibing-secret - JSON 字符串,含 apig_code(支持 {"key":"value"}{key:value} 两种写法;允许字段:apig_code/apig_key/apig_secret
pipeline-id - 流水线 ID,标签模式时忽略;未指定则回退到环境变量 ATOMGIT_WORKFLOW_ID
pipeline-run-id - 流水线运行 ID;未指定则回退到 ATOMGIT_RUN_ID
job-id - 作业 ID;未指定则回退到 ATOMGIT_JOB_RUN_ID
label - 归档标签(如 performanceprecisionsimulation),仅允许字母数字、下划线、连字符、点,≤256 字符
archive-path - 自定义归档路径,必须与 label 同时使用;不允许包含 ..;仅允许字母数字、斜杠、连字符、下划线、点、空格,≤256 字符

输出参数

参数 说明
success 上传是否成功(true/false
status-code HTTP 响应状态码
response-text HTTP 响应文本

模式说明

  • 标签模式:提供 label 后忽略所有 pipeline 参数;提供 archive-path 时最终归档路径为 /{label}/{archive_path}/{filename}
  • 流水线模式:未提供 label 时启用,需同时具备 pipeline-idpipeline-run-idjob-id(缺省项自动从上述环境变量回退)。
  • archive-path 必须与 label 同时使用,否则报错。

使用示例

流水线模式:

- uses: openlibing/test-action/openlibing-upload-reports@v1.0.0
  with:
    files: metadata_test.xml results.xml
    openlibing-secret: ${{ secrets.OPENLIBING_SECRET }}
    pipeline-id: ${{ env.ATOMGIT_WORKFLOW_ID }}
    pipeline-run-id: ${{ env.ATOMGIT_RUN_ID }}
    job-id: ${{ env.ATOMGIT_JOB_RUN_ID }}

标签模式(带自定义归档路径):

- uses: openlibing/test-action/openlibing-upload-reports@v1.0.0
  with:
    files: metadata_test.xml
    openlibing-secret: ${{ secrets.OPENLIBING_SECRET }}
    label: performance
    archive-path: 2026/08

上游元数据通常由 openlibing-metadata-collect 产出,结果文件可由 pytest-orch 产出。


pytest-orch

带环境调度的 pytest 用例执行器。插件克隆执行器仓与用例仓,创建虚拟环境并安装依赖,下载 pytest-testkittestcase-collector wheel,调用执行器 main.py 执行用例,并从 output.json 读取产出。

调度框架插件示例 workflow

调度框架插件的使用涉及调度框架使用方法testkit 插件,其中 调度框架 涉及用例收集、环境动态申请、用例执行等功能;testkit 插件 涉及 pytest 用例环境注册和日志记录插件等功能。

输入参数

参数 必填 默认值 说明
git-username - GitCode 仓库名称,用于 clone 鉴权
git-password - GitCode 密码或令牌
scheduler-secret - 调度密钥 JSON 字符串(≤10KB、嵌套≤10 层;允许字段:apig_code/apig_key/apig_secret/x-hw-appid/x-hw-signkey/auth_token/k8s_auth
obs-ak - OBS AK 凭证(字母数字、+/,≤256 字符)
obs-sk - OBS SK 凭证(同上)
obs-bucket-name - OBS 桶名(3-63 字符,小写字母、数字、连字符)
obs-server - OBS 主机名(字母、数字、点、连字符,≤253 字符)
obs-base-url - OBS 基础 URL(HTTP/HTTPS,≤2048 字符)
testcase-repo - 用例仓库(owner/repo 格式,如 example_owner/example_repo
workspace workspace 工作目录名
testcase-config-file - 用例配置文件路径(相对或绝对,绝对路径须在 /home/tmp/workspace 之内)
log-conf - 日志配置(JSON 字符串或文件路径,路径约束同上)
executor-branch master 执行器仓库分支
executor-repo openlibing/openlibing-pytest-executor 执行器仓库(owner/repo
case-branch main 用例仓库分支
max-workers 2 最大并发数(正整数)
pytest-testkit-url action.yml pytest-testkit wheel 下载地址(必须 HTTPS 且主机为 gitcode.com
testcase-collector-url action.yml testcase-collector wheel 下载地址(约束同上)
image-label - 环境选择镜像标签
archive-log-dir - 归档日志目录路径(路径约束同 testcase-config-file
env-model - 环境模型(字母数字、下划线、连字符、点)
env-device-resource - 环境设备资源 JSON(≤10KB、嵌套≤10 层、键名仅字母数字/下划线/连字符、≤50 键)
env-deploy-model Dislocated 环境部署模型:Co-locatedDislocated
platform codearts 环境命名平台前缀
fail-case - 失败用例结果 JSON 文件路径(路径约束同上)

输出参数

参数 说明
pipeline-id 透传环境变量 ATOMGIT_WORKFLOW_ID 的流水线 ID
job-run-id 作业运行 ID,取自环境变量 ATOMGIT_JOB_RUN_ID
testcase-obs-url 用例结果 OBS URL(取自执行器 output.jsonTestCaseOBSUrl
testcase-file 用例结果文件路径(取自 TestCaseFile
env-log-file 环境日志文件路径(取自 EnvLogFile

环境变量依赖

执行依赖以下 GitCode Actions 内置环境变量,缺失将直接失败:

  • ATOMGIT_JOB_RUN_ID(必需)
  • ATOMGIT_WORKFLOW_ID(必需)
  • ATOMGIT_RUN_ID(必需)

使用示例

- name: Run tests
  id: orch
  uses: openlibing/test-action/pytest-orch@v1.0.0
  with:
    git-username: ${{ secrets.GIT_USERNAME }}
    git-password: ${{ secrets.GIT_PASSWORD }}
    scheduler-secret: ${{ secrets.SCHEDULER_SECRET }}
    obs-ak: ${{ secrets.OBS_AK }}
    obs-sk: ${{ secrets.OBS_SK }}
    obs-bucket-name: ${{ secrets.OBS_BUCKET }}
    obs-server: ${{ secrets.OBS_SERVER }}
    obs-base-url: ${{ secrets.OBS_BASE_URL }}
    testcase-repo: my-org/my-tests
    case-branch: main
    max-workers: "4"
    env-deploy-model: Dislocated
    platform: codearts

执行结果可交由 test-result-display 生成 Markdown 汇总:

- name: Display results
  uses: openlibing/test-action/test-result-display@v1.0.0
  with:
    json-file: ${{ steps.orch.outputs.testcase-file }}

test-result-display

从测试结果 JSON 生成 Markdown 汇总表格,并写入流水线步骤摘要($ATOMGIT_STEP_SUMMARY,未设置时回退输出到控制台)。支持多文件合并与上次结果对比(展示重试列)。

测试结果展示示例 workflow

输入参数

参数 必填 默认值 说明
json-file - 测试结果 JSON 路径,多文件换行分隔;支持 SourceTask:/path/to/file.json 前缀格式以标注来源任务
last-json - 上次测试结果 JSON(仅取 passed 用例用于对比),多文件换行分隔

输出参数

参数 说明
total-cases 用例总数
passed-cases 通过用例数
not-passed-cases 未通过用例数(失败、跳过、错误、未知等)

JSON 结构要求

输入 JSON 顶层须含 testCasesResult 数组,每个用例对象可包含以下字段:

字段 用途
number 用例名称/编号
state 执行状态(passed 视为通过,其余计入未通过)
beginTime / endTime 起止时间戳(毫秒),用于计算耗时
resultDownloadUrl 结果下载链接(仅允许 http/https 协议)

使用示例

单文件展示:

- name: Display results
  uses: openlibing/test-action/test-result-display@v1.0.0
  with:
    json-file: ${{ steps.orch.outputs.testcase-file }}

多文件并带来源前缀 + 上次结果对比:

- uses: openlibing/test-action/test-result-display@v1.0.0
  with:
    json-file: |
      SmokeTask:smoke-results.json
      FullTask:full-results.json
    last-json: last-passed-results.json

输出说明

  • 提供 last-json 时会额外展示「重试结果」列,并用例按失败优先排序。
  • 所有单元格内容均做 Markdown 转义,防止注入。

上游结果 JSON 通常由 pytest-orchtestcase-file 输出产出。