{"id":50136324,"url":"https://github.com/bivex/fictional-meme","last_synced_at":"2026-05-23T22:03:37.126Z","repository":{"id":327810621,"uuid":"1110295129","full_name":"bivex/fictional-meme","owner":"bivex","description":"Advertising Platform API","archived":false,"fork":false,"pushed_at":"2025-12-08T23:58:02.000Z","size":78,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-09T12:21:49.577Z","etag":null,"topics":["ad-analytics","ad-exchange","ad-platform","advertising","campaign-management","developer-api","integration-sdk","martech","rest-api","saas-platform"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bivex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-05T01:43:56.000Z","updated_at":"2025-12-09T00:42:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bivex/fictional-meme","commit_stats":null,"previous_names":["bivex/fictional-meme"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bivex/fictional-meme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Ffictional-meme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Ffictional-meme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Ffictional-meme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Ffictional-meme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bivex","download_url":"https://codeload.github.com/bivex/fictional-meme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Ffictional-meme/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33413624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ad-analytics","ad-exchange","ad-platform","advertising","campaign-management","developer-api","integration-sdk","martech","rest-api","saas-platform"],"created_at":"2026-05-23T22:03:36.529Z","updated_at":"2026-05-23T22:03:37.120Z","avatar_url":"https://github.com/bivex.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Тестирование API с Schemathesis 🚀\n\nПривет! Это README по тестированию нашего API для рекламной платформы с помощью Schemathesis. Мы тут собрали все необходимое для автоматического тестирования OpenAPI спецификаций - от простых проверок до комплексных сценариев.\n\n## 📋 Что у нас есть\n\n### 🗺️ OpenAPI Спецификация (`openapi.yaml`)\nЭто сердце нашего API - подробная документация всех эндпоинтов, параметров, ответов и ошибок. Спецификация описывает:\n\n- **Кампании**: создание, обновление, пауза/возобновление\n- **Лендинги**: управление посадочными страницами с A/B тестированием\n- **Офферы**: настройка предложений с весами и payout'ами\n- **Аналитика**: детальные метрики по трафику и конверсиям\n- **Клики**: трекинг трафика с fraud detection и 5-level суб-трекингом\n\n### 🖥️ Mock Сервер (`mock_server_g.py`)\nFlask-приложение, которое имитирует реальный API. Полностью совместимо с OpenAPI спецификацией:\n\n- ✅ Все эндпоинты реализованы\n- ✅ Правильные HTTP коды ответов\n- ✅ Валидация данных по схемам\n- ✅ Аутентификация (Bearer, Basic, API-Key)\n- ✅ Fraud detection для кликов\n- 🔄 Поддержка CORS для тестирования из браузера\n\n## 🧪 Тестирование с Schemathesis\n\nSchemathesis - это инструмент для property-based тестирования REST API. Он:\n\n1. **Читает** OpenAPI спецификацию\n2. **Генерирует** тестовые запросы на основе схем\n3. **Отправляет** запросы к API\n4. **Проверяет** соответствие ответов спецификации\n\n### 🎯 Преимущества Schemathesis\n\n- **Автоматическая генерация** тысяч тестовых случаев\n- **Проверка edge cases** (пустые строки, null значения, границы диапазонов)\n- **Property-based testing** - находит баги, которые пропустят обычные тесты\n- **Интеграция** с pytest для CI/CD\n- **Подробные отчеты** о найденных несоответствиях\n\n## 🚀 Быстрый старт\n\n### 1. Запуск Mock Сервера\n\n```bash\n# Из директории goservik/\npython run_server_g.py\n```\n\nСервер запустится на `http://127.0.0.1:8000`\n\n### 2. Установка Schemathesis\n\n```bash\npip install schemathesis\n```\n\n### 3. Базовое тестирование\n\n```bash\n# Тестируем все эндпоинты\nschemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1\n\n# Только health check (быстрая проверка)\nschemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1 --endpoint=\"/health\"\n\n# Тестируем кампании\nschemathesis run openapi.yaml --base-url=http://127.0.0.1:8000/v1 --endpoint=\"/campaigns\"\n```\n\n## 📊 Примеры тестов\n\n### Health Check\n```bash\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/health\" \\\n  --checks=all\n```\n\n### Кампании\n```bash\n# Создание кампаний с различными данными\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/campaigns\" \\\n  --checks=all \\\n  --hypothesis-max-examples=50\n```\n\n### Click Tracking\n```bash\n# Тестируем клики с суб-трекингом\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/click\" \\\n  --checks=all\n```\n\n## 🔧 Продвинутые опции\n\n### Аутентификация\n```bash\n# С Bearer токеном\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --header=\"Authorization: Bearer test_jwt_token_12345\"\n\n# С API Key\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --header=\"X-API-Key: test_api_key_abcdef123\"\n```\n\n### Фильтры и ограничения\n```bash\n# Только GET запросы\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --method=GET\n\n# Максимум 100 примеров на эндпоинт\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --hypothesis-max-examples=100\n\n# Игнорировать определенные проверки\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --checks=not response_schema_conformance\n```\n\n### Отчеты\n```bash\n# JUnit XML для CI/CD\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --junit-xml=schemathesis-report.xml\n\n# JSON отчет\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --output=schemathesis-report.json\n```\n\n## 🎪 Что проверяет Schemathesis\n\n### ✅ Схема ответа\n- Структура JSON соответствует OpenAPI схеме\n- Типы данных правильные (string, number, boolean, etc.)\n- Обязательные поля присутствуют\n- Форматы валидны (email, date-time, UUID)\n\n### ✅ HTTP статусы\n- Правильные коды для успешных ответов\n- Корректные коды ошибок (400, 401, 404, 500)\n- Заголовки соответствуют спецификации\n\n### ✅ Параметр валидация\n- Query параметры в правильном формате\n- Path параметры валидны\n- Request body соответствует схеме\n\n### ✅ Edge Cases\n- Пустые строки и null значения\n- Граничные значения (min/max)\n- Специальные символы\n- Очень длинные строки\n\n## 🚨 Типичные проблемы и решения\n\n### Проблема: `Connection refused`\n```bash\n# Сервер не запущен - запусти его!\npython run_server_g.py\n```\n\n### Проблема: `401 Unauthorized`\n```bash\n# Добавь аутентификацию для защищенных эндпоинтов\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --header=\"Authorization: Bearer test_jwt_token_12345\"\n```\n\n### Проблема: Слишком много тестов\n```bash\n# Ограничь количество примеров\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --hypothesis-max-examples=20\n```\n\n## 📈 Интеграция в CI/CD\n\n### GitHub Actions пример\n```yaml\nname: API Tests\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Setup Python\n        uses: actions/setup-python@v2\n        with:\n          python-version: '3.9'\n\n      - name: Install dependencies\n        run: |\n          pip install schemathesis flask gunicorn\n\n      - name: Start mock server\n        run: |\n          python run_server_g.py \u0026\n          sleep 5\n\n      - name: Run Schemathesis tests\n        run: |\n          schemathesis run openapi.yaml \\\n            --base-url=http://127.0.0.1:8000/v1 \\\n            --junit-xml=schemathesis-report.xml \\\n            --hypothesis-max-examples=50\n\n      - name: Upload test results\n        uses: actions/upload-artifact@v2\n        if: always()\n        with:\n          name: schemathesis-results\n          path: schemathesis-report.xml\n```\n\n## 🎯 Лучшие практики\n\n### 1. Начинай с малого\n```bash\n# Сначала протестируй один эндпоинт\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/health\"\n```\n\n### 2. Используй разные уровни аутентификации\n```bash\n# Public endpoints (без auth)\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/health\"\n\n# Bearer token endpoints\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/campaigns\" \\\n  --header=\"Authorization: Bearer test_jwt_token_12345\"\n\n# API Key endpoints\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --endpoint=\"/clicks\" \\\n  --header=\"X-API-Key: test_api_key_abcdef123\"\n```\n\n### 3. Монитор покрытие\n```bash\n# Смотри какие эндпоинты протестированы\nschemathesis run openapi.yaml \\\n  --base-url=http://127.0.0.1:8000/v1 \\\n  --show-errors-tracebacks \\\n  --verbosity=verbose\n```\n\n## 🎉 Заключение\n\nSchemathesis - это мощный инструмент для автоматического тестирования API. Он находит баги, которые легко пропустить при ручном тестировании, и гарантирует, что твой API действительно соответствует OpenAPI спецификации.\n\nMock сервер в этом проекте идеально подходит для:\n- Разработки API (TDD подход)\n- Тестирования клиентов\n- Демо и презентаций\n- CI/CD пайплайнов\n\nУдачи в тестировании! Если что-то пойдет не так - проверяй логи сервера и используй `--show-errors-tracebacks` для детальной информации. 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbivex%2Ffictional-meme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbivex%2Ffictional-meme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbivex%2Ffictional-meme/lists"}