Опишите ваш опыт тестирования REST API.

Ответ

Имею комплексный опыт ручного и автоматизированного тестирования REST API.

Основные направления работы:

  1. Функциональное тестирование:

    • Проверка корректности CRUD операций (GET, POST, PUT, PATCH, DELETE).
    • Валидация кодов состояния HTTP (200, 201, 400, 401, 403, 404, 409, 500).
    • Проверка бизнес-логики и граничных условий.
  2. Тестирование данных:

    • Проверка структуры JSON ответа на соответствие контракту (использую JSON Schema или Pydantic).
    • Валидация типов данных, обязательных полей, форматов (email, date, UUID).
  3. Тестирование безопасности и авторизации:

    • Проверка эндпоинтов на наличие аутентификации (JWT, OAuth2, Basic Auth).
    • Тестирование ролевой модели доступа (RBAC).
    • Проверка на чувствительные данные в ответах.
  4. Тестирование производительности и надёжности:

    • Проверка ограничения частоты запросов (rate limiting).
    • Тестирование пагинации и сортировки.
    • Проверка обработки некорректных данных и устойчивости к сбоям.

Инструменты и технологии:

  • Для ручного тестирования/исследования: Postman, Swagger UI, cURL.
  • Для автоматизации: Python (библиотеки requests, pytest, pydantic), интеграция с Allure для отчётности.
  • Для валидации: JSON Schema, встроенные валидаторы Postman.

Пример автоматизированного теста на Python (pytest):

import requests
import pytest

BASE_URL = "https://api.example.com"

def test_create_and_retrieve_item():
    # 1. Создание нового ресурса (POST)
    payload = {"title": "Test Item", "count": 5}
    create_response = requests.post(f"{BASE_URL}/items", json=payload)
    assert create_response.status_code == 201
    created_item = create_response.json()
    item_id = created_item["id"]

    # 2. Получение созданного ресурса (GET)
    get_response = requests.get(f"{BASE_URL}/items/{item_id}")
    assert get_response.status_code == 200
    retrieved_item = get_response.json()

    # 3. Проверка целостности данных
    assert retrieved_item["id"] == item_id
    assert retrieved_item["title"] == payload["title"]
    assert retrieved_item["count"] == payload["count"]

Ответ 18+ 🔞

Да ты посмотри, какой у меня опыт, ёпта! Не просто там кнопки понажимать, а целый комплекс, блядь, ручного и автоматического тестирования этих ваших REST API. Прямо как хирург, только для эндпоинтов.

Чем конкретно мозги выношу этим API:

  1. Функционал, мать его:

    • Проверяю, чтобы все эти CRUD операции (создать, прочитать, обновить, удалить) работали, а не просто так, для галочки.
    • Смотрю, чтобы сервер не радовался, когда ему херню слать, а отвечал правильными кодами HTTP — 200, 400, 404, 500. Чтобы 500-ю ошибку не на пустой GET-запрос выдавал, а то бывает, пиздец.
    • Ломаю голову над бизнес-логикой и всеми этими граничными условиями. Что будет, если передать отрицательное число или строку длиной в овердохуища символов?
  2. С данными работаю:

    • Сверяю, чтобы JSON в ответе был не абы какой, а точно по контракту. Использую для этого JSON Schema или Pydantic, чтобы не гадать на кофейной гуще.
    • Валидирую всё: типы данных, обязательные поля, форматы (чтобы дата была датой, а не "позавчера").
  3. Безопасность, блядь:

    • Проверяю, защищены ли эндпоинты аутентификацией (JWT, OAuth и прочая муть). Чтобы без токена доступ был — ноль, как терпение мое в понедельник утром.
    • Тестирую ролевую модель. Чтобы юзер не мог админские штуки делать, а гость — приватные данные смотреть.
    • Ищу, не светит ли API в ответах чувствительной инфой типа паролей или номеров карт.
  4. Надёжность и производительность:

    • Проверяю rate limiting — чтобы ботовод не мог заDDOSить сервак.
    • Смотрю, как работает пагинация и сортировка. Чтобы на запрос "дай всё" не прилетало десять тыщ записей разом.
    • Люблю слать некорректные данные и смотреть, как система не падает, а красиво ругается. Устойчивость к сбоям — наше всё.

Чем воюю:

  • Для разведки и ручного тыка: Postman, Swagger UI, старый добрый cURL.
  • Для автоматизации, чтобы не делать одно и то же: Python с библиотеками requests, pytest и pydantic. Результаты потом в Allure вывожу — красота, а не отчёты.
  • Для валидации: JSON Schema и встроенные валидаторы в том же Postman.

Вот, смотри, как это в коде выглядит, простой пример:

import requests
import pytest

BASE_URL = "https://api.example.com"

def test_create_and_retrieve_item():
    # 1. Создаём новую хрень (POST)
    payload = {"title": "Test Item", "count": 5}
    create_response = requests.post(f"{BASE_URL}/items", json=payload)
    assert create_response.status_code == 201  # Должен быть "Создано", а не "Ой, всё"
    created_item = create_response.json()
    item_id = created_item["id"]

    # 2. Достаём только что созданную хрень (GET)
    get_response = requests.get(f"{BASE_URL}/items/{item_id}")
    assert get_response.status_code == 200  # Должен быть "ОК"
    retrieved_item = get_response.json()

    # 3. Сверяем, не подменили ли нам её по дороге
    assert retrieved_item["id"] == item_id
    assert retrieved_item["title"] == payload["title"]
    assert retrieved_item["count"] == payload["count"]

Вот так-то, не просто "проверил", а с пониманием, куда и зачем тыкаю.