Size: a a a

testing_in_python

2020 April 03

АК

Александр Кот in testing_in_python
John Smith
Привет, какую библиотеку посоветуете чтоб валидировать Джейсон схему респонса?
voluptuous + pytest-voluptuous
источник

KM

Konstantin Mikhed in testing_in_python
Всем привет.

Кто подскажет, как можно передать в тест набор параметров , которые можно получить только с использованием фикстур?
типо
@mark.parametrize('inputdata', help_function(fixture1, fixture2)

Проблема:
* передать в mark.parametrize функцию с фикстурами в аргументах не получается, так как это не тестовая функция
* также пробовал в conftest.py перенести эту функцию, и создать новую фикстуру по типу
@fixture(params=help_function(fixture1, fixture2))
 def help_fixture(request)
   return request.param
но когда я в нее передаю фикстуры, то ругается на 'Function object is not subscriptable'
* если саму help_function сделать фикстурой, чтобы в нее другие нормально передавались, то в help_fixture (код выше)  ругается что 'Fixtures are not meant to be called directly'

Заранее спасибо за любой ответ.
источник

СС

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

KM

Konstantin Mikhed in testing_in_python
условно она возвращает массив с данными, которые и будут параметрами для теста. но эти данные не получить без фикстур
источник

Y

Yaroslav in testing_in_python
Konstantin Mikhed
Всем привет.

Кто подскажет, как можно передать в тест набор параметров , которые можно получить только с использованием фикстур?
типо
@mark.parametrize('inputdata', help_function(fixture1, fixture2)

Проблема:
* передать в mark.parametrize функцию с фикстурами в аргументах не получается, так как это не тестовая функция
* также пробовал в conftest.py перенести эту функцию, и создать новую фикстуру по типу
@fixture(params=help_function(fixture1, fixture2))
 def help_fixture(request)
   return request.param
но когда я в нее передаю фикстуры, то ругается на 'Function object is not subscriptable'
* если саму help_function сделать фикстурой, чтобы в нее другие нормально передавались, то в help_fixture (код выше)  ругается что 'Fixtures are not meant to be called directly'

Заранее спасибо за любой ответ.
если не ошибаюсь, разве метод не нужно называть начиная с test_
источник

СС

Сказочный Сникерс in testing_in_python
а вообще твой вариант как то так
@fixture(params=['fixture1_name', 'fixture2_name'])
 def help_fixture(request)
   return request.getfixturevalue(request.param)
источник

СС

Сказочный Сникерс in testing_in_python
Konstantin Mikhed
условно она возвращает массив с данными, которые и будут параметрами для теста. но эти данные не получить без фикстур
или тебе надо то что вернет фикстура стало параметрами теста?
источник

KM

Konstantin Mikhed in testing_in_python
Сказочный Сникерс
или тебе надо то что вернет фикстура стало параметрами теста?
именно
источник

СС

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

СС

Сказочный Сникерс in testing_in_python
кажется что хватит и метода
источник

СС

Сказочный Сникерс in testing_in_python
или это не статичные данные а получаемые откуда то?
источник

СС

Сказочный Сникерс in testing_in_python
и чтобы их получить нужны другие фикстуры?
источник

KM

Konstantin Mikhed in testing_in_python
да, я их получаю
сорри, возможно плохо описал вопрос
источник

СС

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

СС

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

KM

Konstantin Mikhed in testing_in_python
да, именно
источник

СС

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

СС

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

СС

Сказочный Сникерс in testing_in_python
то есть до того как вычисслятся фикстуры и создастся твой объект с апи клиентом придется его создать отдельно и явно параметризовать тесты нужным набором данных
источник

СС

Сказочный Сникерс in testing_in_python
по другому никак
источник