Тестовое задание в школу бекенд-разработку Яндекса. [UPD: В школу попал :)]
Для работы приложения необходима версия языка Python 3.6 и выше
Зависимости для проекта описаны в файлах Pipfile и Pipfile.lock
Используемые библиотеки:
aiohttpиспользуется для построения веб-сервисаpytestиспользуется для тестирования проектаpytest-covиспользуется для отображения покрытия тестами проектаaioresponsesиспользуется для мокинга запросов, кроме запросов к веб-сервису в тестахwebargsиспользуется для валидации входных данных для методов веб-сервисаuvloopиспользуется для изменения реализации стандартного event loop в asynciopyyamlиспользуется для работы с конфигурационными файлами формата yamlasyncpgиспользуется для связи веб-сервиса с СУБД Postgresnumpyиспользуется для математический операций в методах веб-сервиса
Прежде всего, должны быть установлены:
- pipenv (
pip install pipenv) - postgresql (
apt install postgresql)
Порядок установки приложения:
- Склонировать репозиторий с приложением
git clone https://github.com/NewGlad/yandex_test_task app - Перейти в дикекторию с приложением
cd app - Активировать виртуальное окружение
pipenv shell - Установить зависимости для приложения
pipenv install - Создать базу данных для приложения и его тестирования
su -c "./create_db.sh" postgres - Убедиться, что тесты приложения завершаются успешно
pytest --cov=app -vv
Для автоматического возобновления работы приложения после перезагрузки виртуальной машины требуется добавить приложение как сервис systemd. Требуемые действия:
- Создать файл
/lib/systemd/system/yandex_test_task.serviceс содержимым
[Unit]
Description=Yandex test task REST service
After=multi-user.target
[Service]
Type=simple
WorkingDirectory=ПУТЬ_К_ДИРЕКТОРИИ_С_ПРИЛОЖЕНИЕМ
ExecStart=/usr/local/bin/pipenv run python ПУТЬ_К_ДИРЕКТОРИИ_С_ПРИЛОЖЕНИЕМ/entry.py
[Install]
WantedBy=multi-user.target
- Обновить конфигурацию systemd:
systemctl daemon-reload - Подключить автозапуск приложения:
systemctl enable yandex_test_task.service
Для запуска тестов необходимо выполнить команду
pytest --cov=app -vv
в корне проекта, ключ -vv отображает более подробную информацию о запуске тестов, --cov отображает покрытие тестами кода приложения
Для тестов автоматически сгенерированы тестовые примеры, в случае необходимости можно сгенерировать другие тестовые примеры используя код в файле
tests/test_samples/build_json_for_test.py
Для тестирование стиля кодирования используется pylint с некоторыми ограничениями отключены правила
- C0111 Missing docstring
- C0103 Variable name doesn't conform to snake_case naming style (бывают false-positive срабатывания на строчках типа with open(...) as f:)
Команда для запуска тестирования стиля кодирования
pylint *.py **/*.py --rcfile=standard.rc