Size: a a a

testing_in_python

2021 July 19

Pavel Павлик in testing_in_python
Почему пересечение? Там же все возможные комбинации
источник

СС

Сказочный Сникерс... in testing_in_python
"каждому значению первой фикстуры соответсвовалоо множество значениий для другой" это не то же самое?
источник

СС

Сказочный Сникерс... in testing_in_python
import pytest


@pytest.fixture(params=[1, 2, 3, 4])
def fixt1(request):
   return request.param



@pytest.fixture(params=['a', 'b', 'c', 'd'])
def fixt2(request):
   return request.param



def test(fixt1, fixt2):
   print(fixt1, fixt2)



collected 16 items

<Module test.py>
 <Function test[1-a]>
 <Function test[1-b]>
 <Function test[1-c]>
 <Function test[1-d]>
 <Function test[2-a]>
 <Function test[2-b]>
 <Function test[2-c]>
 <Function test[2-d]>
 <Function test[3-a]>
 <Function test[3-b]>
 <Function test[3-c]>
 <Function test[3-d]>
 <Function test[4-a]>
 <Function test[4-b]>
 <Function test[4-c]>
 <Function test[4-d]>
источник

Pavel Павлик in testing_in_python
Я хочу указать каким-то образом, что для 'a' мне нужно только 2 и 3, а для 'b' 1 и 4
источник

ИС

Игорь Середа... in testing_in_python
Его твоё слово "пересечение" смутило просто.
источник

СС

Сказочный Сникерс... in testing_in_python
смотри в сторону pytest_generate_tests. по сути тебе надо в любом случае указывать логику что чему соответствует.
источник

Pavel Павлик in testing_in_python
Хотя, по факту это получается одна фикстура, разделенная на два аргумента функции. Можно объединить в одну, но придется в каждом тесте добавить строчку распаковки этого значения на два
источник

СС

Сказочный Сникерс... in testing_in_python
источник

СС

Сказочный Сникерс... in testing_in_python
import pytest


@pytest.fixture(params=[1, 2, 3, 4])
def fixt1(request):
   return request.param


@pytest.fixture(params=['a', 'b', 'c', 'd'])
def fixt2(fixt1, request):
   if request.param == 'a' and fixt1 not in (2, 3):
       pytest.skip()
   elif request.param == 'b' and fixt1 not in (1, 4):
       pytest.skip()

   return fixt1, request.param


def test(fixt2):
   print(fixt2)
источник

СС

Сказочный Сникерс... in testing_in_python
самый лайтовый вариант
источник

Pavel Павлик in testing_in_python
Видимо, легче либо передавать тапл и распаковывать в каждом тесте, либо передавать класс
источник

СС

Сказочный Сникерс... in testing_in_python
зависит от того как у тебя устроены твои фикстуры. то что их две явно не просто так, они выполняют свои определенные функции. во всех случаях кроме того как я описал выше - придется делать это в одном месте и заранее указывать нужные комбинации параметров
источник

Pavel Павлик in testing_in_python
Нужные комбинации кроме как с помощью pytest.mark.parametrize не указать. Правильно ведь?
источник

ИС

Игорь Середа... in testing_in_python
Зависит от того, что они делают. Я бы вторую фикстуру вообще на две разные разбил и назвал бы их соответственно, с учётом кейсов, которые она должна генерировать.

Например, делаю так для тестирования валидаторов, используя фикстуры для положительного и отрицательного сценариев в разных тестах, просто передавая их в аргументе теста по имени, без всяких велосипедов.
источник

Pavel Павлик in testing_in_python
У меня первая фикстура — это фабрика, а вторая — это данные, из которых собирает фабрика.
Поведение у фабрик различается в деталях, но в большем массе одинаковое.
К примеру, у меня есть тест, который проверяет валидацию денежных сумм. Я неможко меняю данные и проверяю, что фабрика обнаружила ошибку. Но для каждой фабрики нужны исходные данные немножко разных форматов. Но все исходные данные правильные по дефолту
источник

Pavel Павлик in testing_in_python
То есть смысла разбивать вторую фикстуру нет, потому что они все содержат валидные данные
источник

МА

Макс Алекс in testing_in_python
Добрый день Есть код смс активатора от которого я получаю номер телефона и в последствии смс. Надо вызвать данный код через фикстуры. Получить номер телефона получилось, а вот смс либо активируется вместе с номером и тогда не работает или падает с ошибкой. в чем может быть проблема?
https://github.com/SatanAda/python/blob/main/aktivator.py
источник

СС

Сказочный Сникерс... in testing_in_python
есть еще pytest_generate_tests которым ты можешь параметризовать любой тест нужными тебе комбинациями
источник

СС

Сказочный Сникерс... in testing_in_python
но если фикстурам нужны значения этих параметров - не прокатит
источник

СС

Сказочный Сникерс... in testing_in_python
в этом плане у пайтеста конечно все очень плохо и фикстуры сразу теряют весь свой смысл
источник