Всем привет! Меня зовут Вова Романов, я занимаюсь развитием инструментов тестирования в Росбанке. В прошлом году мы перешли на платформу тест-менеджмента Zephyr Scale и сейчас активно внедряем ее в команды. Недавно задались вопросом: а можно ли передавать результаты запросов Postman в тестовые прогоны Zephyr с определенным количеством проверок (тестов) в каждом запросе? Ведь есть API Zephyr для публикации результатов, и нужно всего лишь подружить его с результатами запросов Postman. Готового рецепта в Сети не нашлось, так что в это посте я поделюсь тем, как это сделали мы.

Пример

Представим, что в Zephyr у нас есть тест-кейс, состоящий из трех шагов: проверка кода состояния, имени и ключа. Есть коллекция Postman, в которой есть один GET. По запросу должно выполниться три проверки: код состояния, имя, ключ. Также в коллекцию добавлен POST для публикации результатов в Zephyr.

Это упрощенный пример, реальные коллекции будут намного больше. Но для простоты понимания достаточно одного GET и POST.

Что в GET?

Возьмем простой запрос в Zephyr — получить ключ и имя тестового прогона:

Хотим выполнить три проверки:

  • Test_1 — код состояния равняется «200»;

  • Test_2 — имя равняется «ТК155333»;

  • Test_3 — ключ равняется «TT-C39».

Сразу понимаем, что если Test_1 провалится, выполнять остальные не будет смысла (считаем их заблокированными). А если Test_1 успешно прошел, то выполняем Test_2 и Test_3.

Чтобы записывать результаты выполнения тестов, мы используем переменные коллекции Postman. Например, если тест успешно выполнился, создаются две переменные: «Результат = Pass» и «Комментарий = Успех». Комментарий необязателен, но с ним приятнее.

{pm.collectionVariables.set("Test_2_Результат", "Pass"); pm.collectionVariables.set("Test_2_Коммент", "Успех");}

На основании этих переменных позже будет формироваться POST, который запишет в Zephyr результат выполнения тест-кейса в целом и его шагов (с комментарием). Не забываем, что кроме результата шагов тест-кейса, необходимо добавить условие: если хоть один тест провалился, то весть тест-кейс должен считаться провальным.

Что в итоге получилось на вкладке Tests:

if (pm.response.code == "200") // Главное условие. Если провалится Test_1, то нет смысла выполнять Test_2 и Test_3
  {pm.test("Test_1", function () {pm.response.to.have.status(200);});
  pm.collectionVariables.set("Test_1_Результат", "Pass"); pm.collectionVariables.set("Test_1_Коммент", "Успех"); // Создание переменных в коллекцию, для отправки результата

  var jsonDate = pm.response.json(); // распарсить ответ запроса для Test_2 и Test_3

  pm.test("Test_2", function () {pm.expect(jsonDate.name).to.eql("Тестовый цикл");})
    if (jsonDate.name == "Тестовый цикл")
    {pm.collectionVariables.set("Test_2_Результат", "Pass"); pm.collectionVariables.set("Test_2_Коммент", "Успех");}
    else {pm.collectionVariables.set("Test_2_Результат", "Fail"); pm.collectionVariables.set("Test_2_Коммент", "Получаем имя " + jsonDate.name);}

  pm.test("Test_3", function () {pm.expect(jsonDate.key).to.eql("TT-C39");})
    if (jsonDate.key == "TT-C39")
    {pm.collectionVariables.set("Test_3_Результат", "Pass"); pm.collectionVariables.set("Test_3_Коммент", "Успех");}
    else {pm.collectionVariables.set("Test_3_Результат", "Fail"); pm.collectionVariables.set("Test_3_Коммент", "Получаем код " + jsonDate.key);}
  }
else
  {pm.test("Test_1", function () {pm.response.to.have.status(200);});
  pm.collectionVariables.set("Test_1_Результат", "Fail"); pm.collectionVariables.set("Test_1_Коммент", "Статус код " + pm.response.code);
  pm.collectionVariables.set("Test_2_Результат", "Blocked"); 
  pm.collectionVariables.set("Test_3_Результат", "Blocked");}

if (pm.collectionVariables.get("Test_1_Результат") == "Fail" || pm.collectionVariables.get("Test_2_Результат") == "Fail" || pm.collectionVariables.get("Test_3_Результат") == "Fail") // Если хоть один из тестов провалился, то тест-кейс считается провальным
{pm.collectionVariables.set("Test_Результат", "Fail");}
else {pm.collectionVariables.set("Test_Результат", "Pass");}

Если тесты прошли успешно, то в переменных коллекции Postman появятся результаты тестов:

Как отправить результаты

Для отправки результатов используем:

Где «TT-C39» — номер тестового цикла Zephyr, в котором находится тест-кейс с нашими проверками. На вкладке Body прописываем JSON загрузки результатов, где ссылаемся на созданные переменные коллекции Postman и пишем, в какой тест-кейс загружаем (TT-T75). Скрипт получился такой:

[
    {
        "status": "{{Test_Результат}}",
        "testCaseKey": "TT-T75",
        "scriptResults": [
        {
          "index": 0,
          "status": "{{Test_1_Результат}}",
          "comment": "{{Test_1_Коммент}}"
        },
           {
          "index": 1,
          "status": "{{Test_2_Результат}}",
          "comment": "{{Test_2_Коммент}}"
        },
           {
          "index": 2,
          "status": "{{Test_3_Результат}}",
          "comment": "{{Test_3_Коммент}}"
        }
      ]
    }
]

И вишенка на торте: после выполнения POST должны очиститься переменные коллекции. Для этого в POST на вкладке Tests добавляем:

pm.collectionVariables.clear(); // Очищаем переменные коллекции

Итоги

Теперь мы можем проводить тестирование в Postman и избавиться от бесячего ручного заполнения результатов в Zephyr. Возможно, кто-то сможет написать JavaScript более красиво, я же предлагаю готовый рабочий вариант.

Комментарии (1)


  1. Keeper9
    05.04.2023 11:57