Size: a a a

testing_in_python

2021 April 18

M

Miki in testing_in_python
Привет. Нужна помощь с pytest параметризированными тестамиЕсть единоразовый сетап перед всеми тестами:images = []@pytest.fixture(scope="module")def setup():    global images    images = service.get_images()и несколько тестов, которые я хочу параметризовать с помощью данных, полученных в сетапе()@pytest.mark.usefixtures('setup')class TestClass:@pytest.mark.parametrize("image", images)def test_1(image):@pytest.mark.parametrize("image", images)def test_2(image):Но проблема в том, что parametrize вызывается до setup и вмето image_ids будет пустой массив.Мб есть у кого какие идеи?
источник

MR

Merg Rebas in testing_in_python
Ппц, думаешь, что кто-то захочет парсить это и попытаться помочь тебе? Отформатируй по-человечески.
источник

EB

Evgenii B in testing_in_python
http://pytest.readthedocs.io/en/stable/parametrize.html

Читать после слов Basic pytest_generate_tests example
источник

M

Miki in testing_in_python
Спасибо , сейчас буду ковыряться
источник
2021 April 19

ПБ

Павел Бобров... in testing_in_python
Всем привет. У меня есть следующая фикстура для сохранения скриншотов при фейле теста. И она прекрасно работает если запускать тесты при помощи pycharm. Но при запуске тестов через терминал (командой pytest path/to/tests) - изображения не сохраняются.
Может кто-нибудь подскажет почему?

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item):
   outcome = yield
   rep = outcome.get_result()
   setattr(item, "rep_" + rep.when, rep)
   return rep
@pytest.fixture(scope="function", autouse=True)
def failed_check(request):
   def tear_down():
       if request.node.rep_call.failed:
           driver = Application().driver
           take_screenshot(driver, request)
   request.addfinalizer(tear_down)
   yield
def take_screenshot(driver, request):
   sep = os.path.sep
   test_name = request.node.nodeid
   root_folder = os.path.dirname(os.path.abspath(__file__))
   file_path = os.path.join(root_folder, f'src{sep}reports{sep}screenshots{sep}')
   driver.save_screenshot(f"{file_path}{time.time()}screenshot_{test_name}.png".replace("::", "__"))
источник

СС

Сказочный Сникерс... in testing_in_python
это не фикстура, а переопределенный хук
источник

СС

Сказочный Сникерс... in testing_in_python
где он находится?
источник

СС

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

СС

Сказочный Сникерс... in testing_in_python
вероятнее всего твой хук при запуске не читается пайтестом, соответственно где бы ни была фикстура if request.node.rep_call.failed не срабатывает, скриншота нет
источник

ПБ

Павел Бобров... in testing_in_python
Находится в корне проекта в конфтесте.
Все строки выполняются
источник

ПБ

Павел Бобров... in testing_in_python
источник

ПБ

Павел Бобров... in testing_in_python
При чем все отлично работает если запускать таким вот образом
источник

P

Polina in testing_in_python
Может вы из разных папок запускаете?
источник

СС

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

СС

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

ПБ

Павел Бобров... in testing_in_python
Нашел проблему. Скриншот не сохранялся из-за слишком длинного имени файла. Все дело было в test_name = request.node.nodeid
В случае запуска через pycharm - я запускал тест из конкретного модуля и в этой переменной лежало только имя класса + имя функции
При запуске из терминала - я запускал из корня проекта и в переменную ложился полный путь от рута до имени функции
источник

СС

Сказочный Сникерс... in testing_in_python
а если взять request._pyfuncitem.nodeid?
источник

СС

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

BK

Boris Krutskih in testing_in_python
Всем привет, подскажите что вы используете для работы с google sheet таблицами?
В чем суть:
Хочу хранить тестовые данные для env'ов, в разных табах alpha, beta, prod.
и в зависимости эт выбранного env'a дёргать тестовые данные с нужной вкладки через АПИ. Таким образом если какие-то данные отлетели, дабы не лезть в код, не править и не пушить потом в репу, просто менять эти данные в таблице
источник

ПБ

Павел Бобров... in testing_in_python
нет, так как там тот же nodeid. Имя функции можно получить так: request.node.name
источник