#python #python-3.x #api #testing #pytest
#python #python-3.x #API #тестирование #pytest
Вопрос:
Итак, по сути, то, что я пытаюсь сделать, это сгенерировать все возможные комбинации из трех логических флагов, а затем выполнить некоторые операции на основе этих комбинаций. Есть ли способ, я могу сделать это, используя параметризацию в pytest?
Например, мой код может выглядеть примерно так:
@pytest.mark.parametrize("is_flag_1,is_flag_2,is_flag_3", [(True, False), (True, False), (True, False)])
def test_something(self, is_flag_1, is_flag_2, is_flag_3):
print(is_flag_1, is_flag_2, is_flag_3)
И затем это может сгенерировать 8 возможных комбинаций, таких как:
- Ложь, ложь, ложь
- False, False, True
- False, True, False и так далее, пока True, True, True
Поэтому вместо написания 8 разных тестовых примеров я хочу сделать это с помощью одного теста, используя pytest. Если есть какой-то другой способ, кроме параметризации, даже это сработает.
Ответ №1:
Да, вы можете просто параметризовать флаги отдельно:
import pytest
@pytest.mark.parametrize("is_flag_1", [True, False])
@pytest.mark.parametrize("is_flag_2", [True, False])
@pytest.mark.parametrize("is_flag_3", [True, False])
def test_something(is_flag_1, is_flag_2, is_flag_3):
print(is_flag_1, is_flag_2, is_flag_3)
python -m pytest -vv
приводит к чему-то вроде:
================================================= test session starts =================================================
...
collected 8 items
parametrize_bool.py::test_something[True-True-True] PASSED [ 12%]
parametrize_bool.py::test_something[True-True-False] PASSED [ 25%]
parametrize_bool.py::test_something[True-False-True] PASSED [ 37%]
parametrize_bool.py::test_something[True-False-False] PASSED [ 50%]
parametrize_bool.py::test_something[False-True-True] PASSED [ 62%]
parametrize_bool.py::test_something[False-True-False] PASSED [ 75%]
parametrize_bool.py::test_something[False-False-True] PASSED [ 87%]
parametrize_bool.py::test_something[False-False-False] PASSED [100%]
================================================== 8 passed in 0.35s ==================================================