Пишу на python + selenium + pytest
В unittest я использовал ddt и брал разные данные из тестового файла
@ddt
@file_data('test.json')
def test(x,y....)
в py.test нет ddt, у меня большой объем тестовых данных, нашел только mark.parametrize. Пример
@pytest.mark.parametrize('value', (1, -3, 2, 0))
def test(self, value):
Плохо искал? Есть возможность указать в mark.parametrize файл, как в unittest ?
Можно попробовать считать файл в переменную (list) и подставить в parametrize:
data = [1,2,3,4,5]
@pytest.mark.parametrize('value', data)
def test(self, value):
pass
Кстати, если напрягает длинное название фикcтуры, то можно в отдельном файла ввести свои сокращения, например:
Создаем свой модуль: pytestmark.py:
import pytest
ddt = pytest.mark.parametrize
Используем в своих тестах:
from pytestmark import *
@ddt('value', data)
def test(self, value):
pass
2 лайка
bvrch
(Nikita Barchugov)
#4
По идее, можно же сделать генератор, который проходит по списку и распаковывает значения для каждой итерации теста с новыми данными.
Ещё можно стакать декораторы с параметризацией, чтобы получить все возможные комбинации
import pytest
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
pass
Получим x=0/y=2 , x=1/y=2 , x=0/y=3 , and x=1/y=3
Полезные ссылки:
Параметризация из json файла
Генерация тестов через объект metafunc
Наглядная параметризация
Использование indirect
Параметризация и indirect
Как работает yield
2 лайка
Поможет динамическая параметризация в Pytest-е. Вкурить сходу тяжело. Данные были из базы.