How to use _generate_step_stack method in grail

Best Python code snippet using grail_python

steps.py

Source:steps.py Github

copy

Full Screen

...3from unittest import TestCase4import grail.state as state5import grail.settings as settings6from grail.step_info import StepInfo, StepResults7def _generate_step_stack():8 stack = traceback.extract_stack()9 step_index = next(i for i, e in enumerate(stack) if e[0].endswith('steps.py'))10 stack = stack[step_index - 1:]11 stack = filter(lambda e: not (e[0].endswith('steps.py') or e[0].endswith('step_info.py')), stack)12 return stack13class _RedirectOut(object):14 def __init__(self):15 self.temp = sys.stdout16 self.step_messages = []17 self.delimited_messages = []18 self.string = ''19 def write(self, s):20 if s.strip(' '):21 self.delimited_messages.append(s)22 if not s.strip('\n'):23 self.string = ''.join(self.delimited_messages)24 self.delimited_messages = []25 self.step_messages.append(self.string)26 def flush(self):27 pass28 def out_to_lst(self):29 sys.stdout = self30 def out_to_console(self):31 sys.stdout = self.temp32 def get_captured_output(self):33 def convert(line):34 final_line = state.indentation + line35 if isinstance(final_line, unicode):36 return final_line37 return unicode(final_line, errors='replace')38 return u''.join(map(convert, self.step_messages))39def _should_skip_step():40 if settings.disable_steps:41 return True42 if settings.export_mode:43 return False44 for filename, line_number, func_name, text in traceback.extract_stack():45 if func_name in settings.skip_func:46 return True47 if state.treat_nested_steps_as_methods_global and state.step_execution_started:48 return True49class GrailValidationException(Exception):50 pass51def _validate_step_info(step_info):52 if step_info.step_group and step_info.treat_nested_steps_as_methods:53 raise GrailValidationException(u'Step logic disabling is not applicable for step groups')54 if not step_info.step_group and state.step_execution_started:55 raise GrailValidationException(u'Step is called from another step (without group): %s' %56 step_info.function.func_name)57def _execute(step_info):58 if _should_skip_step():59 return step_info.run_function()60 redirected_out = _RedirectOut()61 redirected_out.out_to_lst()62 state.indentation = state.indentation + settings.indentation_const63 _validate_step_info(step_info)64 output, result, exception_instance = None, None, None65 def print_to_console():66 redirected_out.out_to_console()67 state.step_execution_started = False68 console_message = redirected_out.get_captured_output()69 state.indentation = state.indentation[:-len(settings.indentation_const)]70 print_message = step_info.get_description(output, result, exception_instance)71 if console_message:72 print_message += u'\n'73 print_message += console_message.rstrip()74 print print_message75 try:76 if state.pending_step or state.step_first_error is not None:77 result = StepResults.IGNORED78 elif step_info.pending:79 result = StepResults.PENDING80 state.pending_step = True81 else:82 if step_info.step_group:83 output = step_info.run_function()84 if state.step_first_error:85 if isinstance(state.step_first_error, TestCase.failureException):86 result = StepResults.FAILED87 else:88 result = StepResults.ERROR89 elif state.pending_step:90 result = StepResults.PENDING91 else:92 result = StepResults.PASSED93 else:94 state.step_execution_started = True95 state.treat_nested_steps_as_methods_global = step_info.treat_nested_steps_as_methods96 if not settings.export_mode:97 output = step_info.run_function()98 result = StepResults.PASSED99 except Exception as inst:100 if isinstance(inst, TestCase.failureException):101 result = StepResults.FAILED102 else:103 result = StepResults.ERROR104 if not state.is_test_wrapped:105 print_to_console()106 raise107 if step_info.step_group:108 raise GrailValidationException(u'Unexpected exception from step group: %s' % inst)109 if isinstance(inst, GrailValidationException):110 raise111 if not state.step_first_error:112 state.step_first_error = inst113 state.step_stack = _generate_step_stack()114 state.step_exception_traceback = sys.exc_info()[2]115 exception_instance = inst116 print_to_console()117 return output118def step(func=None, description='', pending=False, step_group=False, format_description=False,119 treat_nested_steps_as_methods=False, log_output=True, log_input=True):120 step_info = StepInfo()121 def wrapper(*args, **kwargs):122 step_info.args = args123 step_info.kwargs = kwargs124 return _execute(step_info)125 def params_wrapper(function):126 step_info.function = function127 return wrapper...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run grail automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful