Bird
Raised Fist0
PyTesttesting~20 mins

Combining multiple parametrize decorators in PyTest - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Parametrize Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of combined parametrize decorators in pytest
What is the total number of test cases executed by pytest for the following test function?
PyTest
import pytest

@pytest.mark.parametrize('x', [1, 2])
@pytest.mark.parametrize('y', [3, 4, 5])
def test_sum(x, y):
    assert (x + y) > 0
A3
B6
C5
D2
Attempts:
2 left
💡 Hint
Remember that multiple parametrize decorators multiply the number of test cases.
❓ assertion
intermediate
2:00remaining
Assertion behavior with combined parametrize decorators
Given the following test, which assertion will fail during pytest execution?
PyTest
import pytest

@pytest.mark.parametrize('a', [0, 1])
@pytest.mark.parametrize('b', [2, 3])
def test_multiply(a, b):
    assert (a * b) != 0
Aa=1, b=3
Ba=0, b=2
Ca=1, b=2
Da=0, b=3
Attempts:
2 left
💡 Hint
Check when the product of a and b equals zero.
🔧 Debug
advanced
2:00remaining
Identify the error in combined parametrize usage
What error will pytest raise when running this test code?
PyTest
import pytest

@pytest.mark.parametrize('x', [1, 2])
@pytest.mark.parametrize('x', [3, 4])
def test_values(x):
    assert x > 0
AValueError: conflicting parameter names
BTypeError: multiple values for argument 'x'
CSyntaxError: duplicate decorator parameter
Dpytest collects 4 tests and runs successfully
Attempts:
2 left
💡 Hint
Consider how pytest handles multiple parametrize decorators with the same argument name.
🧠 Conceptual
advanced
2:00remaining
Order of parameter combinations with multiple parametrize decorators
In pytest, when combining multiple parametrize decorators, which statement about the order of test case generation is true?
AThe outer decorator's parameters vary faster than the inner decorator's parameters.
BOnly the first decorator's parameters are used; others are ignored.
CThe inner decorator's parameters vary faster than the outer decorator's parameters.
DParameters vary randomly regardless of decorator order.
Attempts:
2 left
💡 Hint
Think about nested loops and which loop runs inside the other.
❓ framework
expert
3:00remaining
Combining parametrize with indirect fixture in pytest
Given the following pytest code, how many test cases will be executed?
PyTest
import pytest

@pytest.fixture

def data(request):
    return request.param * 2

@pytest.mark.parametrize('data', [1, 2], indirect=True)
@pytest.mark.parametrize('flag', [True, False])
def test_indirect(data, flag):
    assert isinstance(data, int) and isinstance(flag, bool)
A1
B2
C3
D4
Attempts:
2 left
💡 Hint
Consider how indirect parametrize and multiple decorators combine.

Practice

(1/5)
1. What happens when you use multiple @pytest.mark.parametrize decorators on a single test function?
easy
A. The test runs with all combinations of the parameters from each decorator.
B. Only the parameters from the first decorator are used.
C. The test runs once with the parameters from the last decorator only.
D. It causes a syntax error and the test does not run.

Solution

  1. Step 1: Understand multiple parametrize decorators

    Each @pytest.mark.parametrize decorator adds a set of parameters to the test function.
  2. Step 2: Combine parameters from all decorators

    pytest runs the test for every combination of parameters from all decorators, creating a Cartesian product.
  3. Final Answer:

    The test runs with all combinations of the parameters from each decorator. -> Option A
  4. Quick Check:

    Multiple parametrize = all combinations [OK]
Hint: Multiple parametrize means all parameter combos run [OK]
Common Mistakes:
  • Thinking only the first or last decorator applies
  • Assuming decorators overwrite each other
  • Believing it causes syntax errors
2. Which of the following is the correct syntax to combine two @pytest.mark.parametrize decorators for parameters x and y?
easy
A. @pytest.mark.parametrize(['x', 'y'], [1, 2], [3, 4]) def test_func(x, y): pass
B. @pytest.mark.parametrize('x, y', [(1, 3), (2, 4)]) def test_func(x, y): pass
C. @pytest.mark.parametrize('x', [1, 2], 'y', [3, 4]) def test_func(x, y): pass
D. @pytest.mark.parametrize('x', [1, 2]) @pytest.mark.parametrize('y', [3, 4]) def test_func(x, y): pass

