diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
index 8650b76..74367f9 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py
@@ -35,6 +35,9 @@
     # attach VIF to a node.
     min_microversion = '1.28'
 
+    image_ref = None
+    image_checksum = None
+
     @classmethod
     def skip_checks(cls):
         """Defines conditions to skip these tests."""
@@ -218,30 +221,28 @@
         return nodes[0]
 
     @classmethod
-    def boot_node(cls, driver, image_ref, image_checksum=None, **interfaces):
+    def boot_node(cls, image_ref=None, image_checksum=None):
         """Boot ironic node.
 
         The following actions are executed:
-          * Randomly pick an available node for deployment and reserve it.
-          * Update node driver.
           * Create/Pick networks to boot node in.
           * Create Neutron port and attach it to node.
           * Update node image_source/root_gb.
           * Deploy node.
           * Wait until node is deployed.
 
-        :param driver: Node driver to use.
         :param image_ref: Reference to user image to boot node with.
         :param image_checksum: md5sum of image specified in image_ref.
                                Needed only when direct HTTP link is provided.
-        :param interfaces: driver interfaces to set on the node
-        :returns: Ironic node.
         """
-        node = cls.get_and_reserve_node()
-        cls.update_node_driver(node['uuid'], driver, **interfaces)
+        if image_ref is None:
+            image_ref = cls.image_ref
+        if image_checksum is None:
+            image_checksum = cls.image_checksum
+
         network, subnet, router = cls.create_networks()
         n_port = cls.create_neutron_port(network_id=network['id'])
-        cls.vif_attach(node_id=node['uuid'], vif_id=n_port['id'])
+        cls.vif_attach(node_id=cls.node['uuid'], vif_id=n_port['id'])
         patch = [{'path': '/instance_info/image_source',
                   'op': 'add',
                   'value': image_ref}]
@@ -253,14 +254,14 @@
                       'op': 'add',
                       'value': CONF.baremetal.adjusted_root_disk_size_gb})
         # TODO(vsaienko) add testing for custom configdrive
