Best Python code snippet using behave
command_steps.py
Source:command_steps.py
...28# -----------------------------------------------------------------------------29# UTILITIES:30# -----------------------------------------------------------------------------31@contextlib.contextmanager32def on_assert_failed_print_details(actual, expected):33 """34 Print text details in case of assertation failed errors.35 .. sourcecode:: python36 with on_assert_failed_print_details(actual_text, expected_text):37 assert actual == expected38 """39 try:40 yield41 except AssertionError:42 # diff = difflib.unified_diff(expected.splitlines(), actual.splitlines(),43 # "expected", "actual")44 diff = difflib.ndiff(expected.splitlines(), actual.splitlines())45 diff_text = u"\n".join(diff)46 print(u"DIFF (+ ACTUAL, - EXPECTED):\n{0}\n".format(diff_text))47 if DEBUG:48 print(u"expected:\n{0}\n".format(expected))49 print(u"actual:\n{0}\n".format(actual))50 raise51@contextlib.contextmanager52def on_error_print_details(actual, expected):53 """54 Print text details in case of assertation failed errors.55 .. sourcecode:: python56 with on_error_print_details(actual_text, expected_text):57 ... # Do something58 """59 try:60 yield61 except Exception:62 diff = difflib.ndiff(expected.splitlines(), actual.splitlines())63 diff_text = u"\n".join(diff)64 print(u"DIFF (+ ACTUAL, - EXPECTED):\n{0}\n".format(diff_text))65 if DEBUG:66 print(u"expected:\n{0}\n".format(expected))67 print(u"actual:\n{0}".format(actual))68 raise69# -----------------------------------------------------------------------------70# STEPS: WORKING DIR71# -----------------------------------------------------------------------------72@given(u'a new working directory')73def step_a_new_working_directory(context):74 """Creates a new, empty working directory."""75 command_util.ensure_context_attribute_exists(context, "workdir", None)76 # MAYBE: command_util.ensure_workdir_not_exists(context)77 command_util.ensure_workdir_exists(context)78 # OOPS:79 shutil.rmtree(context.workdir, ignore_errors=True)80 command_util.ensure_workdir_exists(context)81@given(u'I use the current directory as working directory')82def step_use_curdir_as_working_directory(context):83 """84 Uses the current directory as working directory85 """86 context.workdir = os.path.abspath(".")87 command_util.ensure_workdir_exists(context)88# -----------------------------------------------------------------------------89# STEPS: Create files with contents90# -----------------------------------------------------------------------------91@given(u'a file named "{filename}" and encoding="{encoding}" with')92def step_a_file_named_filename_and_encoding_with(context, filename, encoding):93 """Creates a textual file with the content provided as docstring."""94 __encoding_is_valid = True95 assert context.text is not None, "ENSURE: multiline text is provided."96 assert not os.path.isabs(filename)97 assert __encoding_is_valid98 command_util.ensure_workdir_exists(context)99 filename2 = os.path.join(context.workdir, filename)100 pathutil.create_textfile_with_contents(filename2, context.text, encoding)101@given(u'a file named "{filename}" with')102def step_a_file_named_filename_with(context, filename):103 """Creates a textual file with the content provided as docstring."""104 step_a_file_named_filename_and_encoding_with(context, filename, "UTF-8")105 # -- SPECIAL CASE: For usage with behave steps.106 if filename.endswith(".feature"):107 command_util.ensure_context_attribute_exists(context, "features", [])108 context.features.append(filename)109@given(u'an empty file named "{filename}"')110def step_an_empty_file_named_filename(context, filename):111 """112 Creates an empty file.113 """114 assert not os.path.isabs(filename)115 command_util.ensure_workdir_exists(context)116 filename2 = os.path.join(context.workdir, filename)117 pathutil.create_textfile_with_contents(filename2, "")118# -----------------------------------------------------------------------------119# STEPS: Run commands120# -----------------------------------------------------------------------------121@when(u'I run "{command}"')122@when(u'I run `{command}`')123def step_i_run_command(context, command):124 """125 Run a command as subprocess, collect its output and returncode.126 """127 command_util.ensure_workdir_exists(context)128 context.command_result = command_shell.run(command, cwd=context.workdir)129 command_util.workdir_save_coverage_files(context.workdir)130 if False and DEBUG:131 print(u"run_command: {0}".format(command))132 print(u"run_command.output {0}".format(context.command_result.output))133@when(u'I successfully run "{command}"')134@when(u'I successfully run `{command}`')135def step_i_successfully_run_command(context, command):136 step_i_run_command(context, command)137 step_it_should_pass(context)138@then(u'it should fail with result "{result:int}"')139def step_it_should_fail_with_result(context, result):140 assert_that(context.command_result.returncode, equal_to(result))141 assert_that(result, is_not(equal_to(0)))142@then(u'the command should fail with returncode="{result:int}"')143def step_it_should_fail_with_returncode(context, result):144 assert_that(context.command_result.returncode, equal_to(result))145 assert_that(result, is_not(equal_to(0)))146@then(u'the command returncode is "{result:int}"')147def step_the_command_returncode_is(context, result):148 assert_that(context.command_result.returncode, equal_to(result))149@then(u'the command returncode is non-zero')150def step_the_command_returncode_is_nonzero(context):151 assert_that(context.command_result.returncode, is_not(equal_to(0)))152@then(u'it should pass')153def step_it_should_pass(context):154 assert_that(context.command_result.returncode, equal_to(0),155 context.command_result.output)156@then(u'it should fail')157def step_it_should_fail(context):158 assert_that(context.command_result.returncode, is_not(equal_to(0)),159 context.command_result.output)160@then(u'it should pass with')161def step_it_should_pass_with(context):162 '''163 EXAMPLE:164 ...165 when I run "behave ..."166 then it should pass with:167 """168 TEXT169 """170 '''171 assert context.text is not None, "ENSURE: multiline text is provided."172 step_command_output_should_contain(context)173 assert_that(context.command_result.returncode, equal_to(0),174 context.command_result.output)175@then(u'it should fail with')176def step_it_should_fail_with(context):177 '''178 EXAMPLE:179 ...180 when I run "behave ..."181 then it should fail with:182 """183 TEXT184 """185 '''186 assert context.text is not None, "ENSURE: multiline text is provided."187 step_command_output_should_contain(context)188 assert_that(context.command_result.returncode, is_not(equal_to(0)))189# -----------------------------------------------------------------------------190# STEPS FOR: Output Comparison191# -----------------------------------------------------------------------------192@then(u'the command output should contain "{text}"')193def step_command_output_should_contain_text(context, text):194 '''195 EXAMPLE:196 ...197 Then the command output should contain "TEXT"198 '''199 expected_text = text200 if "{__WORKDIR__}" in expected_text or "{__CWD__}" in expected_text:201 expected_text = textutil.template_substitute(text,202 __WORKDIR__ = posixpath_normpath(context.workdir),203 __CWD__ = posixpath_normpath(os.getcwd())204 )205 actual_output = context.command_result.output206 with on_assert_failed_print_details(actual_output, expected_text):207 textutil.assert_normtext_should_contain(actual_output, expected_text)208@then(u'the command output should not contain "{text}"')209def step_command_output_should_not_contain_text(context, text):210 '''211 EXAMPLE:212 ...213 then the command output should not contain "TEXT"214 '''215 expected_text = text216 if "{__WORKDIR__}" in text or "{__CWD__}" in text:217 expected_text = textutil.template_substitute(text,218 __WORKDIR__ = posixpath_normpath(context.workdir),219 __CWD__ = posixpath_normpath(os.getcwd())220 )221 actual_output = context.command_result.output222 with on_assert_failed_print_details(actual_output, expected_text):223 textutil.assert_normtext_should_not_contain(actual_output, expected_text)224@then(u'the command output should contain "{text}" {count:d} times')225def step_command_output_should_contain_text_multiple_times(context, text, count):226 '''227 EXAMPLE:228 ...229 Then the command output should contain "TEXT" 3 times230 '''231 assert count >= 0232 expected_text = text233 if "{__WORKDIR__}" in expected_text or "{__CWD__}" in expected_text:234 expected_text = textutil.template_substitute(text,235 __WORKDIR__ = posixpath_normpath(context.workdir),236 __CWD__ = posixpath_normpath(os.getcwd())237 )238 actual_output = context.command_result.output239 with on_assert_failed_print_details(actual_output, expected_text):240 textutil.assert_normtext_should_contain_multiple_times(actual_output,241 expected_text,242 count)243@then(u'the command output should contain exactly "{text}"')244def step_command_output_should_contain_exactly_text(context, text):245 """246 Verifies that the command output of the last command contains the247 expected text.248 .. code-block:: gherkin249 When I run "echo Hello"250 Then the command output should contain "Hello"251 """252 expected_text = text253 if "{__WORKDIR__}" in text or "{__CWD__}" in text:254 expected_text = textutil.template_substitute(text,255 __WORKDIR__ = posixpath_normpath(context.workdir),256 __CWD__ = posixpath_normpath(os.getcwd())257 )258 actual_output = context.command_result.output259 textutil.assert_text_should_contain_exactly(actual_output, expected_text)260@then(u'the command output should not contain exactly "{text}"')261def step_command_output_should_not_contain_exactly_text(context, text):262 expected_text = text263 if "{__WORKDIR__}" in text or "{__CWD__}" in text:264 expected_text = textutil.template_substitute(text,265 __WORKDIR__ = posixpath_normpath(context.workdir),266 __CWD__ = posixpath_normpath(os.getcwd())267 )268 actual_output = context.command_result.output269 textutil.assert_text_should_not_contain_exactly(actual_output, expected_text)270@then(u'the command output should contain')271def step_command_output_should_contain(context):272 '''273 EXAMPLE:274 ...275 when I run "behave ..."276 then it should pass277 and the command output should contain:278 """279 TEXT280 """281 '''282 assert context.text is not None, "REQUIRE: multi-line text"283 step_command_output_should_contain_text(context, context.text)284@then(u'the command output should not contain')285def step_command_output_should_not_contain(context):286 '''287 EXAMPLE:288 ...289 when I run "behave ..."290 then it should pass291 and the command output should not contain:292 """293 TEXT294 """295 '''296 assert context.text is not None, "REQUIRE: multi-line text"297 step_command_output_should_not_contain_text(context, context.text.strip())298@then(u'the command output should contain {count:d} times')299def step_command_output_should_contain_multiple_times(context, count):300 '''301 EXAMPLE:302 ...303 when I run "behave ..."304 then it should pass305 and the command output should contain 2 times:306 """307 TEXT308 """309 '''310 assert context.text is not None, "REQUIRE: multi-line text"311 step_command_output_should_contain_text_multiple_times(context,312 context.text, count)313@then(u'the command output should contain exactly')314def step_command_output_should_contain_exactly_with_multiline_text(context):315 assert context.text is not None, "REQUIRE: multi-line text"316 step_command_output_should_contain_exactly_text(context, context.text)317@then(u'the command output should not contain exactly')318def step_command_output_should_contain_not_exactly_with_multiline_text(context):319 assert context.text is not None, "REQUIRE: multi-line text"320 step_command_output_should_not_contain_exactly_text(context, context.text)321# -----------------------------------------------------------------------------322# STEPS FOR: Directories323# -----------------------------------------------------------------------------324@step(u'I remove the directory "{directory}"')325def step_remove_directory(context, directory):326 path_ = directory327 if not os.path.isabs(directory):328 path_ = os.path.join(context.workdir, os.path.normpath(directory))329 if os.path.isdir(path_):330 shutil.rmtree(path_, ignore_errors=True)331 assert_that(not os.path.isdir(path_))332@given(u'I ensure that the directory "{directory}" does not exist')333def step_given_the_directory_should_not_exist(context, directory):334 step_remove_directory(context, directory)335@given(u'a directory named "{path}"')336def step_directory_named_dirname(context, path):337 assert context.workdir, "REQUIRE: context.workdir"338 path_ = os.path.join(context.workdir, os.path.normpath(path))339 if not os.path.exists(path_):340 os.makedirs(path_)341 assert os.path.isdir(path_)342@then(u'the directory "{directory}" should exist')343def step_the_directory_should_exist(context, directory):344 path_ = directory345 if not os.path.isabs(directory):346 path_ = os.path.join(context.workdir, os.path.normpath(directory))347 assert_that(os.path.isdir(path_))348@then(u'the directory "{directory}" should not exist')349def step_the_directory_should_not_exist(context, directory):350 path_ = directory351 if not os.path.isabs(directory):352 path_ = os.path.join(context.workdir, os.path.normpath(directory))353 assert_that(not os.path.isdir(path_))354@step(u'the directory "{directory}" exists')355def step_directory_exists(context, directory):356 """357 Verifies that a directory exists.358 .. code-block:: gherkin359 Given the directory "abc.txt" exists360 When the directory "abc.txt" exists361 """362 step_the_directory_should_exist(context, directory)363@step(u'the directory "{directory}" does not exist')364def step_directory_named_does_not_exist(context, directory):365 """366 Verifies that a directory does not exist.367 .. code-block:: gherkin368 Given the directory "abc/" does not exist369 When the directory "abc/" does not exist370 """371 step_the_directory_should_not_exist(context, directory)372# -----------------------------------------------------------------------------373# FILE STEPS:374# -----------------------------------------------------------------------------375@step(u'a file named "{filename}" exists')376def step_file_named_filename_exists(context, filename):377 """378 Verifies that a file with this filename exists.379 .. code-block:: gherkin380 Given a file named "abc.txt" exists381 When a file named "abc.txt" exists382 """383 step_file_named_filename_should_exist(context, filename)384@step(u'a file named "{filename}" does not exist')385def step_file_named_filename_does_not_exist(context, filename):386 """387 Verifies that a file with this filename does not exist.388 .. code-block:: gherkin389 Given a file named "abc.txt" does not exist390 When a file named "abc.txt" does not exist391 """392 step_file_named_filename_should_not_exist(context, filename)393@then(u'a file named "{filename}" should exist')394def step_file_named_filename_should_exist(context, filename):395 command_util.ensure_workdir_exists(context)396 filename_ = pathutil.realpath_with_context(filename, context)397 assert_that(os.path.exists(filename_) and os.path.isfile(filename_))398@then(u'a file named "{filename}" should not exist')399def step_file_named_filename_should_not_exist(context, filename):400 command_util.ensure_workdir_exists(context)401 filename_ = pathutil.realpath_with_context(filename, context)402 assert_that(not os.path.exists(filename_))403# -----------------------------------------------------------------------------404# STEPS FOR FILE CONTENTS:405# -----------------------------------------------------------------------------406@then(u'the file "{filename}" should contain "{text}"')407def step_file_should_contain_text(context, filename, text):408 expected_text = text409 if "{__WORKDIR__}" in text or "{__CWD__}" in text:410 expected_text = textutil.template_substitute(text,411 __WORKDIR__ = posixpath_normpath(context.workdir),412 __CWD__ = posixpath_normpath(os.getcwd())413 )414 file_contents = pathutil.read_file_contents(filename, context=context)415 file_contents = file_contents.rstrip()416 if file_contents_normalizer:417 # -- HACK: Inject TextProcessor as text normalizer418 file_contents = file_contents_normalizer(file_contents)419 with on_assert_failed_print_details(file_contents, expected_text):420 textutil.assert_normtext_should_contain(file_contents, expected_text)421@then(u'the file "{filename}" should not contain "{text}"')422def step_file_should_not_contain_text(context, filename, text):423 file_contents = pathutil.read_file_contents(filename, context=context)424 file_contents = file_contents.rstrip()425 textutil.assert_normtext_should_not_contain(file_contents, text)426 # XXX assert_that(file_contents, is_not(contains_string(text)))427@then(u'the file "{filename}" should contain')428def step_file_should_contain_multiline_text(context, filename):429 assert context.text is not None, "REQUIRE: multiline text"430 step_file_should_contain_text(context, filename, context.text)431@then(u'the file "{filename}" should not contain')432def step_file_should_not_contain_multiline_text(context, filename):433 assert context.text is not None, "REQUIRE: multiline text"...
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.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!