Как извлечь WorkItems из запроса в VSTS (Azure DevOps) с помощью Python REST API? - PullRequest
0 голосов
/ 15 октября 2018

Я использую официальный Python REST API Azure DevOps: https://github.com/Microsoft/azure-devops-python-api

Благодаря примерам я смог получить информацию о тестовых случаях из идентификаторов.

Каксделать это из запросов (WIQL)?

Вот мой код (с измененными токенами и ссылками):

from vsts.vss_connection import VssConnection
from msrest.authentication import BasicAuthentication


token = "hcykwckuhe6vbnigsjs7r3ai2jefsdlkfjslkfj5mxizbtfu6k53j4ia"
team_instance = "https://tfstest.toto.com:8443/tfs/Development/"

credentials = BasicAuthentication("", token)
connection = VssConnection(base_url=team_instance, creds=credentials)


def print_work_items(work_items):
    for work_item in work_items:
        print(
            "{0} {1}: {2}".format(
                work_item.fields["System.WorkItemType"],
                work_item.id,
                work_item.fields["System.Title"],
            )
        )


WIT_CLIENT = (
    "vsts.work_item_tracking.v4_1.work_item_tracking_client.WorkItemTrackingClient"
)
wit_client = connection.get_client(WIT_CLIENT)


def get_TC_by_id(desired_ids):
    work_items = wit_client.get_work_items(ids=desired_ids, error_policy="omit")
    print_work_items(work_items)


def get_TC_from_query(query):
    # THIS FUNCTION IS NOT WORKING...
    work_items = wit_client.get_work_items(query=query, error_policy="omit")
    print_work_items(work_items)


get_TC_by_id([1035375])

get_TC_from_query(
    """\
SELECT
        [System.Id],
        [System.WorkItemType],
        [System.Title],
        [System.State],
        [System.AreaPath],
        [System.IterationPath]
FROM workitems
WHERE
        [System.TeamProject] = @project
        AND [System.WorkItemType] = 'Test Case'
ORDER BY [System.ChangedDate] DESC
"""
)

Это ошибка, которую я получаю

  File "test_TFS.py", line 35, in get_TC_from_query
    work_items = wit_client.get_work_items(query=query, error_policy="omit")
TypeError: get_work_items() got an unexpected keyword argument 'query'

Как мне получить тестовые случаи из запроса?

В частности, я не понимаю значения «клиента», такие как "vsts.work_item_tracking.v4_1.work_item_tracking_client.WorkItemTrackingClient"

Спасибо всем!

1 Ответ

0 голосов
/ 31 октября 2018

После публикации сообщения (т. Е. Проблемы, приводящей к запросу pull ) в репозитории Github для примеров VSTS, я получил подсказку для решения моей проблемы.

Решение состоит в том, чтобы использовать:

  • объект запроса wiql с Wiql class
  • query_by_wiql функция
  • преобразование результатов запроса (ссылки с идентификатором WorkItem) в WorkItem сget_work_item функция (или get_work_items для обработки нескольких рабочих элементов за один проход)

Вот мое решение моей проблемы:

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


token = "hcykwckuhe6vbnigsjs7r3ai2jefsdlkfjslkfj5mxizbtfu6k53j4ia"
team_instance = "https://tfstest.toto.com:8443/tfs/Development/"

credentials = BasicAuthentication("", token)
connection = VssConnection(base_url=team_instance, creds=credentials)


def print_work_items(work_items):
    for work_item in work_items:
        print(
            "{0} {1}: {2}".format(
                work_item.fields["System.WorkItemType"],
                work_item.id,
                work_item.fields["System.Title"],
            )
        )


WIT_CLIENT = (
    "vsts.work_item_tracking.v4_1.work_item_tracking_client.WorkItemTrackingClient"
)
wit_client = connection.get_client(WIT_CLIENT)


def get_TC_from_query(query):
    query_wiql = Wiql(query=query)
    results = wit_client.query_by_wiql(query_wiql).work_items
    # WIQL query gives a WorkItemReference => we get the corresponding WorkItem from id
    work_items = (wit_client.get_work_item(int(result.id)) for result in results)
    print_work_items(work_items)
...