This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Тестирование
Данный раздел описывает процессы проверки работоспособности MinerU MCP Server. Проект использует pytest для unit-тестирования с асинхронной поддержкой.
Тесты покрывают ключевые модули:
- Обработку файлов (декодирование Base64, загрузка по URL) — test_file_handler.py
- Взаимодействие с MinerU API (отправка задач, поллинг статуса) — test_mineru_client.py
Локальный запуск тестов
Для запуска тестов локально требуется установленный Python (3.11+) и зависимости из requirements.txt.
Шаги:
-
Установите зависимости:
pip install -r requirements.txt -
Запустите тесты (обратите внимание на
PYTHONPATH=src, так как проект использует src-layout):PYTHONPATH=src pytest tests/ -vФлаг
-vвключает подробный вывод результатов каждого теста.
Особенности тестовой среды
- Тесты используют библиотеку
respxдля мокирования HTTP-запросов. Это позволяет проверять логику клиента без необходимости запуска реального экземпляра MinerU. - Конфигурация тестов задана в pytest.ini:
[pytest] asyncio_mode = auto asyncio_default_fixture_loop_scope = function testpaths = tests - Общие фикстуры определены в conftest.py.
Тестирование через Docker
Процесс сборки Docker-образа включает автоматический запуск тестов. Это гарантирует, что в реестр попадут только рабочие образы.
Если тесты завершаются с ошибкой, процесс сборки прерывается.
Команда сборки:
docker-compose build --no-cache mineru-mcp
В Dockerfile этот шаг выглядит следующим образом:
# ...
# 4. Установка пакета
RUN pip install --no-cache-dir .
# 5. Запуск тестов при сборке
RUN python -m pytest tests/ -v
# ...
Ручное тестирование через curl
Для проверки работы запущенного MCP-сервера можно использовать curl. Поскольку протокол MCP Streamable HTTP является stateful, процесс состоит из двух этапов: инициализация сессии и выполнение запроса.
Шаг 1: Инициализация сессии
Выполните POST-запрос для создания сессии. Вам понадобится заголовок Mcp-Session-Id из ответа.
curl -v -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": {
"name": "curl-test",
"version": "1.0"
}
}
}'
Важно: Скопируйте значение Mcp-Session-Id из заголовков ответа сервера.
Шаг 2: Вызов инструмента
Используйте полученный ID сессии для вызова инструмента parse_document.
curl -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: ВАШ_SESSION_ID" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "parse_document",
"arguments": {
"source_type": "url",
"source": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
"filename": "dummy.pdf",
"include_structured_data": false
}
}
}'
Примечание: Убедитесь, что переменные окружения (например,
MINERU_URL) настроены корректно перед запуском сервера, см. раздел Конфигурация.
См. также
- Разработка — Руководство по добавлению новых инструментов и локальному запуску без Docker.
- Устранение неполадок — Решение частых проблем при запуске тестов и сервера.
- Архитектура — Описание того, как тесты покрывают поток данных и взаимодействие с MinerU.