Как вы используете Swagger (OpenAPI) в процессе тестирования?

Ответ

Swagger (OpenAPI) — ключевой инструмент для тестирования REST API.

Как я его применяю:

  1. Изучение и валидация спецификации:

    • Проверяю полноту и корректность OpenAPI-спецификации (swagger.json или openapi.yaml).
    • Изучаю эндпоинты, параметры, схемы запросов и ответов.
  2. Ручное и исследовательское тестирование через Swagger UI:

    • Быстрая отправка запросов для проверки доступности и базовой логики.
    • Валидация ответов на соответствие задекларированным схемам и статус-кодам.
  3. Автоматизация тестов на основе спецификации:

    • Генерация клиентского кода или статических данных для тестов.
    • Использование библиотек для валидации ответов сервера против схемы OpenAPI.

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

import requests
import pytest
from openapi_core import validate_response
from openapi_core.spec.shortcuts import create_spec

# Загружаем спецификацию
spec_dict = requests.get('http://api.example.com/openapi.json').json()
spec = create_spec(spec_dict)

@pytest.mark.api
def test_get_user_by_id():
    """Тест проверяет, что ответ GET /users/{id} соответствует OpenAPI-схеме."""
    # Выполняем запрос
    response = requests.get('http://api.example.com/users/123')

    # Валидируем ответ против спецификации
    validate_response(spec, request=None, response=response)

    # Дополнительные assertions
    data = response.json()
    assert response.status_code == 200
    assert data['id'] == 123
    assert 'email' in data

Почему это важно: OpenAPI служит единым источником истины (single source of truth) для контракта API, что позволяет автоматизировать валидацию и снизить количество ошибок, связанных с несоответствием документации.

Ответ 18+ 🔞

Да ты посмотри, какой у нас тут инструмент подвезли — Swagger, он же OpenAPI, блядь! Это ж не просто бумажка, это, сука, священный контракт между фронтом и беком, между тобой и тем, кто этот API на коленке клепал. А я его, этот контракт, как хитрая жопа, использую по полной программе.

Как я с ним вожусь, этот ваш Swagger:

  1. Читаю, как манускрипт, и ищу подвох:

    • Беру этот самый swagger.json или openapi.yaml и начинаю его, блядь, вылизывать. Всё ли там есть? Все эндпоинты описали, или как обычно — «а это и так понятно»? Параметры, схемы ответов — чтобы ни одна, сука, запятая не сбежала.
    • Это ж основа основ, ёпта! Если тут херня — дальше можно даже не смотреть.
  2. Быстрые наскоки через Swagger UI:

    • Ну, это вообще песня, блядь. Открыл браузер, тыкнул кнопочку «Try it out» — и понеслась. Проверил, жив ли сервер, не отдаёт ли он вместо JSON'а какую-нибудь, блядь, «Ошибка 500: всё пропало».
    • И он же, гад, сразу подсвечивает, если ответ не по схеме прилетел. Красота, а не инструмент, в рот меня чих-пых!
  3. Автоматизация, мать её:

    • Вот тут начинается магия. Из этой спецификации можно, сука, код нагенерить или тестовые данные надергать.
    • А самое главное — каждый ответ от сервера можно тыкать в эту спецификацию и спрашивать: «Ну что, уважаемый, ты соответствуешь тому, что сам же обещал?». И если нет — сразу пиздец, тест красный.

Вот, смотри, как это в коде выглядит (Python, pytest):

import requests
import pytest
from openapi_core import validate_response
from openapi_core.spec.shortcuts import create_spec

# Тащим эту библию - спецификацию
spec_dict = requests.get('http://api.example.com/openapi.json').json()
spec = create_spec(spec_dict)

@pytest.mark.api
def test_get_user_by_id():
    """Проверяем, что GET /users/{id} не пиздит в ответах."""
    # Шлём запрос
    response = requests.get('http://api.example.com/users/123')

    # А теперь, сука, валидируем! Совпадает ли реальность с обещаниями?
    validate_response(spec, request=None, response=response)

    # Ну и для верности свои проверки
    data = response.json()
    assert response.status_code == 200
    assert data['id'] == 123
    assert 'email' in data  # Где почта, Карл?!

А почему это, блядь, так важно? Да потому что этот OpenAPI — он и есть та самая единственная правда. Все на него смотрят: и разработчики, и тестировщики, и, не дай бог, клиенты. Если он кривой — потом начинается: «а я думал, тут строку ждут», «а мне сказали, что поле optional». Сплошной пиздец и волнение ебать. А так — есть документ, есть автоматом проверка. Отклоняешься от курса? Получай по ебалу красным тестом. Честно и прозрачно, как в хорошем борделе.