Проверить 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
Выбрать уровень проверки#
Уровень |
Что подтверждает |
|---|---|
Импорт деклараций |
Контракты компилируются и типы согласованы |
|
Точные 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 или доступности сервиса.