10 KiB
Тестування та відлагодження
Перш ніж почати тестування вашого MCP сервера, важливо зрозуміти доступні інструменти та найкращі практики для відлагодження. Ефективне тестування забезпечує правильну роботу сервера і допомагає швидко виявляти та усувати проблеми. Наступний розділ описує рекомендовані підходи для перевірки вашої реалізації MCP.
Огляд
Цей урок охоплює, як вибрати правильний підхід до тестування та найефективніший інструмент для тестування.
Навчальні цілі
До кінця цього уроку ви зможете:
- Описати різні підходи до тестування.
- Використовувати різні інструменти для ефективного тестування вашого коду.
Тестування MCP серверів
MCP надає інструменти, які допомагають тестувати та відлагоджувати ваші сервери:
- MCP Inspector: Інструмент командного рядка, який можна запускати як CLI-інструмент, так і у вигляді візуального інтерфейсу.
- Ручне тестування: Ви можете використовувати інструмент на кшталт curl для запуску веб-запитів, але підійде будь-який інструмент, здатний виконувати HTTP-запити.
- Модульне тестування: Можливо використовувати улюблену тестову платформу для перевірки функціональності як сервера, так і клієнта.
Використання MCP Inspector
Ми описували використання цього інструменту у попередніх уроках, але давайте розглянемо його на високому рівні. Це інструмент, написаний на Node.js, і ви можете запускати його через виконуваний файл npx, який завантажить та тимчасово встановить цей інструмент, а після виконання очищаєсь.
MCP Inspector допомагає вам:
- Виявляти можливості сервера: Автоматично визначає доступні ресурси, інструменти та підказки
- Тестувати виконання інструментів: Експериментувати з різними параметрами та бачити відповіді в реальному часі
- Переглядати метадані сервера: Досліджувати інформацію про сервер, схеми та конфігурації
Типовий запуск інструменту виглядає так:
npx @modelcontextprotocol/inspector node build/index.js
Вказана команда запускає MCP та його візуальний інтерфейс і відкриває локальний веб-інтерфейс у вашому браузері. Ви побачите панель керування, яка відображає зареєстровані MCP сервери, їхні доступні інструменти, ресурси та підказки. Інтерфейс дозволяє інтерактивно тестувати виконання інструментів, перевіряти метадані сервера та переглядати відповіді в реальному часі, що спрощує перевірку та відлагодження реалізацій MCP серверів.
Також цей інструмент можна запускати в режимі CLI, для цього додають атрибут --cli. Ось приклад запуску інструменту в режимі "CLI", який виводить усі інструменти сервера:
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list
Ручне тестування
Окрім запуску інструмента inspector для тестування можливостей сервера, можна використовувати клієнт, здатний виконувати HTTP-запити, наприклад curl.
За допомогою curl ви можете тестувати MCP сервери безпосередньо через HTTP-запити:
# Приклад: Метадані тестового сервера
curl http://localhost:3000/v1/metadata
# Приклад: Виконати інструмент
curl -X POST http://localhost:3000/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{"name": "calculator", "parameters": {"expression": "2+2"}}'
Як бачите із наведеного прикладу використання curl, ви надсилаєте POST-запит для виклику інструмента з корисним навантаженням, що складається з імені інструмента та його параметрів. Обирайте підхід, який вам підходить найбільше. CLI-інструменти, як правило, швидші у використанні та добре скриптуються, що корисно для середовищ CI/CD.
Модульне тестування
Створюйте модульні тести для ваших інструментів та ресурсів, щоб переконатися, що вони працюють належним чином. Ось приклад коду для тестування.
import pytest
from mcp.server.fastmcp import FastMCP
from mcp.shared.memory import (
create_connected_server_and_client_session as create_session,
)
# Позначте весь модуль для асинхронних тестів
pytestmark = pytest.mark.anyio
async def test_list_tools_cursor_parameter():
"""Test that the cursor parameter is accepted for list_tools.
Note: FastMCP doesn't currently implement pagination, so this test
only verifies that the cursor parameter is accepted by the client.
"""
server = FastMCP("test")
# Створіть пару інструментів для тестування
@server.tool(name="test_tool_1")
async def test_tool_1() -> str:
"""First test tool"""
return "Result 1"
@server.tool(name="test_tool_2")
async def test_tool_2() -> str:
"""Second test tool"""
return "Result 2"
async with create_session(server._mcp_server) as client_session:
# Тест без параметра курсора (пропущено)
result1 = await client_session.list_tools()
assert len(result1.tools) == 2
# Тест з курсором=None
result2 = await client_session.list_tools(cursor=None)
assert len(result2.tools) == 2
# Тест з курсором у вигляді рядка
result3 = await client_session.list_tools(cursor="some_cursor_value")
assert len(result3.tools) == 2
# Тест з порожнім рядком курсора
result4 = await client_session.list_tools(cursor="")
assert len(result4.tools) == 2
Наведений код виконує наступне:
- Використовує фреймворк pytest, який дозволяє створювати тести як функції із використанням assert.
- Створює MCP сервер з двома різними інструментами.
- Використовує оператори
assertдля перевірки певних умов.
Перегляньте повний файл тут
На основі цього файлу ви можете протестувати власний сервер, щоб впевнитися, що можливості створені правильно.
Усі основні SDK мають подібні розділи для тестування, тож ви можете адаптувати їх під обране оточення виконання.
Приклади
Додаткові ресурси
Що далі
- Далі: Розгортання
Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ його рідною мовою слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.
