Получить практические навыки в организации процесса тестирования программного обеспечения, включая модульное, контрактное и E2E-тестирование, а также настройку процесса непрерывной интеграции для автоматического запуска тестов.
Разработать и протестировать приложение для сокращения URL-адресов (аналоги: https://clck.ru/, https://u.to/).
Технологический стек:
Python, FastAPIStreamlitPostgreSQLPytest, Pact, PlaywrightGitVerseСтруктура этапов соответствует структуре разделов и подразделов отчёта
1.1 Реализовать API на FastAPI со следующими эндпоинтами:
- `POST /api/links` – принимает в теле запроса `JSON {"long_url": "http://example.com"}`; создает уникальный короткий slug, сохраняет пару (короткий slug, длинный URL) в базу данных PostgreSQL и возвращает `{"short_url": "http://localhost:8000/s/{короткий_код}"}`
- `GET /s/{short_code}` – ищет в базе данных длинный URL по короткому коду и выполняет перенаправление на него
1.2 Написать модульные тесты с использованием pytest (для тестирования обработки запросов можно использовать TestClient из FastAPI, также не забывайте про моки)
1.3 Настроить сбор статистики покрытия кода тестами
Результат данного раздела: серверное приложение + модульные тесты с моками и покрытием ветвлений на 75% + отчёт о покрытии
2.1 На стороне Frontend написать "потребительский" тест, который генерирует pact-файл. Этот тест должен проверять ожидаемый ответ от эндпоинта POST /api/links (разработка клиента ещё не началась!)
2.2 На стороне Backend написать "провайдерский" тест, который верифицирует, что реализация API соответствует контракту из pact-файла
Результат данного раздела: 2 контрактных теста + pact-файл
3.1 Реализовать пользовательский интерфейс на Streamlit; UI должен содержать:
3.2 Написать сквозные тесты (один на успешное создание короткой ссылки и один для проверки случая, когда введённая для сокращения ссылка не является корректным URL) с использованием Playwright; тесты должны эмулировать действия пользователя:
Результат данного раздела: клиентское приложение + 2 сквозных теста
Изучить документацию и написать работающий пайплайн для автоматического запуска при push в репозиторий GitVerse (запуск всех видов тестов: модульные, контрактные, сквозные)
Результат данного раздела: yaml-файл с пайплайном, удалеённый репозиторий Git на
GitVerse
Можно использовать свою
/project
├── /backend
│ ├── tests
│ └── test_contract_provider.py
├── /frontend-streamlit
│ ├── app.py
│ ├── tests
│ └── test_contract_consumer.py
├── /e2e
│ ├── test_main_scenario.py
├── .gitverse/workflows/ci.yaml
└── README.md (для себя на будущее)
Файл pact можно разместить в любом месте в структуре репозитория
GitVerseтитульный лист (следите за подчеркиваниями, чтобы они все напечатались)
введение: краткое описание цели работы и поставленных задач
раздел 1 "Модульное тестирование" (этап 1) с подразделами:
раздел 2 "Контрактное тестирование" (этап 2) с подразделами:
объяснение принципа работы Pact на примере данного проекта
исходный код контрактных тестов
фрагмент сгенерированного pact-файла
вывод лога успешной верификации контракта на стороне провайдера
раздел 3 "Сквозное тестирование" (этап 3) с подразделами:
раздел 4 "Непрерывная интеграция" (этап 4) с подразделами:
заключение: выводы, возникшие трудности и способы их решения, полученные знания
список использованных источников
Отчёт оформляется в соответствии с требованиями
Для списка источников отдельные требования к оформлению
Домашнее задание считается выполненным, если оно подписано, загружено через электронный кабинет ОмГТУ и принято преподавателем
Преподаватель оставляет за собой право отклонить работу без объяснения причин, если оформление отчёта и списка источников не соответствует требованиям нормоконтроля