Skip to content

bivex/fictional-meme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестирование API с Schemathesis 🚀

Привет! Это README по тестированию нашего API для рекламной платформы с помощью Schemathesis. Мы тут собрали все необходимое для автоматического тестирования OpenAPI спецификаций - от простых проверок до комплексных сценариев.

📋 Что у нас есть

🗺️ OpenAPI Спецификация (openapi.yaml)

Это сердце нашего API - подробная документация всех эндпоинтов, параметров, ответов и ошибок. Спецификация описывает:

  • Кампании: создание, обновление, пауза/возобновление
  • Лендинги: управление посадочными страницами с A/B тестированием
  • Офферы: настройка предложений с весами и payout'ами
  • Аналитика: детальные метрики по трафику и конверсиям
  • Клики: трекинг трафика с fraud detection и 5-level суб-трекингом

🖥️ Mock Сервер (mock_server_g.py)

Flask-приложение, которое имитирует реальный API. Полностью совместимо с OpenAPI спецификацией:

  • ✅ Все эндпоинты реализованы
  • ✅ Правильные HTTP коды ответов
  • ✅ Валидация данных по схемам
  • ✅ Аутентификация (Bearer, Basic, API-Key)
  • ✅ Fraud detection для кликов
  • 🔄 Поддержка CORS для тестирования из браузера

🧪 Тестирование с Schemathesis

Schemathesis - это инструмент для property-based тестирования REST API. Он:

  1. Читает OpenAPI спецификацию
  2. Генерирует тестовые запросы на основе схем
  3. Отправляет запросы к API
  4. Проверяет соответствие ответов спецификации

🎯 Преимущества Schemathesis

  • Автоматическая генерация тысяч тестовых случаев
  • Проверка edge cases (пустые строки, null значения, границы диапазонов)
  • Property-based testing - находит баги, которые пропустят обычные тесты
  • Интеграция с pytest для CI/CD
  • Подробные отчеты о найденных несоответствиях

🚀 Быстрый старт

1. Запуск Mock Сервера

# Из директории goservik/
python run_server_g.py

Сервер запустится на http://127.0.0.1:8000

2. Установка Schemathesis

pip install schemathesis

3. Базовое тестирование

# Тестируем все эндпоинты
schemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1

# Только health check (быстрая проверка)
schemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1 --endpoint="/health"

# Тестируем кампании
schemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1 --endpoint="/campaigns"

📊 Примеры тестов

Health Check

schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/health" \
  --checks=all

Кампании

# Создание кампаний с различными данными
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/campaigns" \
  --checks=all \
  --hypothesis-max-examples=50

Click Tracking

# Тестируем клики с суб-трекингом
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/click" \
  --checks=all

🔧 Продвинутые опции

Аутентификация

# С Bearer токеном
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --header="Authorization: Bearer test_jwt_token_12345"

# С API Key
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --header="X-API-Key: test_api_key_abcdef123"

Фильтры и ограничения

# Только GET запросы
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --method=GET

# Максимум 100 примеров на эндпоинт
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --hypothesis-max-examples=100

# Игнорировать определенные проверки
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --checks=not response_schema_conformance

Отчеты

# JUnit XML для CI/CD
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --junit-xml=schemathesis-report.xml

# JSON отчет
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --output=schemathesis-report.json

🎪 Что проверяет Schemathesis

✅ Схема ответа

  • Структура JSON соответствует OpenAPI схеме
  • Типы данных правильные (string, number, boolean, etc.)
  • Обязательные поля присутствуют
  • Форматы валидны (email, date-time, UUID)

✅ HTTP статусы

  • Правильные коды для успешных ответов
  • Корректные коды ошибок (400, 401, 404, 500)
  • Заголовки соответствуют спецификации

✅ Параметр валидация

  • Query параметры в правильном формате
  • Path параметры валидны
  • Request body соответствует схеме

✅ Edge Cases

  • Пустые строки и null значения
  • Граничные значения (min/max)
  • Специальные символы
  • Очень длинные строки

🚨 Типичные проблемы и решения

Проблема: Connection refused

# Сервер не запущен - запусти его!
python run_server_g.py

Проблема: 401 Unauthorized

# Добавь аутентификацию для защищенных эндпоинтов
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --header="Authorization: Bearer test_jwt_token_12345"

Проблема: Слишком много тестов

# Ограничь количество примеров
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --hypothesis-max-examples=20

📈 Интеграция в CI/CD

GitHub Actions пример

name: API Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.9'

      - name: Install dependencies
        run: |
          pip install schemathesis flask gunicorn

      - name: Start mock server
        run: |
          python run_server_g.py &
          sleep 5

      - name: Run Schemathesis tests
        run: |
          schemathesis run openapi.yaml \
            --base-url=http://127.0.0.1:8000/v1 \
            --junit-xml=schemathesis-report.xml \
            --hypothesis-max-examples=50

      - name: Upload test results
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: schemathesis-results
          path: schemathesis-report.xml

🎯 Лучшие практики

1. Начинай с малого

# Сначала протестируй один эндпоинт
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/health"

2. Используй разные уровни аутентификации

# Public endpoints (без auth)
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/health"

# Bearer token endpoints
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/campaigns" \
  --header="Authorization: Bearer test_jwt_token_12345"

# API Key endpoints
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --endpoint="/clicks" \
  --header="X-API-Key: test_api_key_abcdef123"

3. Монитор покрытие

# Смотри какие эндпоинты протестированы
schemathesis run openapi.yaml \
  --base-url=http://127.0.0.1:8000/v1 \
  --show-errors-tracebacks \
  --verbosity=verbose

🎉 Заключение

Schemathesis - это мощный инструмент для автоматического тестирования API. Он находит баги, которые легко пропустить при ручном тестировании, и гарантирует, что твой API действительно соответствует OpenAPI спецификации.

Mock сервер в этом проекте идеально подходит для:

  • Разработки API (TDD подход)
  • Тестирования клиентов
  • Демо и презентаций
  • CI/CD пайплайнов

Удачи в тестировании! Если что-то пойдет не так - проверяй логи сервера и используй --show-errors-tracebacks для детальной информации. 🚀

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages