Size: a a a

QA — Automation

2021 June 06

A

Alexander in QA — Automation
Ну я об этом и говорю, что фигня затея.
источник

А

Алексей in QA — Automation
def pytest_runtest_call(item):
   item._obj = check_wrapper(item._obj)

def check_wrapper(func):
   def func_wrapper(*args, **kwargs):
       try:
           func(*args, **kwargs)  # Add return if you need return values
       except AssertionError as ae:
           logger.error(f"Assertion failed: {str(ae)}")
           raise
       except Exception as e:
           logger.exception(str(e))
           logger.error(f"Unknown error: {str(e)}")
           raise

   update_wrapper(func_wrapper, func)
   return func_wrapper
источник

А

Алексей in QA — Automation
во враппер можно напихать любую логику, в тч сохранения локалс или чего там надо
источник

СС

Сказочный Сникерс... in QA — Automation
Вот они два лагеря, классы против хуков)
источник

А

Алексей in QA — Automation
😂😂😂
источник

А

Алексей in QA — Automation
От классов сильно пахнет xUnit ом!
источник

А

Алексей in QA — Automation
а так такой враппер достаточно прост в плане логгирования каких то вещей и общих пост операций
источник

СС

Сказочный Сникерс... in QA — Automation
А локалсы ты как достанешь?
источник

СС

Сказочный Сникерс... in QA — Automation
func.locals()?)
источник

А

Алексей in QA — Automation
import inspect
frames = inspect.stack()
for frame in frames:
   logger.info(frame.frame.f_locals)
источник

А

Алексей in QA — Automation
чото типа того, кода под рукой нет
источник

А

Алексей in QA — Automation
митинги...
источник

А

Алексей in QA — Automation
короче достать нужный фрейм и от него взять локалс
источник

А

Алексей in QA — Automation
при необходимости - несколько взять, смотря что там вложено внутри враппера и тп
источник

A

Alexander in QA — Automation
Мм не совсем пойму как это интегрировать в проект? Как я понял это где-то на уровне запуска тестов должно отрабатывать или в фикстуре?
источник

СС

Сказочный Сникерс... in QA — Automation
так же не будет работать. ты сможешь достать локалсы вызывающего, то есть выше по стеку
источник

СС

Сказочный Сникерс... in QA — Automation
но не ниже
источник

СС

Сказочный Сникерс... in QA — Automation
хуки, это другой уровень, не уровень тестов или фикстур
источник

СС

Сказочный Сникерс... in QA — Automation
def show_callers_locals():
   import inspect
   frame = inspect.currentframe()
   try:
       print(frame.f_back.f_locals)
   finally:
       del frame

def callers_func():
   local_1 = 123
   show_callers_locals()
источник

СС

Сказочный Сникерс... in QA — Automation
вот так будет работать да. но снаружи достать локалы show_callers_locals не выйдет же
источник