diff --git a/README.md b/README.md new file mode 100644 index 0000000..dc95638 --- /dev/null +++ b/README.md @@ -0,0 +1,137 @@ +# API Checker - Models + +## Архитектура + +Данные flowing через систему: + +``` +YAML/OpenAPI/Postman → Parser → TestModel → Context → Runner → TestResult +``` + +## Классы + +### TestModel (models/itm.py) + +Основная структура теста. + +| Поле | Тип | Описание | +|------|-----|----------| +| name | str | Название теста | +| base_url | str | Базовый URL | +| variables | dict | Переменные | +| steps | list[StepModel] | Шаги теста | + +### StepModel (models/itm.py) + +Один шаг теста. + +| Поле | Тип | Описание | +|------|-----|----------| +| name | str | Название шага | +| request | RequestModel | HTTP запрос | +| extract | list[ExtractModel] | Извлечение данных | +| assert_ | list[AssertModel] | Проверки | + +### RequestModel (models/itm.py) + +HTTP запрос. + +| Поле | Тип | Описание | +|------|-----|----------| +| method | str | GET, POST, PUT... | +| path | str | Путь URL | +| headers | dict | Заголовки | +| body | dict | Тело запроса | +| timeout | int | Таймаут | + +### ExtractModel (models/itm.py) + +Извлечение данных из ответа. + +| Поле | Тип | Описание | +|------|-----|----------| +| name | str | Имя переменной | +| json_path | str | Путь к значению | +| source | str | body/header/status | + +### AssertModel (models/itm.py) + +Проверка ответа. + +| Поле | Тип | Описание | +|------|-----|----------| +| type | str | status/json/header | +| path | str | Путь к полю | +| operator | str | equals/exists/gt/lt | +| value | Any | Ожидаемое значение | + +### Context (models/context.py) + +Контекст выполнения. + +| Поле | Тип | Описание | +|------|-----|----------| +| config | TestModel | Конфигурация | +| variables | dict | Статические переменные | +| extracted | dict | Извлечённые данные | + +| Метод | Описание | +|-------|----------| +| resolve(template) | Заменяет {{var}} на значение | +| set_extracted(name, value) | Сохраняет извлечённое | + +### Executor (models/executor.py) + +Выполняет HTTP запросы. + +| Метод | Описание | +|-------|----------| +| execute(request) → Response | Выполняет запрос | + +### Extractor (models/extractor.py) + +Извлекает данные из ответов. + +| Метод | Описание | +|-------|----------| +| extract(configs, response) | Извлекает данные в Context | + +### Validator (models/validator.py) + +Проверяет ответы. + +| Метод | Описание | +|-------|----------| +| validate(asserts, response) → bool | Все ли проверки прошли | + +### TestRunner (models/runner.py) + +Оркестратор. + +| Метод | Описание | +|-------|----------| +| run() → TestResult | Запускает тест | + +## Пример использования + +```python +from models import TestModel, StepModel, RequestModel, ExtractModel, TestRunner, Context + +config = TestModel( + base_url="http://localhost:8080", + variables={"email": "test@x.com"}, + steps=[ + StepModel( + name="Login", + request=RequestModel(method="POST", path="/login"), + extract=[ExtractModel(name="token", json_path="$.token")], + ) + ] +) + +context = Context(config) +runner = TestRunner(context) +result = runner.run() + +print(result.passed) # True/False +```