https://github.com/bivex/fictional-meme
Advertising Platform API
https://github.com/bivex/fictional-meme
ad-analytics ad-exchange ad-platform advertising campaign-management developer-api integration-sdk martech rest-api saas-platform
Last synced: 21 days ago
JSON representation
Advertising Platform API
- Host: GitHub
- URL: https://github.com/bivex/fictional-meme
- Owner: bivex
- License: mit
- Created: 2025-12-05T01:43:56.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-12-08T23:58:02.000Z (6 months ago)
- Last Synced: 2025-12-09T12:21:49.577Z (6 months ago)
- Topics: ad-analytics, ad-exchange, ad-platform, advertising, campaign-management, developer-api, integration-sdk, martech, rest-api, saas-platform
- Language: Python
- Size: 76.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Тестирование 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 Сервера
```bash
# Из директории goservik/
python run_server_g.py
```
Сервер запустится на `http://127.0.0.1:8000`
### 2. Установка Schemathesis
```bash
pip install schemathesis
```
### 3. Базовое тестирование
```bash
# Тестируем все эндпоинты
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
```bash
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--endpoint="/health" \
--checks=all
```
### Кампании
```bash
# Создание кампаний с различными данными
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--endpoint="/campaigns" \
--checks=all \
--hypothesis-max-examples=50
```
### Click Tracking
```bash
# Тестируем клики с суб-трекингом
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--endpoint="/click" \
--checks=all
```
## 🔧 Продвинутые опции
### Аутентификация
```bash
# С 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"
```
### Фильтры и ограничения
```bash
# Только 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
```
### Отчеты
```bash
# 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`
```bash
# Сервер не запущен - запусти его!
python run_server_g.py
```
### Проблема: `401 Unauthorized`
```bash
# Добавь аутентификацию для защищенных эндпоинтов
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--header="Authorization: Bearer test_jwt_token_12345"
```
### Проблема: Слишком много тестов
```bash
# Ограничь количество примеров
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--hypothesis-max-examples=20
```
## 📈 Интеграция в CI/CD
### GitHub Actions пример
```yaml
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. Начинай с малого
```bash
# Сначала протестируй один эндпоинт
schemathesis run openapi.yaml \
--base-url=http://127.0.0.1:8000/v1 \
--endpoint="/health"
```
### 2. Используй разные уровни аутентификации
```bash
# 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. Монитор покрытие
```bash
# Смотри какие эндпоинты протестированы
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` для детальной информации. 🚀