Skip to content

Request for Supporting Dynamic Import in pytest_bdd_before_scenario #750

@ktzoulas

Description

@ktzoulas

I would like to request support for dynamically importing step definitions in the pytest_bdd_before_scenario hook. This feature would greatly enhance the flexibility and modularity of test setups, especially in large projects with multiple feature files and step definitions.

Current Behavior: Currently, pytest-bdd does not provide a straightforward way to dynamically import step definitions based on the feature file being executed. While it is possible to use importlib to import modules dynamically, the step definitions are not registered correctly, leading to issues where steps are not found during test execution.

Proposed Enhancement: Enhance the pytest_bdd_before_scenario hook to support dynamic import and registration of step definitions. This could involve:

  1. Allowing dynamic import of step definition modules based on the feature file path or tags.
  2. Ensuring that dynamically imported step definitions are correctly registered and recognized by pytest-bdd.

Use Case: In large projects with multiple feature files and step definitions, it is often necessary to organize step definitions into separate modules. Dynamically importing and registering these step definitions based on the feature file being executed would:

  • Improve modularity and maintainability of the test code.
  • Reduce the need for importing all step definitions globally, which can lead to namespace conflicts and increased memory usage.
  • Allow for more flexible and scalable test setups.

Example Scenario: Consider a project with the following structure:

project_root/
    tests/
        features/
            feature_a/
                feature_a.feature
            feature_b/
                feature_b.feature
        steps/
            test_feature_a.py
            test_feature_b.py
        conftest.py
        hooks.py

In the hooks.py file, we would like to dynamically import and register the appropriate step definitions based on the feature file being executed:

import importlib
from pytest_bdd import before_scenario

def pytest_bdd_before_scenario(request, feature, scenario):
    feature_path = feature.filename
    if 'feature_a' in feature_path:
        importlib.import_module('tests.steps.test_feature_a')
    elif 'feature_b' in feature_path:
        importlib.import_module('tests.steps.test_feature_b')

With the proposed enhancement, pytest-bdd would ensure that the dynamically imported step definitions are correctly registered and recognized during test execution.

Thank you for considering this enhancement request. I look forward to your feedback and hope to see this feature implemented in a future release.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions