Using Pytest, I want to write a test function which takes in multiple fixtures as arguments. Each of the fixtures has several parameters.
For example, in test_demo.py is a function test_squared_is_less_than_10 that takes the fixtures, negative_integer and positive_integer as arguments, and then checks that the squared of the fixture parameters is less than 10.
import pytest
@pytest.fixture(params=[-1, -2, -3])
def negative_integer(request):
return request.param
@pytest.fixture(params=[1, 2, 3])
def positive_integer(request):
return request.param
def test_squared_is_less_than_10(negative_integer, positive_integer):
assert negative_integer ** 2 < 10
assert positive_integer ** 2 < 10
I expect that when I run the pytest command in the terminal, a total of 6 tests should be executed, i.e. [-1, -2, -3] for positive_integer and [1, 2, 3] for negative_integer.
However, pytest seems to executing a nested loop kind of iteration so that 9 tests are executed
i.e. [(-1, 1), (-1, 2), (-1, 3), (-2, 1), (-2, 2), (-2, 3), (-3, 1), (-3, 2), (-3, 3)].
Here is the output when I run pytest -v -k "test_squared_is_less":
test_squared_is_less_than_10[-1-1] PASSED
test_squared_is_less_than_10[-1-2] PASSED
test_squared_is_less_than_10[-1-3] PASSED
test_squared_is_less_than_10[-2-1] PASSED
test_squared_is_less_than_10[-2-2] PASSED
test_squared_is_less_than_10[-2-3] PASSED
test_squared_is_less_than_10[-3-1] PASSED
test_squared_is_less_than_10[-3-2] PASSED
test_squared_is_less_than_10[-3-3] PASSED
This is undesirable, as I only want to carry out 6 tests instead of 9. With a larger number of params (say 20), pytest will execute 400 tests instead of the desired 40 tests, which is a waste of computational time.
How can I deal with this problem.
P.S: I would like to avoid writing two separate tests, such as
test_negative_squared_is_less_than_10(negative_integer) and test_positive_squared_is_less_than_10(positive_integer)