Проверьте, существует ли тестовый пример перед его созданием - TFS 2018 - PullRequest
0 голосов
/ 16 января 2019

Я создаю тестовый пример в TFS 2018, используя почтальон, как это:

curl -X POST \
  'https://TFSURL:443/DefaultCollection/PROJECT/_apis/wit/workitems/$Test%20Case?api-version=4.1' \
  -H 'Authorization: Basic MYKEY' \
  -H 'Content-Type: application/json-patch+json' \
  -d '[
    {
        "op": "add",
        "path": "/fields/System.AreaPath",
        "from": null,
        "value": "TEST\\Automation"
    },
    {
        "op": "add",
        "path": "/fields/System.IterationPath",
        "from": null,
        "value": "TEST\\Sprint 8"
    },
    {
        "op": "add",
        "path": "/fields/System.Title",
        "from": null,
        "value": "Sample task"
    },
    { 
        "op": "add", 
        "path": "/fields/Microsoft.VSTS.TCM.Steps",
        "value": "<steps id=\"0\">
        <step id=\"1\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 1</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 1</parameterizedString><description/></step>
        <step id=\"2\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 2</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 2</parameterizedString><description/></step>
        <step id=\"3\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 3</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 3</parameterizedString><description/></step>
        <step id=\"4\" type=\"ValidateStep\"><parameterizedString isformatted=\"true\">Input step 4</parameterizedString><parameterizedString isformatted=\"true\">Expectation step 4</parameterizedString><description/></step></steps>"
    } 
]'

Как я могу проверить перед отправкой этого запроса, что этот тест существует, чтобы я мог обновлять его вместо создания нового каждый раз?

Я ожидал сделать это:

  • поиск имени автоматизации, которое должно быть уникальным в tfs (имя метода из скрипта автоматизации), и посмотреть, возвращает ли оно что-то

Похоже, что в tfs есть способ сделать запрос для получения всех рабочих элементов, но я не уверен, что вы можете вернуться, основываясь на поле заголовка элемента. ( Страница справки о том, как сделать этот запрос )

Я пытался использовать API поиска, чтобы вернуть результаты, если что-то с таким именем существует в tfs, но я получаю сообщение об ошибке, которое не знаю, как решить

  curl -X POST \
      'https://TFSURL:443/DefaultCollection/PROJECT/_apis/search/workitemsearchresults?api-version=4.1-preview' \
  -H 'Authorization: Basic MYKEY' \
  -H 'Content-Type: application/json' \
  -d '[
    {
        "searchText": "Sample task",
        "$skip": 0,
        "$top": 1,
        "filters": {
            "System.AreaPath": [
                "TEST\\Automation"
            ]
        },
        "$orderBy": [
            {
                "field": "system.id",
                "sortOrder": "ASC"
            }
        ],
        "includeFacets": true
    }
]'
'

Ответ:

{
    "count": 1,
    "value": {
        "Message": "An error has occurred."
    }
}

1 Ответ

0 голосов
/ 18 января 2019

Просто чтобы ответить на мой собственный вопрос на тот случай, если кому-то еще это понадобится, как я уже читал, вы не можете сделать это с помощью одного или двух различных вызовов API. для следующего решения я создал несколько запросов REST API к TFS и вызвал / обработал их с помощью Python> 3.

Что я сделал, чтобы обновить контрольный пример, если он существует, или создать новый, если его нет:

  • Создайте в tfs запрос, который возвращает все тестовые случаи
  • Обновить запрос, используя запрос API и ключ созданного вами запроса (я указал итерацию и команду специально в теле запроса) ( help )
  • Создание запроса API для получения результата этого запроса ( help )
  • В цикле я перебирал все идентификаторы тестовых случаев, которые возвращал запрос
  • В том же цикле я использовал идентификатор тестового примера для доступа к запросу с конкретным рабочим элементом ( help )
  • Затем я сравнил заголовок возвращаемого элемента с заголовком, который я хочу создать из моего сценария автоматизации (ClassName_MethodName)
  • Если те заголовки, где то же самое, я делаю запрос на обновление этого теста, используя идентификатор теста, который я получил, а затем вырываюсь из цикла
  • Если заголовки были другими, я создаю новый контрольный пример, а затем вырываюсь из цикла

Я знаю, что это не самое быстрое решение, но, по крайней мере, оно работает! Если есть другой способ, который проще и быстрее, я буду более чем счастлив следовать ему.

...