-        cls.update_node(node['uuid'], patch=patch)
-        cls.set_node_provision_state(node['uuid'], 'active')
-        cls.wait_power_state(node['uuid'], bm.BaremetalPowerStates.POWER_ON)
-        cls.wait_provisioning_state(node['uuid'],
+        cls.update_node(cls.node['uuid'], patch=patch)
+        cls.set_node_provision_state(cls.node['uuid'], 'active')
+        cls.wait_power_state(cls.node['uuid'],
+                             bm.BaremetalPowerStates.POWER_ON)
+        cls.wait_provisioning_state(cls.node['uuid'],
                                     bm.BaremetalProvisionStates.ACTIVE,
                                     timeout=CONF.baremetal.active_timeout,
                                     interval=30)
-        return node
 
     @classmethod
     def terminate_node(cls, node_id):
@@ -347,13 +348,6 @@
         :param node: Ironic node to associate instance_uuid with, it is
             expected to be in 'active' state
         """
-        self.set_node_provision_state(node['uuid'], 'deleted')
-        self.wait_provisioning_state(
-            node['uuid'],
-            [bm.BaremetalProvisionStates.NOSTATE,
-             bm.BaremetalProvisionStates.AVAILABLE],
-            timeout=CONF.baremetal.unprovision_timeout,
-            interval=30)
         clean_steps = [
             {
                 "interface": "deploy",
@@ -386,15 +380,9 @@
     # been set via a different test).
     rescue_interface = None
 
-    # User image ref to boot node with.
-    image_ref = None
-
     # Boolean value specify if image is wholedisk or not.
     wholedisk_image = None
 
-    # Image checksum, required when image is stored on HTTP server.
-    image_checksum = None
-
     # If we need to set provision state 'deleted' for the node  after test
     delete_node = True
 
@@ -435,6 +423,18 @@
                 'Partitioned images are not supported with multitenancy.')
 
     @classmethod
+    def set_node_to_active(cls, image_ref=None, image_checksum=None):
+        cls.boot_node(image_ref, image_checksum)
+        if CONF.validation.connect_method == 'floating':
+            cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
+        elif CONF.validation.connect_method == 'fixed':
+            cls.node_ip = cls.get_server_ip(cls.node['uuid'])
+        else:
+            m = ('Configuration option "[validation]/connect_method" '
+                 'must be set.')
+            raise lib_exc.InvalidConfiguration(m)
+
+    @classmethod
     def resource_setup(cls):
         super(BaremetalStandaloneScenarioTest, cls).resource_setup()
         base.set_baremetal_api_microversion(cls.api_microversion)
@@ -450,20 +450,17 @@
             boot_kwargs['deploy_interface'] = cls.deploy_interface
         if cls.rescue_interface:
             boot_kwargs['rescue_interface'] = cls.rescue_interface
-        cls.node = cls.boot_node(cls.driver, cls.image_ref, **boot_kwargs)
-        if CONF.validation.connect_method == 'floating':
-            cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
-        elif CONF.validation.connect_method == 'fixed':
-            cls.node_ip = cls.get_server_ip(cls.node['uuid'])
-        else:
-            m = ('Configuration option "[validation]/connect_method" '
-                 'must be set.')
-            raise lib_exc.InvalidConfiguration(m)
+
+        # just get an available node
+        cls.node = cls.get_and_reserve_node()
+        cls.update_node_driver(cls.node['uuid'], cls.driver, **boot_kwargs)
 
     @classmethod
     def resource_cleanup(cls):
         if CONF.validation.connect_method == 'floating':
-            cls.cleanup_floating_ip(cls.node_ip)
+            if cls.node_ip:
+                cls.cleanup_floating_ip(cls.node_ip)
+
         vifs = cls.get_node_vifs(cls.node['uuid'])
         # Remove ports before deleting node, to catch regression for cases
         # when user did this prior unprovision node.
@@ -475,3 +472,9 @@
         cls.terminate_node(cls.node['uuid'])
         base.reset_baremetal_api_microversion()
         super(BaremetalStandaloneManager, cls).resource_cleanup()
+
+    def boot_and_verify_node(self, image_ref=None, image_checksum=None,
+                             should_succeed=True):
+        self.set_node_to_active(image_ref, image_checksum)
+        self.assertTrue(self.ping_ip_address(self.node_ip,
+                                             should_succeed=should_succeed))
diff --git a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
index f90f8ca..5aa7543 100644
--- a/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
+++ b/ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py
@@ -32,8 +32,7 @@
     @decorators.idempotent_id('defff515-a6ff-44f6-9d8d-2ded51196d98')
     @utils.services('image', 'network', 'object_storage')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalAgentIpmitoolWholediskHttpLink(
@@ -54,8 +53,7 @@
     @decorators.idempotent_id('d926c683-1a32-44df-afd0-e60134346fd0')
     @utils.services('network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalAgentIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
@@ -67,8 +65,7 @@
     @decorators.idempotent_id('27b86130-d8dc-419d-880a-fbbbe4ce3f8c')
     @utils.services('image', 'network', 'object_storage')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalPxeIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
@@ -80,8 +77,7 @@
     @decorators.idempotent_id('d8c5badd-45db-4d05-bbe8-35babbed6e86')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalPxeIpmitoolWholediskHttpLink(
@@ -102,8 +98,7 @@
     @decorators.idempotent_id('71ccf06f-6765-40fd-8252-1b1bfa423b9b')
     @utils.services('network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalPxeIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
@@ -115,8 +110,7 @@
     @decorators.idempotent_id('ea85e19c-6869-4577-b9bb-2eb150f77c90')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiIscsiWholedisk(bsm.BaremetalStandaloneScenarioTest):
@@ -130,8 +124,7 @@
     @decorators.idempotent_id('f25b71df-2150-45d7-a780-7f5b07124808')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiDirectWholedisk(bsm.BaremetalStandaloneScenarioTest):
@@ -145,8 +138,7 @@
     @decorators.idempotent_id('c2db24e7-07dc-4a20-8f93-d4efae2bfd4e')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiIscsiPartitioned(bsm.BaremetalStandaloneScenarioTest):
@@ -160,8 +152,7 @@
     @decorators.idempotent_id('7d0b205e-edbc-4e2d-9f6d-95cd74eefecb')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiDirectPartitioned(bsm.BaremetalStandaloneScenarioTest):
@@ -175,8 +166,7 @@
     @decorators.idempotent_id('7b4b2dcd-2bbb-44f5-991f-0964300af6b7')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiAnsibleWholedisk(bsm.BaremetalStandaloneScenarioTest):
@@ -190,8 +180,7 @@
     @decorators.idempotent_id('cde532cc-81ba-4489-b374-b4a85cc203eb')
     @utils.services('image', 'network')
     def test_ip_access_to_server(self):
-        self.assertTrue(self.ping_ip_address(self.node_ip,
-                                             should_succeed=True))
+        self.boot_and_verify_node()
 
 
 class BaremetalIpmiRescueWholedisk(bsm.BaremetalStandaloneScenarioTest):
@@ -212,6 +201,7 @@
     @decorators.idempotent_id('d6a1780f-c4bb-4136-8144-29e822e14d66')
     @utils.services('image', 'network')
     def test_rescue_mode(self):
+        self.set_node_to_active(self.image_ref)
         self.rescue_node(self.node['uuid'], 'abc123')
         self.assertTrue(self.ping_ip_address(self.node_ip,
                                              should_succeed=True))
@@ -239,6 +229,7 @@
     @decorators.idempotent_id('113acd0a-9872-4631-b3ee-54da7e3bb262')
     @utils.services('image', 'network')
     def test_rescue_mode(self):
+        self.set_node_to_active(self.image_ref)
         self.rescue_node(self.node['uuid'], 'abc123')
         self.assertTrue(self.ping_ip_address(self.node_ip,
                                              should_succeed=True))
