Вопросы по тестированию API на собеседовании
Тестирование API это первое, что спрашивают у тестировщика после теории. Проверяют не знание кнопок Postman, а понимание протокола: какой код вернуть при ошибке валидации, чем PUT отличается от PATCH, что проверять кроме статуса ответа.
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- Интеграции и данные13
- Микросервисы и распределёнка13
- Практика тестирования API13
- Принципы REST13
- Безопасность12
- Сеть и протоколы12
- HTTP: методы и коды11
- Веб-основы11
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- Тестирование API на практике13 вопросов
- HTTP: методы и коды ответов11 вопросов
- Интеграции и тестовые данные13 вопросов
- Тестирование микросервисов13 вопросов
- Сеть и протоколы для тестировщика12 вопросов
- Принципы REST13 вопросов
- Безопасность API: что проверять12 вопросов
- Веб-основы для тестировщика11 вопросов
Примеры вопросов с разбором
- Чем позитивные тесты API отличаются от негативных?A)Позитивные тесты пишут разработчики, а негативные — тестировщики, по разным правиламB)Позитив — валидный запрос даёт успех; негатив — битый/неавторизованный даёт ошибкуC)Позитивные проверяют скорость ответа, а негативные — корректность данных в телеD)Негативные тесты запускают лишь после релиза, а позитивные — до него на стенде
показать ответ и разбор
+B)Позитив — валидный запрос даёт успех; негатив — битый/неавторизованный даёт ошибку// разбор: Позитивные тесты идут по счастливому пути: корректный запрос с валидными данными и правами возвращает ожидаемый успех (нужный код, правильное тело). Негативные проверяют устойчивость: битый JSON, отсутствующие поля, недопустимые значения, неавторизованный доступ, несуществующий ресурс — и убеждаются, что API отвечает корректной ошибкой (4xx с внятным телом), а не падает и не отдаёт 500. Полное покрытие требует и тех, и других: позитив подтверждает, что фича работает, негатив — что она безопасно обрабатывает всё остальное.
- Что означает идемпотентность HTTP-метода?A)Метод срабатывает мгновенно и не зависит от текущей нагрузки на сервер приложенияB)Повтор запроса даёт тот же итоговый результатC)Метод шифрует передаваемые данные, защищая их от перехвата по дороге к серверуD)Метод выполняется на сервере ровно один раз даже при нескольких повторных вызовах
показать ответ и разбор
+B)Повтор запроса даёт тот же итоговый результат// разбор: Идемпотентность значит, что многократное выполнение запроса приводит к тому же состоянию, что и однократное. GET ничего не меняет, PUT записывает одно и то же значение, DELETE повторно удаляет уже удалённое (результат тот же). POST не идемпотентен: каждый вызов создаёт новую сущность, поэтому повтор при таймауте даёт дубликат. Для тестировщика это карта рисков: где безопасно ретраить, а где нужен ключ идемпотентности.
- Как обеспечить, что повтор запроса на создание платежа не создаст второй платёж?A)Запретить клиенту повторять запрос — тогда платёж создастся ровно один разB)Ключ идемпотентности: клиент шлёт его с запросом, сервер по нему распознаёт повтор и не выполняет операцию дваждыC)Проверять сумму: если такой платёж уже был на ту же сумму, второй молча отклонятьD)Замедлить обработку, чтобы между двумя запросами прошло достаточно времени
показать ответ и разбор
+B)Ключ идемпотентности: клиент шлёт его с запросом, сервер по нему распознаёт повтор и не выполняет операцию дважды// разбор: Создание платежа не идемпотентно: при сетевом сбое клиент не знает, дошёл ли первый запрос, и ретраит — рискуя списать деньги дважды. Решение — ключ идемпотентности: клиент генерирует уникальный ключ на операцию и шлёт его в заголовке; сервер запоминает выполненные ключи и, увидев повтор, возвращает результат первого запроса, не создавая второй платёж. Так ретраи становятся безопасными. Тестировщик проверяет: повтор с тем же ключом даёт один платёж и тот же ответ, а с новым ключом — новый платёж; параллельные повторы тоже не задваивают.
- Что важно учитывать при тестировании GraphQL-API в отличие от REST?A)Один эндпоинт, клиент сам выбирает поля, а ошибки часто лежат в теле при коде 200B)Каждый ресурс лежит на отдельном URL, а состав полей задаётся через query-параметры в строке запросаC)Ответ приходит в бинарном виде, поэтому его проверяют через сгенерированный клиентD)Сервер сам решает, какие поля вернуть, и набор полей в ответе клиент не контролирует
показать ответ и разбор
+A)Один эндпоинт, клиент сам выбирает поля, а ошибки часто лежат в теле при коде 200// разбор: GraphQL — один эндпоинт (обычно /graphql), куда клиент шлёт запрос с точным списком нужных полей: это решает over-fetching (лишние данные) и under-fetching (не хватило, нужен второй запрос) REST. Особенность для тестировщика: транспортный код почти всегда 200, а частичные ошибки и нехватка прав лежат в теле ответа в массиве errors рядом с data — проверять надо и то, и другое. Плюс тестируют: пришли ли ровно запрошенные поля, глубину/сложность запроса, права на конкретные поля.
- Чем протокол TCP отличается от UDP?A)TCP работает исключительно в локальной сети, а UDP — только в глобальном интернетеB)TCP шифрует передаваемые данные, а UDP передаёт их в открытом видеC)TCP гарантирует доставку и порядок пакетов, UDP быстрый, но без гарантийD)TCP передаёт только текст, а UDP — исключительно двоичные данные
показать ответ и разбор
+C)TCP гарантирует доставку и порядок пакетов, UDP быстрый, но без гарантий// разбор: TCP устанавливает соединение (рукопожатие), гарантирует доставку, порядок и целостность, переспрашивает потерянные пакеты — но за счёт накладных расходов. UDP шлёт датаграммы без соединения и подтверждений: быстрее и легче, но пакеты могут потеряться или прийти не по порядку. TCP — для HTTP, БД, почты; UDP — для видеозвонков, стриминга, DNS-запросов, где важнее скорость. Шифрование и сетевая среда на выбор между ними не влияют.
- Что такое ресурс в REST-архитектуре?A)Сущность, адресуемая своим URI (/users/42); действие над ней задаёт HTTP-методB)Отдельная функция на сервере, вызываемая по имени с параметрами через адрес запросаC)Файл на диске сервера, который клиент скачивает по прямой ссылке из браузераD)Сессия пользователя на сервере, которая идентифицируется по cookie в запросе
показать ответ и разбор
+A)Сущность, адресуемая своим URI (/users/42); действие над ней задаёт HTTP-метод// разбор: В REST всё крутится вокруг ресурсов — именованных сущностей (пользователь, заказ, товар), у каждой свой адрес-URI: /users/42, /orders/17. Что делать с ресурсом, говорит HTTP-метод: GET — прочитать, POST — создать, PUT/PATCH — изменить, DELETE — удалить. Отсюда правило «существительные в пути, глаголы — это методы»: /users/42, а не /getUser?id=42. Такой единообразный дизайн предсказуем и удобно тестируется: один и тот же URI по-разному отвечает на разные методы.
- Что такое SQL-инъекция?A)Отказ базы, когда запрос без индекса перебирает всю таблицу и подвисаетB)Ошибка приложения при вставке в поле значения неверного типа данныхC)Ввод, который СУБД исполняет как часть SQL-запроса, а не как данныеD)Повреждение строки, когда два запроса пишут в неё одновременно без блокировки
показать ответ и разбор
+C)Ввод, который СУБД исполняет как часть SQL-запроса, а не как данные// разбор: Уязвимость возникает, когда пользовательский ввод конкатенируется в текст SQL-запроса. Тогда строка вроде ' OR '1'='1 меняет саму логику запроса: приложение исполняет ввод как код, а не воспринимает как данные. Итог — обход авторизации, чтение или порча чужих данных. Лечится параметризованными запросами (ввод всегда идёт как значение). Тестировщик проверяет поля негативным вводом со спецсимволами.
- Что описывает клиент-серверная модель веба?A)Клиент шлёт запрос, сервер обрабатывает его и возвращает ответB)Сервер сам инициирует отправку данных клиенту, а клиент лишь пассивно их принимаетC)Клиент и сервер — это две части одной программы в общей памяти одного процессаD)Клиент выполняет всю бизнес-логику, а сервер служит лишь для хранения файлов
показать ответ и разбор
+A)Клиент шлёт запрос, сервер обрабатывает его и возвращает ответ// разбор: В основе веба лежит обмен «запрос-ответ»: клиент (браузер, мобильное приложение, тестовый инструмент) формирует HTTP-запрос и шлёт его серверу; сервер выполняет логику, обращается к БД и возвращает HTTP-ответ. Стороны независимы и общаются по сети через согласованный протокол — клиент не знает внутреннего устройства сервера, сервер не хранит клиента у себя постоянно. Для тестирования API это ключ: можно слать запросы напрямую (Postman, код), минуя интерфейс, и проверять ответы сервера.
- Что такое коллекция в Postman?A)Один HTTP-запрос, сохранённый вместе с его последним полученным ответом от сервераB)Журнал всех запросов, которые сервер обработал за сессию, доступный для просмотраC)Набор сохранённых запросов (с окружениями и встроенными проверками), которые прогоняют и переиспользуютD)Список найденных в API дефектов с их серьёзностью и шагами воспроизведения
показать ответ и разбор
+C)Набор сохранённых запросов (с окружениями и встроенными проверками), которые прогоняют и переиспользуют// разбор: Коллекция Postman — организованная группа сохранённых HTTP-запросов, часто выстроенных в сценарий (логин → создать → проверить). К ним привязывают окружения (переменные baseUrl, токен), скрипты-проверки (tests) на код и тело, и данные. Коллекцию удобно переиспользовать, делиться ею с командой и запускать целиком — вручную или в CI через runner/Newman. Для тестировщика это способ превратить разовые ручные запросы в повторяемый, версионируемый набор проверок API.
это 9 из 98
Ещё 89 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Нужно ли знать код, чтобы тестировать API?
Для ручного тестирования достаточно понимать HTTP и уметь работать с инструментом вроде Postman. Код нужен, когда речь заходит об автотестах на API, и такие вопросы обычно идут отдельным блоком.
Что проверять в ответе кроме кода статуса?
Структуру тела и типы полей, обязательные и необязательные атрибуты, заголовки, время ответа, поведение при повторном запросе и корректность сообщений об ошибках.