Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

bivex/fictional-meme

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

AltStyle によって変換されたページ (->オリジナル) /