diff --git a/pytest_bdd/scenario.py b/pytest_bdd/scenario.py index e9990fd..927f4d5 100644 --- a/pytest_bdd/scenario.py +++ b/pytest_bdd/scenario.py @@ -12,17 +12,16 @@ test_publish_article = scenario( """ from __future__ import annotations -import collections import os import re from typing import TYPE_CHECKING, Callable, cast import pytest -from _pytest.fixtures import FixtureLookupError, FixtureManager, FixtureRequest, call_fixture_func +from _pytest.fixtures import FixtureManager, FixtureRequest, call_fixture_func from . import exceptions from .feature import get_feature, get_features -from .steps import StepFunctionContext, get_step_fixture_name, inject_fixture +from .steps import StepFunctionContext, inject_fixture from .utils import CONFIG_STACK, get_args, get_caller_module_locals, get_caller_module_path if TYPE_CHECKING: @@ -54,18 +53,6 @@ def find_argumented_step_function(name: str, type_: str, fixturemanager: Fixture return None -def _find_step_function(request: FixtureRequest, step: Step, scenario: Scenario) -> StepFunctionContext: - """Match the step defined by the parser.""" - # Could not find a fixture with the same name, let's see if there is a parser involved - step_func_context = find_argumented_step_function(step.name, step.type, request._fixturemanager) - if step_func_context is None: - raise exceptions.StepDefinitionNotFoundError( - f"Step definition is not found: {step}. " - f'Line {step.line_number} in scenario "{scenario.name}" in the feature "{scenario.feature.filename}"' - ) - return step_func_context - - def _execute_step_function( request: FixtureRequest, scenario: Scenario, step: Step, context: StepFunctionContext ) -> None: @@ -120,13 +107,17 @@ def _execute_scenario(feature: Feature, scenario: Scenario, request: FixtureRequ request.config.hook.pytest_bdd_before_scenario(request=request, feature=feature, scenario=scenario) for step in scenario.steps: - try: - step_func_context = _find_step_function(request, step, scenario) - except exceptions.StepDefinitionNotFoundError as exception: - request.config.hook.pytest_bdd_step_func_lookup_error( - request=request, feature=feature, scenario=scenario, step=step, exception=exception + context = find_argumented_step_function(step.name, step.type, request._fixturemanager) + if context is None: + exc = exceptions.StepDefinitionNotFoundError( + f"Step definition is not found: {step}. " + f'Line {step.line_number} in scenario "{scenario.name}" in the feature "{scenario.feature.filename}"' ) - raise + request.config.hook.pytest_bdd_step_func_lookup_error( + request=request, feature=feature, scenario=scenario, step=step, exception=exc + ) + raise exc + step_func_context = context try: _execute_step_function(request, scenario, step, step_func_context)