You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TestRail API获取测试运行中失败用例的CaseID

解决TestRail API获取指定状态测试用例CaseID的问题

问题背景

需要通过TestRail API获取测试运行中状态为失败的测试用CaseID列表,同时希望实现:

  • 直接用状态名称(如Pass、Failed、Untested)过滤
  • 结果包含未测试的用例

之前尝试的命令:

curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_results_for_run/$TESTRAIL_RUN_ID" | jq 'group_by(.test_id) | map(max_by(.created_on))' | jq '[.[] | select(.status_id != 1)]'

(逻辑:获取测试运行的所有结果,按test_id分组保留最新结果,排除status_id=1的通过状态)

返回输出:

[
  {
    "id": 966943,
    "test_id": 2559942,
    "status_id": null,
    "created_on": 1684909080,
    "assignedto_id": 531,
    "comment": null,
    "version": null,
    "elapsed": null,
    "defects": null,
    "created_by": 546,
    "custom_step_results": null,
    "attachment_ids": []
  },
  {
    "id": 967944,
    "test_id": 2559944,
    "status_id": 5,
    "created_on": 1684936836,
    "assignedto_id": null,
    "comment": null,
    "version": null,
    "elapsed": null,
    "defects": null,
    "created_by": 546,
    "custom_step_results": null,
    "attachment_ids": []
  }
]

遇到的问题:

  • 返回结果无测试用例的原始CaseID
  • 未包含未测试(Untested)的用例
  • 只能通过status_id过滤,无法直接使用状态名称

解决方案

1. 获取CaseID:改用get_tests接口

get_results_for_run返回的是测试结果记录,其中的test_id是测试运行中该用例的实例ID,并非原始CaseID。要获取原始CaseID,需调用get_tests接口,该接口会返回测试运行中所有用例实例的完整信息,包括case_id(原始用例ID)和当前status_id。

示例调用:

curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_tests/$TESTRAIL_RUN_ID"

2. 包含未测试用例

get_results_for_run仅返回已有测试结果的用例,未测试的用例不会出现在结果中。而get_tests接口会返回测试运行内的所有用例,包括未测试状态的条目(对应status_id需根据你的TestRail配置确认,默认Untested的ID为3)。

3. 用状态名称过滤:先获取状态ID映射

TestRail的状态ID支持自定义,因此需要先调用get_statuses接口获取系统中所有状态的ID与名称映射:

curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_statuses"

返回示例(精简版):

[
  {"id":1,"name":"Passed"},
  {"id":5,"name":"Failed"},
  {"id":3,"name":"Untested"}
]

根据映射关系,即可通过状态名称间接筛选目标用例。


整合命令示例

获取所有Failed状态的CaseID列表

# 提取Failed状态对应的ID
FAILED_STATUS_ID=$(curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_statuses" | jq '.[] | select(.name=="Failed") | .id')

# 筛选Failed状态的用例,提取CaseID
curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_tests/$TESTRAIL_RUN_ID" | jq --arg id "$FAILED_STATUS_ID" '[.[] | select(.status_id == ($id | tonumber)) | .case_id]'

获取Failed和Untested状态的CaseID列表

# 提取Failed和Untested对应的状态ID数组
STATUS_IDS=$(curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_statuses" | jq '[.[] | select(.name=="Failed" or .name=="Untested") | .id]')

# 筛选符合状态的用例,提取CaseID
curl -s -u $TESTRAIL_EMAIL:$TESTRAIL_PW -X GET "$TESTRAIL_URL/index.php?/api/v2/get_tests/$TESTRAIL_RUN_ID" | jq --argjson ids "$STATUS_IDS" '[.[] | select(.status_id | IN($ids[])) | .case_id]'

内容的提问来源于stack exchange,提问作者anandhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:52:48