Разделы портала

Онлайн-тренинги

.
Добавление правил в Postman
12.02.2019 00:00

Автор: Кристин Джеквони (Kristin Jackvony)
Оригинал статьи
Перевод
: Ольга Алифанова

Сегодня мы поговорим о добавлении правил в Postman-запросы. Мы уже говорили о том, что значат различные коды ответов на API-запросы, и как писать правила для них в Postman. Теперь мы добавим другие правила, которые более полно протестируют наши запросы.

Мы будем использовать созданную нами коллекцию Postman, поэтому если вы еще этого не сделали – настройте ее, прежде чем продолжать.

Первый тип правила, который мы обсудим – это правило "Время отклика". Оно убеждается в том, что ответ на запрос API пришел в течение приемлемого промежутка времени. Скажем, продакт-оунеры Swagger Pet Store решили, что пользователь должен добавлять нового питомца в течение не более чем одной секунды. Мы добавим правило, проверяющее это, в запрос "Add Pet". Кликните на этом запросе в списке коллекции в левой части экрана, и он откроется в главном окне. Нажмите на вкладку "Tests". В ней уже должно находиться правило кода ответа, которое мы добавили ранее. Кликните под ним, а затем на сниппете кода "Response time is less than 200 ms" справа. Вот что добавится в окне "Tests":

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

Сейчас тест проверяет, что время ответа менее 200 миллисекунд. Нам не нужна такая скорость, поэтому давайте поменяем правило. Сначала измените "Response time is less than 200ms" на "Response time is less than one second". Это заголовок теста. Теперь давайте поменяем само правило. Измените значение в "to.be.below" с 200 на 1000 (это тысяча миллисекунд, то есть одна секунда). Сохраните ваш запрос и нажмите кнопку "Send". В секции "Test Results" внизу экрана вы увидите, что правило отработало. Вы можете также посмотреть на верхнюю часть окна результатов и увидеть время отклика рядом с кодом статуса ответа.

Еще одно полезное правило – это "Ответ содержит строку". Оно проверяет, что тело ответа на запрос содержит определенную строку. Я часто использую его, если ожидаю сообщения об ошибке. Чтобы увидеть, как это работает, добавим новый негативный тест в нашу коллекцию. Мы вызовем ошибку 500, пытаясь добавить питомца с id, не являющимся числом. Наиболее простой способ создать такой запрос – это скопировать существующий запрос "Add Pet" и переименовать его в "Add Pet With Invalid ID". Если вы не знаете, как копировать и переименовывать запросы, посмотрите статью "Создание коллекции Postman".

Нам надо внести некоторые изменения в этот запрос перед добавлением нашего нового правила. В теле запроса измените id питомца со 100 на FOOBAR. Так как мы копировали запрос, то в нем уже есть несколько правил: одно из них проверяет скорость ответа (менее секунды), а другое – что код статуса ответа будет 200. Мы знаем, что код больше не будет 200, поэтому изменим тест, чтобы он выглядел так:

pm.test("Status code is 500", function () {
    pm.response.to.have.status(500);
});

Мы можем оставить правило времени отклика как есть, или убрать его. Теперь добавим новое правило. Найдите в списке сниппетов "Response body:Contains string", и нажмите туда. Вот что появится в окне "Tests":

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

Давайте переименуем его из "Body matches string" в "Error response is returned", а также изменим текст ответа со "string_you_want_to_search" на "something bad happened". Тут стоит отметить, что правила Postman чувствительны к регистру, поэтому не надо писать слово Something с заглавной буквы – в реальном ответе оно пишется со строчной.

Нажмите на кнопку "Send" и убедитесь, что оба теста получили сообщение "Pass" – как для кода статуса ответа, так и для теста на строку в ответе.

Теперь давайте рассмотрим более мощное правило: проверка значения JSON. Мы можем убедиться, что значения, которые вернулись в ответе – это значения, которых мы ожидали. Давайте посмотрим на запрос "Get Pet". Мы уже вносили правило, что код ответа должен быть 200, но это мало о чем нам говорит. Вполне возможно, в ответе приходит совсем не тот питомец, который нужен! Нам нужно убедиться, что приходит именно тот питомец, который требуется, не изучая ответ в подробностях. Добавим проверку значения JSON. Нажмите на поле под правилом "Response code", а затем найдите сниппет "Response body: JSON value check". Нажмите на него. Вот что появится в окне тестов:

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

Измените имя теста с "Your test name" на "Body contains pet id". Обратите внимание, что следующая строчка кода создает переменную jsonData. Это интерпретированная версия JSON-ответа. В третьей строчке теста мы поменяем "jsonData.value" на "jsonData.id", так как хотим убедиться, что нужный нам id приходит в ответе. И, наконец, значение "to.eql" менять не нужно, потому что нам нужен id 100, а это значение там уже стоит. Когда вы закончите редактировать тест, он должен выглядеть так:

pm.test("Response contains id", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.id).to.eql(100);
});

Сохраните изменения, а затем нажмите на кнопку "Send". Оба теста должны пройти успешно.

Возможно, вы заметили, что в теле ответа "Get Pet" есть и другие id:

{
    "id": 100,
    "category": {
        "id": 1,
        "name": "Cat"
    },
    "name": "Grumpy Cat",
    "photoUrls": [
        "https://pbs.twimg.com/profile_images/948294484596375552/RyGNqDEM_400x400.jpg"
    ],
    "tags": [
        {
            "id": 1,
            "name": "Mixed breed"
        }
    ],
    "status": "available"
}

Как создать правила про category id или tag id? Это делается через интерпретацию JSON-ответа. Для демонстрации скопируйте созданный вами тест и отредактируйте его, чтобы он выглядел так:

pm.test("Response contains category id", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.category.id).to.eql(1);
});

Мы поменяли название теста в первой строчке кода, чтобы оно отражало суть теста. Вторая строчка кода осталась прежней. В третьей строчке мы изменили "jsonData.id" на "jsonData.category.id". Это значит, что вместо того, чтобы рассматривать id, мы смотрим в раздел категории, а затем на id внутри этой категории. И наконец, мы изменили значение ожидаемого нами id со 100 на 1.

Сохраните ваш запрос и снова нажмите на кнопку "Send". Теперь вы должны увидеть, как сработали все три правила.

Теперь вы знаете, как создавать правила, и можете добавить их для всех запросов в вашей коллекции Pet Store! Возможно, вы заметили, что запросы POST и PUT возвращают питомца в теле ответа, поэтому вы можете добавить там похожие правила. Конечно, вы захотите удостовериться, что после изменений данных о питомце с запросом PUT ("Update Pet") полученные через GET ("Verify Update Pet") данные содержат обновленную информацию.

При помощи правил можно сделать еще очень многое! В следующий раз мы рассмотрим переменные и используем их в запросах и правилах.

Больше информации по этой теме вы можете получить в курсе Тестирование REST API

Предыдущие статьи на эту тему

Введение в REST-запросы и тестирование GET-запросов

Тестирование POST-запросов

Тестирование PUT-запросов

Создание коллекции в Postman

Обсудить в форуме