Arhn - архитектура программирования

Где в VSTS REST API хранятся вложения шагов?

Я использую Python REST API VSTS для TFS / Azure Dev Ops (https://github.com/Microsoft/azure-devops-python-api).

Я хотел бы добавить приложения к некоторым этапам моих тестовых примеров, как я могу это сделать в веб-интерфейсе.

Вот так я хочу, чтобы моя ступенька выглядела так:

Шаг с вложением

... и когда вы запустите его, это будет выглядеть так:  введите описание изображения здесь

Однако мне не удалось найти, где хранится эта информация.

Это данные JSON для рабочего элемента моего тестового примера.

{
id: 224,
rev: 2,
fields: {
    System.AreaPath: "GM_sandbox\GM-Toto",
    System.TeamProject: "GM_sandbox",
    System.IterationPath: "GM_sandbox",
    System.WorkItemType: "Test Case",
    System.State: "Design",
    System.Reason: "New",
    System.AssignedTo: "Jeff",
    System.CreatedDate: "2019-01-03T01:43:09.743Z",
    System.CreatedBy: "Jeff",
    System.ChangedDate: "2019-01-03T02:12:07.15Z",
    System.ChangedBy: "Jeff",
    System.Title: "Titi",
    Microsoft.VSTS.Common.StateChangeDate: "2019-01-03T01:43:09.743Z",
    Microsoft.VSTS.Common.ActivatedDate: "2019-01-03T01:43:09.743Z",
    Microsoft.VSTS.Common.ActivatedBy: "Jeff",
    Microsoft.VSTS.Common.Priority: 2,
    Microsoft.VSTS.TCM.AutomationStatus: "Not Automated",
    Microsoft.VSTS.TCM.Steps: "<steps id="0" last="2"><step id="2" type="ValidateStep"><parameterizedString isformatted="true">&lt;DIV&gt;&lt;P&gt;Click on the rainbow button&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><parameterizedString isformatted="true">&lt;P&gt;Screen becomes Blue (see picture)&lt;/P&gt;</parameterizedString><description/></step></steps>"
},
_links: {
    self: {
        href: "https://my_server.com:8443/tfs/PRODUCT/23d89bd4-8547-4be3-aa73-13a30866f176/_apis/wit/workItems/224"
    },
    workItemUpdates: {
        href: "https://my_server.com:8443/tfs/PRODUCT/_apis/wit/workItems/224/updates"
    },
    workItemRevisions: {
        href: "https://my_server.com:8443/tfs/PRODUCT/_apis/wit/workItems/224/revisions"
    },
    workItemHistory: {
        href: "https://my_server.com:8443/tfs/PRODUCT/_apis/wit/workItems/224/history"
    },
    html: {
        href: "https://my_server.com:8443/tfs/PRODUCTi.aspx?pcguid=4107d6a2-eaaa-40b9-9a8d-f8fdbb31d4b7&id=224"
    },
    workItemType: {
        href: "https://my_server.com:8443/tfs/PRODUCT/23d89bd4-8547-4be3-aa73-13a30866f176/_apis/wit/workItemTypes/Test%20Case"
    },
    fields: {
        href: "https://my_server.com:8443/tfs/PRODUCT/23d89bd4-8547-4be3-aa73-13a30866f176/_apis/wit/fields"
    }
},
url: "https://my_server.com:8443/tfs/PRODUCT/23d89bd4-8547-4be3-aa73-13a30866f176/_apis/wit/workItems/224"
}

Есть идеи, где хранится эта информация?

И, если вы знакомы с Python REST API, как добавить вложение из файла и связать его с этапом тестирования?

Большое спасибо


  • Шаги, вероятно, будут выполняться через API: 1. Добавьте вложение 2. Создайте ссылку на вложение для рабочего элемента, убедитесь, что комментарий имеет вид [TestStep = x], где x - тестовый шаг, на котором вы хотите, чтобы он отображался. 03.01.2019
  • @Matt ,. это интересная идея. При добавлении вложения на шаге через веб-интерфейс действительно есть комментарий, начинающийся с [TestStep = x]: рядом с прикрепленным файлом. Однако просто добавить вложение с этим комментарием не получится. О каком типе ссылки вы говорите? 04.01.2019

Ответы:


1

Вот поток, использующий только azure-DevOps-rest-api

Создайте прикрепленный файл:

Запрос:

POST https://dev.azure.com/{organization}/_apis/wit/attachments?fileName=info.txt&api-version=4.1

Тело:

{"User text content to upload"}

Ответ:

{
    "id": "f5016cf4-4c36-4bd6-9762-b6ad60838cf7",
    "url": "https://dev.azure.com/{organization}/_apis/wit/attachments/f5016cf4-4c36-4bd6-9762-b6ad60838cf7?fileName=info.txt"
}

Создайте рабочий элемент:

Запрос:

PATCH https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/$Test Case?api-version=4.1

Тело:

[
  {
    "op": "add",
    "path": "/fields/System.Title",
    "from": null,
    "value": "Sample test case"
  },
  {
    "op": "add",
    "path": "/fields/Microsoft.VSTS.TCM.Steps",
    "value": "<steps id=\"0\" last=\"4\"><step id=\"2\" type=\"ActionStep\"><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;P&gt;test&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><description/></step><step id=\"3\" type=\"ActionStep\"><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;DIV&gt;&lt;P&gt;test&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;</parameterizedString><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><description/></step><step id=\"4\" type=\"ActionStep\"><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;P&gt;test&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><parameterizedString isformatted=\"true\">&lt;DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</parameterizedString><description/></step></steps>"
  },
  {
    "op": "add",
    "path": "/relations/-",
    "value": {
        "rel": "AttachedFile",
        "url": "https://dev.azure.com/{organization}/_apis/wit/attachments/f5016cf4-4c36-4bd6-9762-b6ad60838cf7?fileName=info.txt",
        "attributes": {
            "comment": "[TestStep=3]:",
            "name": "info.txt"
        }
    }
  }
]

Созданный тестовый пример будет выглядеть, как показано ниже. Что-то не так с нумерацией шагов для номера в комментарии. Похоже, что фактический шаг, на который вы хотите сослаться, должен быть +1.

TFS TestCase

Ключ должен иметь в атрибутах прикрепленного файла комментарий с "[TestStep=3]:", а также name для вложения.


В Python это даст примерно следующее:

  1. Создание вложения с функцией create_attachment

  2. Обновление тестового набора с url, comment и filename

Так что-то вроде этого ...

from vsts.work_item_tracking.v4_1.models.json_patch_operation import JsonPatchOperation

def add_attachment(wit_id: int, project: str, url:str, comment: str, step = 0, name = ""):
    """Add attachment already uploaded to a WorkItem
    """
    # For linking the attachment to a step, we need to modify the comment and add a name
    if step:
        attributes = {
            "comment":f"[TestStep={step}]:{comment}",
            "name": name if name else re.sub(r".*fileName=", "", url)
        }
    else:
        attributes = {"comment": comment}

    patch_document = [
        JsonPatchOperation(
            op="add",
            path="/relations/-",
            value={
                "rel": "AttachedFile",
                "url": url,
                "attributes": attributes,
            },
        )
    ]
    return client.wit.update_work_item(patch_document, wit_id, project)

attachment = client_wit.create_attachment(stream, project, 'smiley.png')
add_attachment(tcid, project, attachment.url, 'Attaching file to work item', step=3)
04.01.2019
  • Я был так близок ... Мне просто нужно было добавить имя файла в атрибуты (я просто добавлял комментарий). Большое спасибо! 07.01.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..