Привет! Это README по тестированию нашего API для рекламной платформы с помощью Schemathesis. Мы тут собрали все необходимое для автоматического тестирования OpenAPI спецификаций - от простых проверок до комплексных сценариев.
Это сердце нашего API - подробная документация всех эндпоинтов, параметров, ответов и ошибок. Спецификация описывает:
- Кампании: создание, обновление, пауза/возобновление
- Лендинги: управление посадочными страницами с A/B тестированием
- Офферы: настройка предложений с весами и payout'ами
- Аналитика: детальные метрики по трафику и конверсиям
- Клики: трекинг трафика с fraud detection и 5-level суб-трекингом
Flask-приложение, которое имитирует реальный API. Полностью совместимо с OpenAPI спецификацией:
- ✅ Все эндпоинты реализованы
- ✅ Правильные HTTP коды ответов
- ✅ Валидация данных по схемам
- ✅ Аутентификация (Bearer, Basic, API-Key)
- ✅ Fraud detection для кликов
- 🔄 Поддержка CORS для тестирования из браузера
Schemathesis - это инструмент для property-based тестирования REST API. Он:
- Читает OpenAPI спецификацию
- Генерирует тестовые запросы на основе схем
- Отправляет запросы к API
- Проверяет соответствие ответов спецификации
- Автоматическая генерация тысяч тестовых случаев
- Проверка edge cases (пустые строки, null значения, границы диапазонов)
- Property-based testing - находит баги, которые пропустят обычные тесты
- Интеграция с pytest для CI/CD
- Подробные отчеты о найденных несоответствиях
# Из директории goservik/ python run_server_g.pyСервер запустится на http://127.0.0.1:8000
pip install schemathesis# Тестируем все эндпоинты 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"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# Тестируем клики с суб-трекингом 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- Структура JSON соответствует OpenAPI схеме
- Типы данных правильные (string, number, boolean, etc.)
- Обязательные поля присутствуют
- Форматы валидны (email, date-time, UUID)
- Правильные коды для успешных ответов
- Корректные коды ошибок (400, 401, 404, 500)
- Заголовки соответствуют спецификации
- Query параметры в правильном формате
- Path параметры валидны
- Request body соответствует схеме
- Пустые строки и null значения
- Граничные значения (min/max)
- Специальные символы
- Очень длинные строки
# Сервер не запущен - запусти его! python run_server_g.py# Добавь аутентификацию для защищенных эндпоинтов 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=20name: 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# Сначала протестируй один эндпоинт schemathesis run openapi.yaml \ --base-url=http://127.0.0.1:8000/v1 \ --endpoint="/health"# 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"# Смотри какие эндпоинты протестированы schemathesis run openapi.yaml \ --base-url=http://127.0.0.1:8000/v1 \ --show-errors-tracebacks \ --verbosity=verboseSchemathesis - это мощный инструмент для автоматического тестирования API. Он находит баги, которые легко пропустить при ручном тестировании, и гарантирует, что твой API действительно соответствует OpenAPI спецификации.
Mock сервер в этом проекте идеально подходит для:
- Разработки API (TDD подход)
- Тестирования клиентов
- Демо и презентаций
- CI/CD пайплайнов
Удачи в тестировании! Если что-то пойдет не так - проверяй логи сервера и используй --show-errors-tracebacks для детальной информации. 🚀