diff --git a/toolium/behave/environment.py b/toolium/behave/environment.py index 747e227f..7b57177d 100644 --- a/toolium/behave/environment.py +++ b/toolium/behave/environment.py @@ -72,12 +72,10 @@ def before_feature(context, feature): """ context.global_status = {'test_passed': True} - # Read @no_driver tag - no_driver = 'no_driver' in feature.tags - # Start driver if it should be reused in feature context.reuse_driver_from_tags = 'reuse_driver' in feature.tags if context.toolium_config.getboolean_optional('Driver', 'reuse_driver') or context.reuse_driver_from_tags: + no_driver = 'no_driver' in feature.tags start_driver(context, no_driver) # Behave dynamic environment diff --git a/toolium/test/behave/test_environment.py b/toolium/test/behave/test_environment.py index a72f1cfe..8dc0344f 100644 --- a/toolium/test/behave/test_environment.py +++ b/toolium/test/behave/test_environment.py @@ -21,8 +21,10 @@ import mock import pytest -from toolium.behave.environment import get_jira_key_from_scenario, before_all +from toolium.behave.environment import (get_jira_key_from_scenario, before_all, before_feature, before_scenario, + after_scenario, after_feature, after_all) from toolium.config_files import ConfigFiles +from toolium.config_parser import ExtendedConfigParser tags = ( (["jira('PROJECT-32')"], 'PROJECT-32'), @@ -64,8 +66,8 @@ def test_before_all(create_and_configure_wrapper): properties = ( - ('env'), - ('Config_environment'), + 'env', + 'Config_environment', ) @@ -86,3 +88,189 @@ def test_before_all_config_environment(create_and_configure_wrapper, property_na assert context.config_files.config_log_filename is None assert os.environ['Config_environment'] == 'os' del os.environ["Config_environment"] + + +@mock.patch('toolium.behave.environment.start_driver') +def test_before_feature(start_driver): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + feature = mock.MagicMock() + feature.tags = ['a', 'b'] + + before_feature(context, feature) + + # Check that start_driver is not called + start_driver.assert_not_called() + + +@mock.patch('toolium.behave.environment.start_driver') +def test_before_feature_reuse_driver(start_driver): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + feature = mock.MagicMock() + feature.tags = ['a', 'reuse_driver', 'b'] + + before_feature(context, feature) + + # Check that start_driver is called when reuse_driver tag + start_driver.assert_called_once_with(context, False) + assert context.reuse_driver_from_tags is True + + +@mock.patch('toolium.behave.environment.start_driver') +def test_before_feature_reuse_driver_no_driver(start_driver): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + feature = mock.MagicMock() + feature.tags = ['a', 'reuse_driver', 'b', 'no_driver'] + + before_feature(context, feature) + + # Check that start_driver is called when reuse_driver tag, with True no_driver param + start_driver.assert_called_once_with(context, True) + assert context.reuse_driver_from_tags is True + + +@mock.patch('toolium.behave.environment.add_assert_screenshot_methods') +@mock.patch('toolium.behave.environment.DriverWrappersPool') +@mock.patch('toolium.behave.environment.start_driver') +def test_before_scenario(start_driver, DriverWrappersPool, add_assert_screenshot_methods): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + scenario = mock.MagicMock() + scenario.tags = ['a', 'b'] + + before_scenario(context, scenario) + + # Check that start_driver is called + start_driver.assert_called_once_with(context, False) + DriverWrappersPool.stop_drivers.assert_not_called() + + +@mock.patch('toolium.behave.environment.add_assert_screenshot_methods') +@mock.patch('toolium.behave.environment.DriverWrappersPool') +@mock.patch('toolium.behave.environment.start_driver') +def test_before_scenario_reset_driver(start_driver, DriverWrappersPool, add_assert_screenshot_methods): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + scenario = mock.MagicMock() + scenario.tags = ['a', 'reset_driver', 'b'] + + before_scenario(context, scenario) + + # Check that start_driver and stop drivers are called + start_driver.assert_called_once_with(context, False) + DriverWrappersPool.stop_drivers.assert_called_once_with() + + +@mock.patch('toolium.behave.environment.add_assert_screenshot_methods') +@mock.patch('toolium.behave.environment.start_driver') +def test_before_scenario_no_driver(start_driver, add_assert_screenshot_methods): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + scenario = mock.MagicMock() + scenario.tags = ['a', 'no_driver', 'b'] + + before_scenario(context, scenario) + + # Check that start_driver is called + start_driver.assert_called_once_with(context, True) + + +@mock.patch('toolium.behave.environment.add_assert_screenshot_methods') +@mock.patch('toolium.behave.environment.start_driver') +def test_before_scenario_no_driver_feature(start_driver, add_assert_screenshot_methods): + # Create context mock + context = mock.MagicMock() + context.toolium_config = ExtendedConfigParser() + scenario = mock.MagicMock() + scenario.tags = ['a', 'b'] + scenario.feature.tags = ['no_driver'] + + before_scenario(context, scenario) + + # Check that start_driver is called + start_driver.assert_called_once_with(context, True) + + +@mock.patch('toolium.behave.environment.DriverWrappersPool') +def test_after_scenario_passed(DriverWrappersPool): + # Create context mock + context = mock.MagicMock() + context.global_status = {'test_passed': True} + scenario = mock.MagicMock() + scenario.name = 'name' + scenario.status = 'passed' + + after_scenario(context, scenario) + + # Check that close_drivers is called + assert context.global_status['test_passed'] is True + DriverWrappersPool.close_drivers.assert_called_once_with(context=context, scope='function', test_name='name', + test_passed=True) + + +@mock.patch('toolium.behave.environment.DriverWrappersPool') +def test_after_scenario_failed(DriverWrappersPool): + # Create context mock + context = mock.MagicMock() + context.global_status = {'test_passed': True} + scenario = mock.MagicMock() + scenario.name = 'name' + scenario.status = 'failed' + + after_scenario(context, scenario) + + # Check that close_drivers is called + assert context.global_status['test_passed'] is False + DriverWrappersPool.close_drivers.assert_called_once_with(context=context, scope='function', test_name='name', + test_passed=False) + + +@mock.patch('toolium.behave.environment.DriverWrappersPool') +def test_after_scenario_skipped(DriverWrappersPool): + # Create context mock + context = mock.MagicMock() + context.global_status = {'test_passed': True} + scenario = mock.MagicMock() + scenario.name = 'name' + scenario.status = 'skipped' + + after_scenario(context, scenario) + + # Check that close_drivers is not called + assert context.global_status['test_passed'] is True + DriverWrappersPool.close_drivers.assert_not_called() + + +@mock.patch('toolium.behave.environment.DriverWrappersPool') +def test_after_feature(DriverWrappersPool): + # Create context mock + context = mock.MagicMock() + context.global_status = {'test_passed': True} + feature = mock.MagicMock() + feature.name = 'name' + + after_feature(context, feature) + + # Check that close_drivers is called + DriverWrappersPool.close_drivers.assert_called_once_with(scope='module', test_name='name', test_passed=True) + + +@mock.patch('toolium.behave.environment.DriverWrappersPool') +def test_after_all(DriverWrappersPool): + # Create context mock + context = mock.MagicMock() + context.global_status = {'test_passed': True} + + after_all(context) + + # Check that close_drivers is called + DriverWrappersPool.close_drivers.assert_called_once_with(scope='session', test_name='multiple_tests', + test_passed=True)