2017-02-10 15 views
1

Я создал обработчик ошибок для обработки скриншотов, когда сбойПользовательский обработчик ошибок для снятия скриншотов в Python-Веди

#error_handler.py 

def screenshot_handler(func): 
    def func_wrapper(self): 
     try: 
      return func(self) 
     except Exception as e: 
      print("screenshot") 
      return func(self) 
    return func_wrapper 

#page.py 

@screenshot_handler 
def assert_login(self,a): 
    self.find_element(*DashboardPageLocators.AUTOREFRESH_BUTTON) 
    return True 

#steps.py 
""" 
i forced this to fail 
""" 

@then('map should display') 
def step_impl(context): 
    page = LoginPage(context) 
    page.assert_login() 

Я хочу, чтобы захватить step аргумент 'map должен отображать', поэтому я создаю имя файла из него. Наиболее очевидным вариантом является, чтобы скопировать строку, но это было бы неэффективно, есть функция, что ведут себя я мог бы назвать, чтобы сделать справиться с этой

ответ

1

я делаю это в after_step функции environments.py:

def after_step(context, step): 
    if step.status == 'failed': 
     step_str = step.name 
     # Take screen shot and upload to s3 

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

Переменная step имеет ряд хитроумных вещей в нем:

(Pdb) pp(dir(step)) 

['__class__', 
'__delattr__', 
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattribute__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', 
'__lt__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'duration', 
'error_message', 
'exc_traceback', 
'exception', 
'filename', 
'keyword', 
'line', 
'location', 
'name', 
'replay', 
'reset', 
'run', 
'set_values', 
'status', 
'step_type', 
'store_exception_context', 
'table', 
'text', 
'type'] 

Стадию строка является просто test.name

+0

как о шаге строки, как получить доступ, что – teddybear123

+0

@ teddybear123 Обновленный ответ –