Автотесты для REST API Яндекс.Диска (тестовое задание: стажёр «Инженер по автоматизации тестирования в Финтех», стек Python + pytest + requests).
- Python 3.13
- pytest
- requests
- python-dotenv
python -m venv .venv
# Windows PowerShell:
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt- Зайти в Яндекс ID под тестовым аккаунтом.
- Создать приложение на https://oauth.yandex.ru с правами для Яндекс.Диска (чтение, запись, доступ к информации о диске).
- Получить OAuth‑токен:
- через URL вида
https://oauth.yandex.ru/authorize?response_type=token&client_id=..., или - через полигон Яндекс.Диска: https://yandex.ru/dev/disk/poligon (кнопка «Получить токен»).
- через URL вида
- Создать файл
.envв корне проекта:
YA_TOKEN=ваш_токен_от_Яндекс.Диска.env добавлен в .gitignore и в репозиторий не попадает.
pytest -vvconftest.py— фикстуры pytest и общий API‑клиент (base URL, заголовки, методы get/post/put/delete).pytest.ini— базовая конфигурация pytest.requirements.txt— зависимости проекта.tests/__init__.py— служебный файл для пакетаtests.tests/test_get.py— тесты GET:GET /resources/files— получение списка файлов.
tests/test_put.py— загрузка файлов:GET /resources/upload— получение ссылки для загрузки,PUT <href>— загрузка содержимого файла по выданному URL.
tests/test_post.py— POST‑сценарии:POST /resources/copy— копирование файла.
tests/test_delete.py— удаление ресурсов:DELETE /resources— удаление существующего файла и попытка удалить несуществующий (404).
Проект опирается на официальную документацию REST API Яндекс.Диска и реализует интеграционные тесты для типичных сценариев с использованием методов GET, POST, PUT и DELETE.
Используется для чтения данных без изменения состояния.
В проекте покрыто:
GET /v1/disk/resources/files— получение списка файлов пользователя.
Коды успешного ответа:
200 OK
Применяется для идемпотентных операций, когда ресурс должен существовать в указанном виде.
В проекте покрыто:
-
PUT /v1/disk/resources?path=/folder— создание папки по указанному пути.201 Created— папка успешно создана;409 Conflict— ресурс с таким путём уже существует.
-
Загрузка файла в два шага:
GET /v1/disk/resources/upload?path=/file.txt&overwrite=true— получение ссылки для загрузки (href);PUT <href>— отправка содержимого файла по выданному URL.
Коды успешного ответа:
- для получения ссылки:
200 OK; - для загрузки файла:
201 Createdили202 Accepted.
Используется для запуска действий над уже существующими ресурсами.
В проекте покрыто:
POST /v1/disk/resources/copy?from=/src.txt&path=/dst.txt&overwrite=true— копирование файла или папки в новое место.
Коды успешного ответа:
201 Created— копия создана;202 Accepted— операция принята в обработку.
Отвечает за удаление ресурсов.
В проекте покрыто:
DELETE /v1/disk/resources?path=/path/to/resource&permanently=true— удаление файла или папки.
Коды ответа:
202 Acceptedили204 No Content— удаление запущено или завершено;404 Not Found— ресурс по указанному пути не найден.
В рамках тестового задания для компактности реализованы сценарии только для части методов (GET/POST/PUT/DELETE), но структура тестов и фикстур позволяет добавлять проверки для PATCH и других POST‑операций без изменения общей архитектуры.
При необходимости проект можно расширить за счёт операций из документации API Яндекс.Диска, например:
- добавления метаинформации через PATCH;
- сохранения файла из интернета через POST;
- перемещения ресурсов через POST.
PUT /v1/disk/resources— создание папки: https://yandex.ru/dev/disk-api/doc/ru/reference/create-folderGET /v1/disk/resources/upload+PUT <href>— загрузка файла на Диск: https://yandex.ru/dev/disk-api/doc/ru/reference/uploadPOST /v1/disk/resources/copy— копирование файла или папки: https://yandex.ru/dev/disk-api/doc/ru/reference/copyDELETE /v1/disk/resources— удаление файла или папки: https://yandex.ru/dev/disk-api/doc/ru/reference/delete