Solution

  1. Step 1: Check syntax for multiple parametrize decorators

    Each decorator takes one parameter name string and a list of values.
  2. Step 2: Verify correct usage

    @pytest.mark.parametrize('x', [1, 2]) @pytest.mark.parametrize('y', [3, 4]) def test_func(x, y): pass correctly uses two separate decorators, each with one parameter and its values.
  3. Final Answer:

    Two separate @pytest.mark.parametrize decorators, one for each parameter. -> Option D
  4. Quick Check:

    Separate decorators, one param each = correct syntax [OK]
Hint: Use separate decorators for each param list [OK]
Common Mistakes:
  • Trying to pass multiple params in one decorator incorrectly
  • Using wrong argument formats
  • Combining parameters in one decorator without tuples
3. Given the code below, how many test cases will pytest run?
@pytest.mark.parametrize('a', [1, 2])
@pytest.mark.parametrize('b', [3, 4, 5])
def test_sum(a, b):
    assert a + b > 0
medium
A. 2
B. 6
C. 3
D. 5

Solution

  1. Step 1: Count values for each parameter

    Parameter 'a' has 2 values: 1, 2. Parameter 'b' has 3 values: 3, 4, 5.
  2. Step 2: Calculate total test cases

    pytest runs all combinations: 2 values for 'a' x 3 values for 'b' = 6 test cases.
  3. Final Answer:

    6 -> Option B
  4. Quick Check:

    2 x 3 = 6 test cases [OK]
Hint: Multiply counts of each param list for total tests [OK]
Common Mistakes:
  • Adding counts instead of multiplying
  • Counting only one decorator's values
  • Confusing number of test cases with assertion results
4. Identify the error in the following pytest code using multiple parametrize decorators:
@pytest.mark.parametrize('x', [1, 2])
@pytest.mark.parametrize('y', 3, 4)
def test_func(x, y):
    assert x != y
medium
A. The assertion should use '==' instead of '!='.
B. The test function is missing a return statement.
C. The second parametrize decorator has incorrect argument format.
D. The parameters 'x' and 'y' must be combined in one decorator.

Solution

  1. Step 1: Check parametrize decorator arguments

    The second decorator uses @pytest.mark.parametrize('y', 3, 4), which is invalid because values must be in a list or iterable.
  2. Step 2: Correct argument format

    Values should be passed as a list: [3, 4]. Without brackets, it causes a syntax or runtime error.
  3. Final Answer:

    The second parametrize decorator has incorrect argument format. -> Option C
  4. Quick Check:

    Parametrize values must be in a list [OK]
Hint: Always wrap parametrize values in a list or iterable [OK]
Common Mistakes:
  • Passing multiple values without brackets
  • Thinking test functions need return statements
  • Believing parameters must be combined in one decorator
5. You want to test a function with parameters color and size. Colors are ['red', 'blue'], sizes are ['S', 'M', 'L']. You want to skip tests where color is 'red' and size is 'L'. How can you combine multiple @pytest.mark.parametrize decorators and skip that case?
hard
A. Use two parametrize decorators and inside the test, add pytest.skip() if color is 'red' and size is 'L'.
B. Combine parameters in one parametrize decorator with all pairs except ('red', 'L').
C. Use one parametrize decorator for color and one for size, no skipping needed.
D. Use multiple parametrize decorators and mark the test with @pytest.mark.skip.

Solution

  1. Step 1: Use multiple parametrize decorators for color and size

    Apply two decorators, one for colors ['red', 'blue'] and one for sizes ['S', 'M', 'L'], to get all combinations.
  2. Step 2: Skip specific combination inside the test

    Inside the test function, check if color is 'red' and size is 'L'. If yes, call pytest.skip() to skip that test case.
  3. Final Answer:

    Use two parametrize decorators and inside the test, add pytest.skip() if color is 'red' and size is 'L'. -> Option A
  4. Quick Check:

    Skip specific combos inside test with pytest.skip() [OK]
Hint: Skip unwanted combos inside test using pytest.skip() [OK]
Common Mistakes:
  • Trying to exclude combos in parametrize decorators directly
  • Using @pytest.mark.skip to skip all tests
  • Combining all pairs manually instead of skipping in test
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard