【问题标题】:How to get all work items(Epics, Features, Issue, Task, Test Case, User Story, etc) for an Azure Devops project?如何获取 Azure Devops 项目的所有工作项(史诗、功能、问题、任务、测试用例、用户故事等)?
【发布时间】:2019-06-15 13:23:21
【问题描述】:

我正在尝试获取所有工作项(史诗、功能、问题、任务、测试用例、用户故事等),然后使用 Microsoft 的 azure devops python api(aka vsts) 库为给定项目对它们进行分类。

在 work_item_tracking 中,我找不到任何函数来获取 all 工作项或根据其类型获取 all 工作项。

是否已经有一个函数可以获取我无法找到的所有工作项,或者我应该编写一个 WIQL 查询来获取所需的数据?

【问题讨论】:

  • 不完全清楚您如何使用返回的结果,但如果您使用查询来提取结果并且只关心查看数据,使用Excel Integration 可能更容易获取工作项。

标签: python api azure-devops azure-devops-rest-api


【解决方案1】:

我正在关注这个documentation 来实现它。

使用 Wiql,我们可以对新版本的 Azure Devops 或 TFS 进行查询。为了测试它,我使用 Postman 在实现之前使用服务。 第一步是使用以下网址:

https://dev.azure.com/{organization}/{projectId}/_apis/wit/wiql?api-version=5.0

您必须使用以下 json 正文向 URL 发出 Post 请求才能进行查询。检查下面的 json 有效负载。

{
  "query": "Select [System.Id], [System.Title], [System.State], [System.WorkItemType] From WorkItems"
}

最后,如果请求良好,您将收到带有查询内容的 200 HTTP 响应,另一方面,如果您收到错误,请求将上升错误描述和 HTTP 代码。

在以下链接中检查我的响应并检查返回请求的数据结构: Result of my query

【讨论】:

  • 谢谢,为我节省了很多时间。我也与邮递员一起使用。我花了一些时间首先了解这是一个 POST 而不是一个 GET :)
  • 非常感谢。我尝试了这种方法,它对我有用
【解决方案2】:

是否已经有一个函数可以获取我无法找到的所有工作项,或者我应该编写一个 WIQL 查询来获取所需的数据?

你是对的。我们可以使用编写一个 WIQL 查询来获取系统 ID,然后我们可以根据 system.Ids 来查询工作项。以下是使用 python 代码获取所有工作项的演示代码。

from vsts.vss_connection import VssConnection
from msrest.authentication import BasicAuthentication
import json
from vsts.work_item_tracking.v4_1.models.wiql import Wiql

def emit(msg, *args):
print(msg % args)

def print_work_item(work_item):
    emit(
        "{0} {1}: {2}".format(
            work_item.fields["System.WorkItemType"],
            work_item.id,
            work_item.fields["System.Title"],
        )
    )

personal_access_token = 'YourPATToken'
organization_url = 'https://dev.azure.com/YourorgName'
# Create a connection to the org
credentials = BasicAuthentication('', personal_access_token)
connection = VssConnection(base_url=organization_url, creds=credentials)
wiql = Wiql(
        query="""select [System.Id] From WorkItems """
    )

wit_client = connection.get_client('vsts.work_item_tracking.v4_1.work_item_tracking_client.WorkItemTrackingClient')
wiql_results = wit_client.query_by_wiql(wiql).work_items
if wiql_results:
        # WIQL query gives a WorkItemReference with ID only
        # => we get the corresponding WorkItem from id
        work_items = (
            wit_client.get_work_item(int(res.id)) for res in wiql_results
        )
        for work_item in work_items:
            print_work_item(work_item)

更多demo代码可以参考link

【讨论】:

    【解决方案3】:

    首先,我没有使用python库,但我可以告诉你必须使用哪些API。

    有一个 API 可以检索所有 work items。这只是一个包含所有工作项类型和属性的 JSON 对象。请注意,每个请求仅限于 200 个工作项。如果您想要更多工作项,则必须编写 WIQL 查询。

    GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems?ids={ids}&api-version=5.0-preview.3
    

    我个人建议您使用 WIQL 查询从 Azure DevOps 检索数据。它非常灵活,可以在任何情况下使用。

    在这里你可以找到更多关于WIQL queries的信息

    这里你可以找到Azure DevOps Rest API for WIQL Queries的详细信息

    【讨论】:

    • 这个 api 是否需要工作项 ID,因为 url 指定 - workitems?ids={ids}?
    • 我们如何获取 id?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多