Всем привет! Меня зовут Вова Романов, я занимаюсь развитием инструментов тестирования в Росбанке. В прошлом году мы перешли на платформу тест-менеджмента 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 более красиво, я же предлагаю готовый рабочий вариант.