Search code examples
pythonpython-3.xpytestbddpytest-bdd

How to use Parameterized fixtures in pytest-bdd


I am trying to use parameterized fixture in my pytest-bdd framework. Normal fixture works fine. But If I am passing parameters, it gives below error The requested fixture has no parameter defined for test:

Below is my code(Sample). Waht is the correct usage here?

@pytest.fixture(params=[1,2])
def ba_data(request):
    print("this is fixture")
    return request.param


@given(parsers.cfparse('Collect testdata'))
def required_data(ba_data):
    print(ba_data)


Solution

  • in order to use parameterized fixture in pytest-bdd you have to declare the scenario using @scenario("yourfeaturename.feature","your scenario name")

    it would not work if you use the scenarios function as

    scenarios("yourfeaturename.feature")
    

    you will have to pass the fixture to the function below @scenario

    @scenario("yourfeaturename.feature","your scenario name")
    def test_mytest(ba_data):    
       pass
    
    
    @pytest.fixture(params=[1,2])
    def ba_data(request):
       print("this is fixture")
       return request.param
    
    
    @given(parsers.cfparse('Collect testdata'))
    def required_data(ba_data):
       print(ba_data)