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

如何使用Python调用TFS REST API获取测试计划信息?

获取Azure DevOps测试计划信息的实现思路

首先先给你提个小细节:你现有获取项目名称的代码里,循环部分有点小问题——names.append(projects)应该改成names.append(projects_names),不然你添加的是整个项目对象列表,而不是单个项目名称~

接下来回到你要解决的测试计划获取问题,其实和获取项目名称的逻辑一脉相承,只是要用到测试计划专属的客户端,具体步骤如下:

1. 核心逻辑梳理

测试计划是隶属于具体项目的资源,所以整体流程和获取项目类似:建立连接 → 获取对应功能的客户端 → 调用API方法获取数据 → 提取需要的信息。

2. 完整实现代码

结合你现有的项目名称获取逻辑,我整理了一个能同时获取项目和对应测试计划的示例:

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication

def get_projects_and_connection(token, org_url):
    # 创建Azure DevOps连接
    credentials = BasicAuthentication('', token)
    connection = Connection(base_url=org_url, creds=credentials)
    # 获取核心客户端并拉取项目列表
    core_client = connection.clients.get_core_client()
    projects = core_client.get_projects()
    # 整理项目的名称和ID(ID用于后续获取测试计划更稳定)
    project_list = [{"name": p.name, "id": p.id} for p in projects]
    return project_list, connection

def get_test_plans(connection, project_id):
    # 获取测试计划专属客户端
    test_plan_client = connection.clients.get_test_plan_client()
    # 拉取指定项目下的活跃测试计划,可通过state_filter指定状态(Active/Inactive/All)
    test_plans = test_plan_client.get_test_plans(project=project_id, state_filter="Active")
    # 提取测试计划的关键信息
    plan_details = []
    for plan in test_plans:
        plan_details.append({
            "name": plan.name,
            "id": plan.id,
            "description": plan.description or "无描述",
            "created_by": plan.created_by.display_name,
            "created_date": plan.created_date.strftime("%Y-%m-%d %H:%M:%S")
        })
    return plan_details

if __name__ == "__main__":
    # 替换成你的PAT和组织URL
    personal_access_token = "你的个人访问令牌"
    organization_url = "https://dev.azure.com/你的组织名"
    
    # 获取项目列表和连接对象
    projects, conn = get_projects_and_connection(personal_access_token, organization_url)
    
    # 遍历每个项目获取测试计划
    for proj in projects:
        print(f"\n=== 项目: {proj['name']} 的测试计划 ===")
        plans = get_test_plans(conn, proj['id'])
        if not plans:
            print("暂无活跃测试计划")
            continue
        for idx, plan in enumerate(plans, 1):
            print(f"{idx}. 名称: {plan['name']}")
            print(f"   ID: {plan['id']}")
            print(f"   创建人: {plan['created_by']}")
            print(f"   创建时间: {plan['created_date']}")
            print(f"   描述: {plan['description']}")

关键注意事项

  • PAT权限:你的个人访问令牌必须勾选Test Plan下的Read权限,否则会返回权限不足的错误,生成PAT时记得在权限列表里找到对应项勾选。
  • 参数灵活性:get_test_plans方法支持分页参数(top/skip),如果项目下测试计划数量很多,可以用这两个参数做分页查询,避免一次性拉取过多数据。
  • 项目标识选择:用项目ID代替名称作为参数更稳定,避免出现项目名称重复导致的查询错误。

这样应该就能顺利获取到测试计划的信息啦,如果遇到具体报错或者需要更细分的测试计划数据(比如测试套件、测试用例),可以再补充说明~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:55