Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request for Supporting Dynamic Import in pytest_bdd_before_scenario #750

Open
ktzoulas opened this issue Dec 1, 2024 · 0 comments
Open
Labels

Comments

@ktzoulas
Copy link

ktzoulas commented Dec 1, 2024

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.

@jsa34 jsa34 added the feature label Dec 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants