Practice
1. What is the main purpose of dynamic fixture selection in
pytest?easy
Solution
Step 1: Understand fixture selection
Dynamic fixture selection means deciding which fixture to use while the test runs, not before.Step 2: Compare options
Only To choose which fixture to use during test execution based on runtime conditions describes choosing fixtures during test execution based on conditions.Final Answer:
To choose which fixture to use during test execution based on runtime conditions -> Option CQuick Check:
Dynamic fixture selection = runtime choice [OK]
Hint: Dynamic means choosing fixtures while tests run [OK]
Common Mistakes:
- Confusing static fixture assignment with dynamic selection
- Thinking fixtures generate test data automatically
- Believing dynamic selection skips tests
2. Which of the following is the correct syntax to select a fixture dynamically inside a test using
request.getfixturevalue()?easy
Solution
Step 1: Recall correct method name
The method to get a fixture by name dynamically isgetfixturevalue, notgetfixture.Step 2: Check argument type
The fixture name must be a string, so it should be quoted.Final Answer:
fixture_name = request.getfixturevalue('my_fixture') -> Option AQuick Check:
Use getfixturevalue('fixture_name') [OK]
Hint: Use getfixturevalue with string fixture name [OK]
Common Mistakes:
- Using getfixture instead of getfixturevalue
- Passing fixture name without quotes
- Calling getfixture as a function
3. Given the code below, what will be the output when running
test_dynamic_fixture?
import pytest
@pytest.fixture
def fixture_a():
return 'A'
@pytest.fixture
def fixture_b():
return 'B'
@pytest.mark.parametrize('use_a', [True, False])
def test_dynamic_fixture(request, use_a):
fixture_name = 'fixture_a' if use_a else 'fixture_b'
value = request.getfixturevalue(fixture_name)
print(value)
assert value in ['A', 'B']
medium
Solution
Step 1: Understand parameterization
The test runs twice: once with use_a=True, once with use_a=False.Step 2: Trace fixture selection and output
When use_a=True, fixture_name='fixture_a' returns 'A'. When False, fixture_name='fixture_b' returns 'B'. Both print and assert succeed.Final Answer:
Prints 'A' then 'B' and passes both tests -> Option DQuick Check:
Param True->A, False->B [OK]
Hint: Param True uses fixture_a, False uses fixture_b [OK]
Common Mistakes:
- Assuming getfixturevalue causes error
- Mixing order of printed values
- Thinking test fails due to assertion
4. Identify the error in the following test code that tries to select a fixture dynamically:
import pytest
@pytest.fixture
def fix1():
return 10
@pytest.fixture
def fix2():
return 20
@pytest.mark.parametrize('name', ['fix1', 'fix2'])
def test_select(request, name):
value = request.getfixture(name)
assert value in [10, 20]
medium
Solution
Step 1: Check method name for dynamic fixture
The correct method to get a fixture dynamically isgetfixturevalue, notgetfixture.Step 2: Confirm usage of fixture name
The fixture name is correctly passed as a string variable, so no issue there.Final Answer:
Using request.getfixture instead of request.getfixturevalue -> Option BQuick Check:
Use getfixturevalue, not getfixture [OK]
Hint: Remember method name: getfixturevalue, not getfixture [OK]
Common Mistakes:
- Confusing method names for fixture retrieval
- Passing fixture name incorrectly
- Misunderstanding assert logic
5. You want to write a test that uses different database connection fixtures based on an environment variable
DB_TYPE. Which approach correctly implements dynamic fixture selection in pytest?
A) Use request.getfixturevalue() inside the test to select the fixture by name.
B) Use @pytest.mark.usefixtures() with all fixtures and skip unwanted ones.
C) Use pytest_generate_tests() hook to parametrize fixtures.
D) Use yield in fixtures to switch dynamically.hard
Solution
Step 1: Understand environment-based fixture selection
Choosing a fixture based on an environment variable requires runtime decision inside the test.Step 2: Evaluate options for dynamic selection
Use request.getfixturevalue() inside the test to select the fixture by name. usesrequest.getfixturevalue()to pick the fixture by name at runtime, which fits the need.Step 3: Exclude other options
Use @pytest.mark.usefixtures() with all fixtures and skip unwanted ones. applies all fixtures upfront, not dynamic. Use pytest_generate_tests() hook to parametrize fixtures. is for test parametrization, not fixture selection. Use yield in fixtures to switch dynamically. misuses yield; it does not switch fixtures dynamically.Final Answer:
Use request.getfixturevalue() inside the test to select the fixture by name. -> Option AQuick Check:
Dynamic fixture selection = getfixturevalue() [OK]
Hint: Use getfixturevalue() for runtime fixture choice [OK]
Common Mistakes:
- Trying to parametrize fixtures instead of selecting dynamically
- Using usefixtures decorator incorrectly
- Misunderstanding yield usage in fixtures
