Проверить SDK локально#

Что именно доказал тест?

Хороший тест вызывает тот же публичный метод, который использует приложение. Локальный handler принимает подготовленный запрос и возвращает детерминированный ответ, поэтому проверка не зависит от внешнего сервиса.

# examples/docs/testing.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetMessage(HttpOperation[Message]):
    __http__ = Http.get("/messages/{message_id}")
    message_id: Path[int]


class MessagesApi(SyncApi):
    get = op(GetMessage)


def main() -> None:
    site = GuideSite()
    with guide_client(site) as client:
        message = MessagesApi(client).get(message_id=42)
    print(f"message: {message.id} {message.subject}")
    print(f"observed: {site.calls[0]}")

Пример доказывает две стороны контракта: сервер наблюдает нужный method и path, а вызывающий получает модель Message. Реальный тест сравнивает эти значения средствами выбранного test runner; транспортная обвязка остаётся общей fixture.

Файл целиком
"""Exercise a public SDK method against a deterministic local site."""

from dataclasses import dataclass

from pydantic import BaseModel

from eazy_sdk import Http, HttpOperation, Path, SyncApi, op
from examples.docs.guide_site import GuideSite, guide_client


class Message(BaseModel):
    id: int
    subject: str


# region docs: testing
# examples/docs/testing.py
@dataclass(frozen=True, slots=True, kw_only=True)
class GetMessage(HttpOperation[Message]):
    __http__ = Http.get("/messages/{message_id}")
    message_id: Path[int]


class MessagesApi(SyncApi):
    get = op(GetMessage)


def main() -> None:
    site = GuideSite()
    with guide_client(site) as client:
        message = MessagesApi(client).get(message_id=42)
    print(f"message: {message.id} {message.subject}")
    print(f"observed: {site.calls[0]}")
# endregion docs: testing


if __name__ == "__main__":
    main()
message: 42 План на пятницу
observed: GET api.mail.example/messages/42

Выбрать уровень проверки#

Уровень

Что подтверждает

Импорт деклараций

Контракты компилируются и типы согласованы

prepare(...)

Точные method, URL, headers и body без отправки

Локальный handler

Полный request/response pipeline и ошибки

Локальный сайт

Несколько связанных вызовов, cookies, refresh и replay

Реальный браузер

DOM, навигация, handlers и состояние контекста

Для подписанных или зашифрованных запросов проверяйте окончательные байты через recording handler, а открытые данные на стороне локального сайта. Не подменяйте compiler или executor: иначе тест подтверждает отдельную тестовую ветку, которой нет у пользователя SDK.

Примечание

Публичная сеть подходит для отдельного opt-in smoke test. Основной набор должен работать детерминированно и не зависеть от чужих credentials, rate limits или доступности сервиса.

Дальше#