Тестовые задания по Python
Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио
Ivelum • Средняя сложность
Тестовое задание по Python от компании Ivelum
Обратите внимание Перед решением тестового задания заполните, пожалуйста, небольшую форму отклика для интересующей вас вакансии по адресу: https://job.ivelum.com После заполнения анкеты мы свяжемся с вами, ответим на ваши вопросы по вакансии и расскажем подробнее о наших проектах. По результатам этого общения мы можем предложить вам попробовать сделать тестовое задание, которое описано ниже. Присылайте ваше решение на адрес [job@ivelum.com](mailto:job@ivelum.com). Hacker™ News proxy Реализовать простой http-прокси-сервер, запускаемый локально, который показывает содержимое страниц [Hacker News](https://news.ycombinator.com). Прокси должен модицифировать текст на страницах следующим образом: после каждого слова из шести букв должен стоять значок «™». Пример™: Исходный текст: https://news.ycombinator.com/item?id=13713480 ``` The visual description of the colliding files, at http://shattered.io/static/pdf_format.png, is not very helpful in understanding how they produced the PDFs, so I took apart the PDFs and worked it out. Basically, each PDF contains a single large (421,385-byte) JPG image, followed by a few PDF commands to display the JPG. The collision lives entirely in the JPG data - the PDF format is merely incidental here. Extracting out the two images shows two JPG files with different contents (but different SHA-1 hashes since the necessary prefix is missing). Each PDF consists of a common prefix (which contains the PDF header, JPG stream descriptor and some JPG headers), and a common suffix (containing image data and PDF display commands). ``` Через ваш прокси™: http://127.0.0.1:8232/item?id=13713480 ``` The visual™ description of the colliding files, at http://shattered.io/static/pdf_format.png, is not very helpful in understanding how they produced the PDFs, so I took apart the PDFs and worked™ it out. Basically, each PDF contains a single™ large (421,385-byte) JPG image, followed by a few PDF commands to display the JPG. The collision lives entirely in the JPG data - the PDF format™ is merely™ incidental here. Extracting out the two images™ shows two JPG files with different contents (but different SHA-1 hashes™ since the necessary prefix™ is missing). Each PDF consists of a common™ prefix™ (which contains the PDF header™, JPG stream™ descriptor and some JPG headers), and a common™ suffix™ (containing image data and PDF display commands). ``` Условия: * последняя версия™ Python™ * страницы должны™ отображаться и работать полностью корректно, в точности так, как и оригинальные (за исключением модифицированного текста™); * при навигации по ссылкам, которые ведут на другие™ страницы HN, браузер должен™ оставаться на адресе™ вашего™ прокси™; * можно использовать любые общедоступные библиотеки, которые сочтёте нужным™; * чем меньше™ кода, тем лучше. PEP8 — обязательно; * если в условиях вам не хватает каких-то данных™, опирайтесь на здравый смысл. Если задачу™ удалось сделать быстро™, и у вас еще остался энтузиазм - как насчет™ написания тестов™? Присылайте ваше решение в виде ссылки™ на gist или на публичный репозиторий на GitHub™. Обратите внимание Напомним порядок действий: 1. Пожалуйста, заполните форму отклика на сайте https://job.ivelum.com; 2. Мы свяжемся с вами, ответим на ваши вопросы по вакансии и расскажем про наши проекты. По результатам этого общения мы можем предложить вам попробовать сделать тестовое задание, которое описано выше; 3. Присылайте ваше решение на [job@ivelum.com](mailto:job@ivelum.com).
SoftwareTester • Лёгкая сложность
Тестовое задание по Python от компании SoftwareTester
[](https://www.python.org/downloads/release/python-31010/) На данный момент отбор на стажировку завершен. How to run app 1. up DB and broker ```shell docker compose up -d --build ``` 1. install requirements 2. export env variables ```shell export $(grep -v '^#' .env | xargs) ``` 4. Create DB tables and fill_handbooks ```shell python manage.py alchemy_create api python manage.py fill_handbooks ``` 5. up app ```shell python manage.py runserver ``` 6. up celery ```shell celery -A core.celery_config worker -l INFO ``` 7. Check everything is ok ```shell curl --location 'http://127.0.0.1:8000/api/auth/auth/' \ --header 'Content-Type: application/json' \ --data-raw '{ "engine": "email", "credentials": { "email": "super_admin@example.com", "password": "StrongPass777" } }' ``` Example response ```shell { "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiMjQxNzE1YzMtY2UxMi00MTYxLTgwZGEtYmFlYmUwYzU5MGE5IiwiZXhwIjoxNjg1ODIyMjg1fQ.o45cS8Upwz562l5XNmgzaOMz3mZUe0dr8Ea7LnM_lxM", "user": { "time_created": 1685562975, "time_updated": 1685562975, "user_id": "241715c3-ce12-4161-80da-baebe0c590a9", "user_type": "SUPER_ADMIN", "email": "super_admin@example.com", "is_email_confirmed": true, "last_name": "super", "first_name": "admin", "is_confirmed": true, "is_blocked": false } } ``` How to run tests 1. install requirements-dev.txt 2. run tests ```shell pytest tests ``` Что надо сделать 1. Скачать .zip файл себе данный репозиторий 2. Наполнить тестами на свой вкус (желательно не тратить на это больше 1-2 дней) 3. Прислать ссылку на свой репозиторий Приветствуется, но не обязательно: 1. использование параметризации тестов 2. использование моков 3. тесты значений в БД 4. тесты celery таски 5. организовать запуск тестов параллельно (по числу ядер на машине) 6. рефакторинг \ исправление ошибок в коде
UpTrader • Средняя сложность
Тестовое задание по Python от компании UpTrader
Places Remember Скачать .zip файл Цель Создать веб-приложение, с помощью которого люди смогут хранить свои впечатления о посещаемых местах. Описание задачи Пользователь заходит на сайт и видит страницу с кратким описанием сервиса. Также, он замечает кнопки “Войти с помощью Google” (или VK, на Ваше усмотрение), нажимая на которую Google/VK предлагает ему разрешить доступ к его базовой информации. Он разрешает доступ, после чего должна открыться страница. В ее шапке будет имя и фотография (информация взята из профиля Google/VK), по центру страницы надпись “У вас нет ни одного воспоминания”, кнопка “Добавить воспоминание” (ее расположение на ваше усмотрение), при нажатии на которую должна открываться форма с возможностью указания места на карте, а также поле для ввода названия и поле для ввода комментария об этом месте. Далее пользователь может нажать на кнопку “Сохранить”, после чего он снова попадает на домашнюю страницу со списком из этого элемента и возможностью добавлять новые места. Весь добавленный список мест будет отображаться на домашней странице. На домашней странице пользователя также есть кнопка, позволяющая ему выйти из своего аккаунта. После выхода он должен попасть на приветственную страницу сервиса без возможности видеть список посещаемых мест. При повторной авторизации через Google/VK пользователь снова видит все свои добавленные места. Требования к реализации: - Приложение должно быть реализовано на базе фреймворка Django. - Оформление кода должно соответствовать стандартам (PEP8, Django coding style) - Все используемые зависимости должны быть актуальными на момент создания проекта. - С самого начала разработки необходимо использовать git, а также следовать стилю коммитов: https://chris.beams.io/posts/git-commit/. Исходный код приложения должен быть размещён на github. - Основной функционал (создание впечатлений о посещаемых местах и получение их списка) должен быть покрыт юнит-тестами. - Возможно использование любых сторонних пакетов, для стилей рекомендуется использовать bootstrap. - Если что-то не удалось сделать, необходимо описать проблемы в файле README.md Будет плюсом: - Запуск тестов при новых коммитах реализован с использованием github actions. - Локальный запуск через docker/docker-compose - В README проекта есть бейдж с текущим покрытием тестами (https://coveralls.io/). - Сконфигурированные правила для линтеров, запуск линтеров при коммите/пуше/github actions Приложение запускается на одном из облачных сервисов
PyShop • Высокая сложность
Тестовое задание по Python от компании PyShop
Тестовое задание для разработчика на python У сети ресторанов доставки "ФорФар" есть множество точек, на которых готовятся заказы для клиентов. Каждый клиент хочет вместе с заказом получить чек, содержащий детальную информацию о заказе. Сотрудники кухни также хотят чек, чтобы в процессе готовки и упаковки заказа не забыть положить всё что нужно. Наша задача помочь и тем и другим, написав сервис для генерации чеков. Схема работы сервиса ![][arch] 1. Сервис получает информацию о новом заказа, создаёт в БД чеки для всех принтеров точки указанной в заказе и ставит асинхронные задачи на генерацию PDF-файлов для этих чеков. Если у точки нет ни одного принтера - возвращает ошибку. Если чеки для данного заказа уже были созданы - возвращает ошибку. 2. Асинхронный воркер с помощью wkhtmltopdf генерируют PDF-файл из HTML-шаблон. Имя файла должно иметь следущий вид <ID заказа>\_<тип чека>.pdf (123456_client.pdf). Файлы должны хранится в папке media/pdf в корне проекта. 3. Приложение опрашивает сервис на наличие новых чеков. Опрос происходит по следующему пути: сначала запрашивается список чеков которые уже сгенерированы для конкретного принтера, после скачивается PDF-файл для каждого чека и отправляется на печать. Технические требования 1. Сервис должен быть написан на python и Django 2. База данных - PostgreSQL v9.6 3. Для асинхронных задач использовать django_rq 4. Все инфраструктурные вещи необходимые для сервиса ([PostgreSQL], [Redis], [wkhtmltopdf]) запускать в docker с помощью docker-compose, **_сам проект не нужно оборачивать в docker_** 5. Помимо API, должна быть админка для обеих моделей, с возможностью фильтровать чеки по принтеру, типу и статусу Примечания 1. Вёрстка HTML-шаблонов для чеков лежит в репозитории в папке templates 2. Для простоты работы с wkhtmltopdf стоит использовать docker-контейнер [wkhtmltopdf] 3. Во время написания сервиса не стоит изобретать велосипеды, лучше взять что-то существующие Модели 1. Принтер (Printer). Каждый принтер печатает только свой тип чеков. Поле api_key принимает уникальные значения, по нему однозначно определяется принтер. Для этой модели должны быть fixtures (принтеры для обоих типов чеков для нескольких точек). | Поле | Тип | Значение | Описание | | ---------- | ------------ | --------------- | --------------------------------- | | name | CharField | | название принтера | | api_key | CharField | | ключ доступа к API | | check_type | CharField | kitchen\|client | тип чека которые печатает принтер | | point_id | IntegerField | | точка к которой привязан принтер | 2. Чек (Check). Информация о заказе для каждого чека хранится в JSON, нет необходимости делать отдельные модели. | Поле | Тип | Значение | Описание | | ---------- | ---------- | ---------------------- | ---------------------------- | | printer_id | ForeignKey | | принтер | | type | CharField | kitchen\|client | тип чека | | order | JSONField | | информация о заказе | | status | CharField | new\|rendered\|printed | статус чека | | pdf_file | FileField | | ссылка на созданный PDF-файл | API Описание доступных методов находится в файле [api.yml](api.yml) (swagger-спецификация). Можно отрендерить через [онлайн редактор][swagger] или через соответствующий плагин для PyCharm или VSCode [wkhtmltopdf]: https://hub.docker.com/r/openlabs/docker-wkhtmltopdf-aas/ [postgresql]: https://hub.docker.com/_/postgres/ [redis]: https://hub.docker.com/_/redis/ [swagger]: https://editor.swagger.io/ [arch]: images/arch.png
без ограничений.
Чтобы получить полный доступ,
вам необходимо зарегистрироваться.