Привет всем!
Давайте знакомиться.
Я, Надежда Дудник, главный инженер по тестированию в СБЕРе, а ещё ментор по тестированию ПО.
Как два года я введу блог по тестированию, помогаю начинающим специалистам по тестированию развивать свои хард скиллы, сочиняю тесты для закрепления знаний по основам тестирования и не только.
В рамках своего блога я поделилась информацией как составлять тест-кейсы по бэкенду, и захотелось также поделиться этой информацией здесь. Эта информация, в основном, для тех, кто начинает изучать основы тестирования, и вся информация находится в гугл таблицах, ссылки которых указаны ниже.
Хочу вам рассказать о важности написания тест-кейсов по API, а именно про стратегию составления тест-кейсов по бэку, где результатом является хорошо структурированный тест-кейс.
На работе я постоянно провожу ревью тестовых моделей по бэку, даю обратную связь, чтобы было качественное тестовое покрытие согласно требованиям.
Как вы знаете, что каждый тест состоит из предусловий, шагов и ожидаемых результатов.
Сперва необходимо составлять позитивные тесты — успешное прохождение сценария, затем негативные тесты с невалидными и/или недопустимыми данными, null для обязательных ключей и т.д..
При выполнении каждого запроса API нам необходимо и важно проверить:
-
корректность статуса кода;
-
полезную нагрузку ответа;
-
сам ответ от сервера: сообщение, ключ, значение, тип данных, структуру объектов;
-
заголовки ответа от сервера;
-
авторизацию с использованием методов аутентификации;
-
протокол HTTP / HTTPS согласно спецификации;
-
дополнительно доступы разных ролей, время ответа API, стиль формата обмена данными.
Сейчас я хочу продемонстрировать пример тест-кейса «Добавить нового питомца в магазин (Вызов метода POST)», используя сайт https://petstore.swagger.io/
Важно выполнить следующие шаги:
Отправить POST запрос https://petstore.swagger.io/v2/pet с телом: |
{ "id": 10, "category": { "id": 1, "name": "animal" }, "name": "Bulldog", "photoUrls": [ "https: //site.com/bulldog/photo" ], "tags": [ { "id": 1, "name": "#dog" } ], "status": "available" }
Проверить код состояния |
Проверить тело ответа от сервера |
Проверить структуру ответа |
Проверить заголовки ответа |
Ожидаемый результат:
HTTP Status: 200 OK Тело ответа в формате JSON возращается от сервера и будет иметь следующий вид: { "id": 10, "category": { "id": 1, "name": "animal" }, "name": "Bulldog", "photoUrls": [ "https: //site.com/bulldog/photo" ], "tags": [ { "id": 1, "name": "#dog" } ], "status": "available" }
Ожидаемый результат структуры ответа (более подробно):
Схема JSON отображена корректно, имена и типы полей соответствуют ожидаемым { "id": 10 - number, если "id" будет в таком виде "id": 0, то будет сгенерировано числовое значение включая вложенные объекты: "category": { "id": 1, "name": "animal" } "name": "Bulldog", - string "photoUrls": [ "https://site.com/bulldog/photo" ], - array вложенная структура данных, содержащая объекты и массивы: "tags": [ { "id": 1, "name": "#dog" } ], "status": "available" - string } значения полей соответствуют ожидаемым значениям из тестовых данных отдельно проверить: "category": { "name": "animal" - string } - object "tags": [ { "name": "#dog" - string } ] - array with objects
Шаблон тест-кейсов API данного примера предлагаю просмотреть по ссылке.
Рассмотрим пример тест-кейсов для сайта https://try.vikunja.io/login .
Регистрация пользователя:
Отправить POST запрос https://try.vikunja.io/api/v1/register с телом
Postman: Body -> Raw -> JSON { "email": "protestirovaniye@mail.ru", "id": 0, "password": "hard389sS", "username": "NadezhdaQA" }
Ожидаемый результат:
Запрос успешно отправлен на сервер. HTTP Status: 200 OK Пользователь успешно зарегистрировован. Тело ответа в формате JSON возращается от сервера и будет иметь следующий вид: { "created": "format of date", "email": "protestirovaniye@mail.ru", "id": 1254, "updated": "format of date", "username": "NadezhdaQA", "web.Auth": null } где "id": 1254 - значение сгенерировано системой
Шаблон тест-кейсов API для сайта Vikunja смотреть по ссылке.
Дополнительно я подготовила тест-кейсы на «Проверку идемпотентности» для тех, кто в начале пути по изучению основ тестирования и этот материал для закрепления знаний.
В данной информации можно скачать коллекцию, в которой я указала просто запросы на методы POST, PUT, GET, DELETE. Ваша задача в некоторых запросах подставить свои значения.
Эти тест-кейсы я расписала детально для вас. В проектных задачах по тестированию редко кто так составляет детально тест-кейсы API в TMS, потому что мало времени на подробное описание тест-кейсов и на их актуализацию.
Если у вас возник вопрос, что такое «Идемпотентность», то по вышеуказанной ссылке имеется полезный материал на теорию идемпотентности.
Пример тест-кейсов по идемпотентности:
Основные шаги при отправке запроса методом POST:
Отправить POST запрос https://petstore.swagger.io/v2/pet с телом: |
Тело запроса: { "category": { "id": 1, "name": "animal" }, "name": "Bulldog", "photoUrls": [ "https://site.com/bulldog/photo" ], "tags": [ { "id": 1, "name": "#dog" } ], "status": "pending" }
Проверить код состояния |
Проверить тело ответа от сервера |
Повторно отправить POST запрос https://petstore.swagger.io/v2/pet с телом |
и |
Ещё раз отправить POST запрос https://petstore.swagger.io/v2/pet с телом |
Ожидаемый результат:
HTTP Status: 200 OK Создан объект питомца с id = <генерируется новое значение> Тело ответа в формате JSON возращается от сервера и будет иметь следующий вид: { "id": <генерация нового значения типа int (number)>, "category": { "id": 1, "name": "animal" }, "name": "Bulldog", "photoUrls": [ "https://site.com/bulldog/photo" ], "tags": [ { "id": 1, "name": "#dog" } ], "status": "pending" } POST /add_pet не идемпотентен. При каждом его вызове будет добавлен новый питомец в магазин. Происходит изменение состояния.
В заключении, хочу сказать, что должно быть сгенерировано достаточно тест-кейсов, чтобы обеспечить функциональное покрытие в полном объеме.
Хочу поблагодарить за прочтение и рекомендую использовать данные шаблоны при выполнении тестовых и проектных задач.
ссылка на оригинал статьи https://habr.com/ru/articles/718560/
Добавить комментарий