Size: a a a

2020 April 08

AA

Alexander Adler in atinfo chat
Кто-нибудь может, напомнить, вроде я находил где-то в доках, но сейчас не ищется. Каким образом в pytest описать фикстуру так, чтобы при обращении к ней выполнялась функция с заданными параметрами foo(*args). Конкретнее, у меня есть метод, который для директории возвращает список файлов с атрибутами (хеши и пр.), и получать его нужно по ходу теста on demand, т.к. содержимое меняется
источник

S

Sergei in atinfo chat
не знаю правильно ли понял, но можно сделать callable fixture

@pytest.fixture
def my_fixture():
   def func(*args, **kwgs):
       do_something(*args, **kwgs)
   return func


def test(my_fixture):
   my_fixture('hello', 'world')
источник

MA

Maksim Andryushchenkov in atinfo chat
Alexander Adler
Кто-нибудь может, напомнить, вроде я находил где-то в доках, но сейчас не ищется. Каким образом в pytest описать фикстуру так, чтобы при обращении к ней выполнялась функция с заданными параметрами foo(*args). Конкретнее, у меня есть метод, который для директории возвращает список файлов с атрибутами (хеши и пр.), и получать его нужно по ходу теста on demand, т.к. содержимое меняется
Зачем в вашем примере вам фикстура? Почему функции недостаточно?
источник

S

Sergei in atinfo chat
вообще да, чаще можно просто вызвать функцию, но и бывает что желательно например сделать что-то дополнительное после теста:
@pytest.fixture
def my_fixture():
   resources = []
   def func(*args, **kwgs):
       resource = create_resource(*args, **kwgs)
       resources.append(resource)
       return resource
   yield func
   for resource in resources:
       resourse.destroy()


def test(my_fixture):
   res_1 = my_fixture(name='resourse-1')
   res_2 = my_fixture(name='resourse-2')
   assert res_1.name != res_2.name
источник

MA

Maksim Andryushchenkov in atinfo chat
Жесть шок) Фикстура стенд вообще должна готовить, а не ваши извращения с возвращением функций реализовывать. Конечно, фикстуры для вас, наверное, это модно, но когда у вас кодовая база возрастет до состояния "Что тут вообще делается?" вы станете проще  описывать функционал.
источник

EK

Elbrus K2 in atinfo chat
А кто-то пользуется аннотациями Tag в JUnit5?

У меня год назад был проект на мавене и как-то вообще всё просто было, например запустить помеченные тесты тегом можно было так:
mvn test -Dtag=<your tag>

Cейчас градл еще и сборная солянка, писался до меня несколькими людьми, сходу
gradlew.bat test -Dtag=<your tag>
Запускает вообще какую-то пачку тестов, явно не мною отмеченные, я так понимаю какие-то таски надо создать?
источник

S

Sergei in atinfo chat
Maksim Andryushchenkov
Жесть шок) Фикстура стенд вообще должна готовить, а не ваши извращения с возвращением функций реализовывать. Конечно, фикстуры для вас, наверное, это модно, но когда у вас кодовая база возрастет до состояния "Что тут вообще делается?" вы станете проще  описывать функционал.
🙂 какая у вас Максим бурная реакция, надеюсь что ваша кодовая база выглядит эталоном качества 😉
источник

MA

Maksim Andryushchenkov in atinfo chat
Sergei
🙂 какая у вас Максим бурная реакция, надеюсь что ваша кодовая база выглядит эталоном качества 😉
нет, просто я уже вагон таких фикстур переписал на более простые решения)
источник

СБ

Сергей Блохин in atinfo chat
Sergei
🙂 какая у вас Максим бурная реакция, надеюсь что ваша кодовая база выглядит эталоном качества 😉
Было бы единственно-правильное решение — все бы так делали. А так — каждый городит свой велосипед в рамках своих знаний и внешних ограничений. )
источник

AA

Alexander Adler in atinfo chat
Maksim Andryushchenkov
Зачем в вашем примере вам фикстура? Почему функции недостаточно?
Там просто метод экземпляра класса с определенными аргументами. Можно вернуть фикстурой экземпляр класса и вызвать метод с кваргами в тесте, конечно, но проще сразу приготовить фикстуру, которая возвращает что надо
источник

AA

Alexander Adler in atinfo chat
Sergei
не знаю правильно ли понял, но можно сделать callable fixture

@pytest.fixture
def my_fixture():
   def func(*args, **kwgs):
       do_something(*args, **kwgs)
   return func


def test(my_fixture):
   my_fixture('hello', 'world')
Вот да, спасибо )
Именно про callable fixture я и читал
источник

MA

Maksim Andryushchenkov in atinfo chat
Alexander Adler
Там просто метод экземпляра класса с определенными аргументами. Можно вернуть фикстурой экземпляр класса и вызвать метод с кваргами в тесте, конечно, но проще сразу приготовить фикстуру, которая возвращает что надо
а как вы планировали передавать эти аргументы в метод?
источник

MA

Maksim Andryushchenkov in atinfo chat
и статичны ли эти агрументы для теста?
источник

AA

Alexander Adler in atinfo chat
Для теста статичны, да. В примере от Sergei ничего не мешает написать в do_something аргументы, а не пробрасывать их из вызываемой ф-ции
источник

MA

Maksim Andryushchenkov in atinfo chat
Alexander Adler
Для теста статичны, да. В примере от Sergei ничего не мешает написать в do_something аргументы, а не пробрасывать их из вызываемой ф-ции
используйте тогда маркеры и получайте их значения в фикстуре
источник

MA

Maksim Andryushchenkov in atinfo chat
самое простое и понятное, кмк
источник

MA

Maksim Andryushchenkov in atinfo chat
то есть вам нужно навесить на тест маркер типа
@pytest.mark.my_func_args(a1, a2, a3)

вписать в аргументы теста вашу фикстуру, а потом в самой фикстуре
a1, a2, a3 = request.node.get_closest_marker('my_func_args').args
источник

MA

Maksim Andryushchenkov in atinfo chat
а дальше варите их как хотите и возвращайте
источник

КР

Катінька Рожанська in atinfo chat
привет всем. может кто-нибудь подскажет. Проект новичка Selenium-Maven-TestNG-Allure. Все запускается через терминал отлично, формируется отчет allure, но необходимо прикрутить проект на jenkins, а он берет результаты для алюра со своего локального workspace, но результаты то у меня формируються в папку проекта. Как указать дженкинсу, чтобы результаты для отчета брал из папки проекта а не воркспейса? Или поменять в поме абсолютный путь к воркспейсу дженкинса(как-то не очень коректно)? Я что-то запуталась
источник

MB

Mikhail Bratukhin in atinfo chat
А что это за папка проекта? Разве не должен Jenkins скачивать к себе в Workspace исходный код и там же внутри себя запускать проект с тестами и там же складывать результаты? Или вы куда-то во внешнее хранилище отгружаете результаты?
источник