From c63f05478a7a3e20d6ea44177b52dfe7bc20f133 Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 24 Aug 2026 15:47:47 +0300 Subject: [PATCH] feat(models): Added TestRunner class TestRunner orchestrates test execution: - Executor: sends HTTP requests - Extractor: extracts data from responses - Validator: checks assertions - Returns TestResult with pass/fail status --- models/runner.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 models/runner.py diff --git a/models/runner.py b/models/runner.py new file mode 100644 index 0000000..cf05a03 --- /dev/null +++ b/models/runner.py @@ -0,0 +1,38 @@ +from .itm import TestModel +from .context import Context +from .executor import Executor, Response +from .extractor import Extractor +from .validator import Validator + + +class StepResult: + def __init__(self, name: str, passed: bool, response: Response): + self.name = name + self.passed = passed + self.response = response + + +class TestResult: + def __init__(self, steps: list[StepResult]): + self.steps = steps + + @property + def passed(self) -> bool: + return all(s.passed for s in self.steps) + + +class TestRunner: + def __init__(self, context: Context): + self.context = context + self.executor = Executor(context) + self.extractor = Extractor(context) + self.validator = Validator() + + def run(self) -> TestResult: + results = [] + for step in self.context.config.steps: + response = self.executor.execute(step.request) + self.extractor.extract(step.extract, response) + passed = self.validator.validate(step.assert_, response) + results.append(StepResult(step.name, passed, response)) + return TestResult(results)