Какой у вас опыт тестирования API (REST, GraphQL)?

Ответ

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

Ключевые аспекты тестирования:

  • Функциональность: Проверка эндпоинтов на соответствие спецификации (Swagger/OpenAPI).
  • Надежность: Тестирование негативных сценариев (400, 404, 500 ошибки), валидации входных данных.
  • Безопасность: Проверка авторизации (JWT, OAuth), прав доступа, инъекций.
  • Производительность: Проверка времени ответа, нагрузочное тестирование (например, с Locust).

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

import pytest
import requests

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

# Позитивный сценарий: получение ресурса
def test_get_user_success():
    headers = {"Authorization": f"Bearer {valid_token}"}
    response = requests.get(f"{BASE_URL}/users/1", headers=headers)

    assert response.status_code == 200
    data = response.json()
    assert data["id"] == 1
    assert "email" in data
    # Валидация по JSON Schema (используя библиотеку jsonschema)
    assert validate_schema(data, USER_SCHEMA)

# Негативный сценарий: запрос без авторизации
def test_get_user_unauthorized():
    response = requests.get(f"{BASE_URL}/users/1")
    assert response.status_code == 401

Инструменты: Postman (для ад-hoc тестов и коллекций), Swagger UI, Charles/Fiddler (для анализа трафика), специализированные библиотеки (requests, pytest, schemathesis для property-based тестирования).

Ответ 18+ 🔞

А, слушай, вот это я понимаю — тестирование API, это ж моя родная стихия, блядь! Не то что эти сказки про муму, в рот меня чих-пых!

Так вот, имею я, сука, опыт полного цикла, как говорится. И REST, и этот ваш GraphQL, который все такие умные полюбили. Всё на автомате, блядь, чтобы руками не тыкать, как последний распиздяй.

На что я, блядь, обычно смотрю, как ястреб:

  • Функциональность: А работает ли эта штука вообще, как в бумажке нарисовано? Swagger открыл — и по пунктам, блядь, всё проверяю. Не должно быть такого, что в спецификации одно, а в жизни — пиздец и одни ошибки.
  • Надёжность: А что будет, если я, как самый ебнутый пользователь, начну слать всякую дичь? Пустые поля, отрицательные числа, строку длиной в овердохуища символов? Должно красиво отваливаться с понятной ошибкой, а не падать в нокаут с пятисотой, сука.
  • Безопасность: А кто может сюда зайти? А если я без токена? А если с токеном уборщицы попробую удалить директора? Должно давать по рукам, блядь, сразу! И никаких SQL-инъекций, ёпта, это вообще моветон.
  • Производительность: А не тормозит ли это чудо? Запрос должен отрабатывать не за год, а быстро. А если десять тысяч таких запросов разом прилетит — не накроется ли всё медным тазом? Для этого у меня Locust припасён, чтоб нагрузить по полной.

Вот, смотри, как я обычно кодю на Python (pytest + requests), чтоб не быть голословным:

import pytest
import requests

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

# Сценарий, когда всё хорошо и работает
def test_get_user_success():
    headers = {"Authorization": f"Bearer {valid_token}"}
    response = requests.get(f"{BASE_URL}/users/1", headers=headers)

    # Ну, блядь, 200 статус же, а? Должен быть!
    assert response.status_code == 200
    data = response.json()
    # Айдишник тот ли вернули? Не подсунули ли левого пользователя?
    assert data["id"] == 1
    # Почта хотя бы есть в ответе, или её на луну унесло?
    assert "email" in data
    # И вообще, структура ответа соответствует схеме? (тут jsonschema подключается)
    assert validate_schema(data, USER_SCHEMA)

# А вот это любимый сценарий — попробовать без авторизации
def test_get_user_unauthorized():
    response = requests.get(f"{BASE_URL}/users/1")
    # Должен послать нахуй с кодом 401, а не молча данные отдать!
    assert response.status_code == 401

Чем пользуюсь, блядь, в хозяйстве: Postman — для быстрых проверок и чтобы коллегам коллекции кидать; Swagger UI — чтобы глазами пробежаться; Charles/Fiddler — если заподозрил какую-то подозрительную хуйню в трафике; ну и куча библиотек — requests, pytest, а ещё schemathesis для такого изощрённого тестирования, где ты не сценарии пишешь, а свойства системы проверяешь. Вообще, инструментов — как говна за баней, выбирай не хочу!