Стратегия тестирования API
Будучи новичком сложно подойти к тестированию API. На собеседованиях часто дают задание протестировать определенный метод. И из-за волнения можно забыть какие-то моменты, даже имея опыт практического тестирования за плечами.
Здесь я хочу поделиться стратегией тестирования API, собранной на моем опыте.
- Проводим функциональное тестирование API: чтобы убедиться, что функции API работают корректно, без багов и согласно требованиям.
- Проверяем, соответствуют ли требованиям эндпойнты, типы данных, все ли функции готовы и работают.
Далее основные пункты, которые проверяем. - Статус код (Status code). Корректный ли код приходит для определенных тестов. При создании объекта - 201 Created. Нет запрашиваемого ресурса - 404 Not Found. Проверка тела ответа (Response body). - Корректные ли возвращаются имена полей, типы данных и значения. Проверяем этот пункт даже для ответов с ошибками, сообщения об ошибках должны приходить корректно и согласно требованиям. - Заголовки (Headers). Они важны, влияют на безопасность и производительность. - Оценить время выполнения запроса. Даже если запрос выполняется успешно, но очень долго, это можно отнести к провалу теста.
Затем более детально проводим проверки. Их можно разделить на несколько категорий, которые помогут составить план тестов: * Основные позитивные проверки. * Расширенные позитивные проверки, например, проверки с необязательными параметрами и полями в теле запроса. * Негативные проверки с валидными параметрами и значениями в теле. * Негативные проверки с невалидными параметрами и значениями.
- Тесты безопасности, авторизации, прав. Например, может ли пользователь запрашивать какие-то данные, если у него нет на это прав.
- Тесты, чтобы сломать функциональность.
Позитивные проверки - нацелены на основную функциональность API, включая опциональные параметры проверяем дополнительные функциональности. Негативные тесты проверяют правильно ли обработает приложение проблемные ситуации, корректно ли обработает ошибку пользовательского/серверного поведения.
Как можно проводить тестирование? Начинаем изолированно для каждого метода, один запрос - одна проверка. Если уже такие проверки приводят в негативному результату, то нет смысла проводить более сложное тестирование. Затем более сложные тесты, включающие несколько методов, зависящих друг от друга. Такие тесты демонстрируют действия пользователя, например, пользовательно логинится в приложение, запрашивает ресурс, изменяет или удаляет его. Тестирование - комбинация API и UI тестов, т е взаимодействуем с фронтэндом приложения, проверяем корректно ли там отображаются действия, которые выполнили мы на уровне апи.
Параметры методов
Знаете ли вы, что есть параметры в методах и какие они бывают? Вы их наверняка видели в адресной строке браузера, когда искали какую-либо информацию в интернете.
Вот пример, запрос "Футбол" в яндексе https://yandex.ru/search/?lr=967&clid=2313447-122&win=507&text=%D1%84%D1%83%D1%82%D0%B1%D0%BE%D0%BB Все, что находится после знака вопроса - параметры, это Query параметры. Они представляют собой пару: ключ-значение (lr=967), отправляя запрос, мы задаем значение каждого параметра. Так вот квери параметры предназначены для некой фильтрации запрашиваемых ресурсов, чтобы пользователь получал более детальную выборку, а не всю информацию, что лежит на сервере по указанному адресу.
Есть еще Path параметры, они входят в урл запроса и позволяют запросить конкретный ресурс. Вот пример двух запросов: https://yandex.ru/news/quotes/1.html?appsearch_header=1 https://yandex.ru/news/quotes/23.html?appsearch_header=1. Самая последняя часть url является path параметром и может принимать различные значения.
Приложение Bookmates
Попробовать тестирование можно на тренировочном приложении Bookmates, которое я написала для этих целей. Swagger Bookmates
Приложение Bookmates - площадка для книголюбов, она дает возможность зарегистрироваться и постить свои заметки о книгах, собирать лайки и комментарии. Находить единомышленников, обсуждать книги, проводить совместные чтения. Отслеживать свой прогресс по чтению, делать заметки в ходе чтения. Искать любые посты об интересных тебе книгах.
- Метод Get Books - запрашивает список записей о всех книгах.
- Метод Get Book - запрашивает информацию о конкретной книге, указывая в запросе ее id.
Выполните запрос в браузере по данному урл https://legchikova.herokuapp.com/books/ (вставьте ссылку в поисковую строку) Отображается текст, это ответ от сервера в формате json. Представляет собой список записей о книгах, хранящихся в базе данных приложения.
Выполните второй запрос https://legchikova.herokuapp.com/books/17. Тут 17 (например) уникальный id записи, и этот запрос выводит клиенту только одну запись для книги с указанным в адресе id.
Первый метод Get Books имеет квери параметры: limit и rating. Указывая их значения в запросе, можно получить более конкретную информацию или как-то ограничить ответ. Например, limit указывает, сколько записей вы хотите, чтобы вам вернул сервер. Иногда не нужно запрашивать много информации, чтобы что-то посмотреть, укажем limit=2 и проверим то, что нас интересует, по двум json-ам. Параметр rating указывает на то, с каким рейтингом нужно отобрать книги для вывода. Например, rating=5 вернет все книги, рейтинг которых больше или равен 5.