diff --git a/heat_tempest_plugin/tests/functional/test_create_update_neutron_port.py b/heat_tempest_plugin/tests/functional/test_create_update_neutron_port.py
index 72cd47c..eeeabf3 100644
--- a/heat_tempest_plugin/tests/functional/test_create_update_neutron_port.py
+++ b/heat_tempest_plugin/tests/functional/test_create_update_neutron_port.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -62,6 +64,7 @@
         port_mac = self._stack_output(stack, 'mac_address')
         return port_id[0], port_ip, port_mac
 
+    @decorators.idempotent_id('8e37933b-345c-4ce5-a523-e67bdf198d73')
     def test_update_remove_ip(self):
         # create with defined ip_address
         stack_identifier = self.stack_create(template=test_template)
@@ -77,6 +80,7 @@
         self.assertEqual(_id, new_id)
         self.assertEqual(_mac, new_mac)
 
+    @decorators.idempotent_id('df1bf0fb-115e-42f3-b6cc-e12b5d506c98')
     def test_update_with_mac_address(self):
         if not self.conf.admin_username or not self.conf.admin_password:
             self.skipTest('No admin creds found, skipping')
diff --git a/heat_tempest_plugin/tests/functional/test_create_update_neutron_subnet.py b/heat_tempest_plugin/tests/functional/test_create_update_neutron_subnet.py
index 345a740..9a10ba2 100644
--- a/heat_tempest_plugin/tests/functional/test_create_update_neutron_subnet.py
+++ b/heat_tempest_plugin/tests/functional/test_create_update_neutron_subnet.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -41,6 +43,7 @@
         output = self._stack_output(stack, output_key)
         return output
 
+    @decorators.idempotent_id('af43fc6d-58ba-4b5f-bd68-07b29f0a96bc')
     def test_update_allocation_pools(self):
         stack_identifier = self.stack_create(template=test_template)
         alloc_pools = self.get_outputs(stack_identifier, 'alloc_pools')
@@ -57,6 +60,7 @@
         self.assertEqual([{'start': '11.11.11.10', 'end': '11.11.11.100'}],
                          new_alloc_pools)
 
+    @decorators.idempotent_id('2f1d3b04-2183-4e50-8aa3-fa0fbff5c861')
     def test_update_allocation_pools_to_empty(self):
         stack_identifier = self.stack_create(template=test_template)
         alloc_pools = self.get_outputs(stack_identifier, 'alloc_pools')
@@ -72,6 +76,7 @@
         # new_alloc_pools should be []
         self.assertEqual([], new_alloc_pools)
 
+    @decorators.idempotent_id('6ec51150-6f83-4179-9faa-a3aee91ea150')
     def test_update_to_no_allocation_pools(self):
         stack_identifier = self.stack_create(template=test_template)
         alloc_pools = self.get_outputs(stack_identifier, 'alloc_pools')
@@ -87,6 +92,7 @@
         # last_alloc_pools should be []
         self.assertEqual([], last_alloc_pools)
 
+    @decorators.idempotent_id('ffb3eaf8-044b-4229-99f9-5fd983ccc9d9')
     def test_update_gateway_ip(self):
         stack_identifier = self.stack_create(template=test_template)
         gw_ip = self.get_outputs(stack_identifier, 'gateway_ip')
@@ -100,6 +106,7 @@
         # the gateway_ip should be the new one
         self.assertEqual('11.11.11.9', new_gw_ip)
 
+    @decorators.idempotent_id('e7b37a6b-e883-4c0c-b6a3-9ece1843e902')
     def test_update_gateway_ip_to_empty(self):
         stack_identifier = self.stack_create(template=test_template)
         gw_ip = self.get_outputs(stack_identifier, 'gateway_ip')
@@ -113,6 +120,7 @@
         # new gateway_ip should be None
         self.assertIsNone(new_gw_ip)
 
+    @decorators.idempotent_id('373bab03-1f66-4883-b1de-2ecc39efe17e')
     def test_update_to_no_gateway_ip(self):
         stack_identifier = self.stack_create(template=test_template)
         gw_ip = self.get_outputs(stack_identifier, 'gateway_ip')
diff --git a/heat_tempest_plugin/tests/functional/test_create_update_neutron_trunk.py b/heat_tempest_plugin/tests/functional/test_create_update_neutron_trunk.py
index d572405..ff5bcaf 100644
--- a/heat_tempest_plugin/tests/functional/test_create_update_neutron_trunk.py
+++ b/heat_tempest_plugin/tests/functional/test_create_update_neutron_trunk.py
@@ -15,6 +15,8 @@
 import copy
 import yaml
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -94,6 +96,7 @@
         sub_ports_set = {frozenset(d.items()) for d in new_sub_ports}
         return sub_ports_set
 
+    @decorators.idempotent_id('5572b0ac-fdb2-4c68-a49e-024771814471')
     def test_add_first_sub_port(self):
         stack_identifier = self.stack_create(template=test_template)
 
@@ -117,6 +120,7 @@
         self.assertEqual(self._sub_ports_dict_to_set(new_sub_port),
                          self._sub_ports_dict_to_set(trunk_sub_port))
 
+    @decorators.idempotent_id('c3f52330-01b7-4649-99fd-43700e6bbda3')
     def test_add_a_second_sub_port(self):
         parsed_template = yaml.safe_load(test_template)
         sub_ports = [{'port': {'get_resource': 'sub_port_one'},
@@ -153,6 +157,7 @@
         self.assertEqual(self._sub_ports_dict_to_set(expected_sub_ports),
                          self._sub_ports_dict_to_set(trunk_sub_ports))
 
+    @decorators.idempotent_id('cb59363e-5517-42f9-8b93-9ad700e2ef4c')
     def test_remove_sub_port_from_trunk(self):
         sub_ports = [{'port': {'get_resource': 'sub_port_one'},
                       'segmentation_type': 'vlan',
@@ -189,6 +194,7 @@
         self.assertEqual(self._sub_ports_dict_to_set(expected_sub_ports),
                          self._sub_ports_dict_to_set(trunk_sub_ports))
 
+    @decorators.idempotent_id('7f0836c7-1d35-4d11-bcdc-e0e19ca68b68')
     def test_remove_last_sub_port_from_trunk(self):
         sub_ports = [{'port': {'get_resource': 'sub_port_one'},
                       'segmentation_type': 'vlan',
@@ -224,6 +230,7 @@
                          'The returned sub ports (%s) in trunk_details is '
                          'not empty!' % trunk_sub_ports)
 
+    @decorators.idempotent_id('e9296d6f-009c-4530-9aaf-84a0f8281bcb')
     def test_update_existing_sub_port_on_trunk(self):
         sub_ports = [{'port': {'get_resource': 'sub_port_one'},
                       'segmentation_type': 'vlan',
@@ -253,6 +260,7 @@
         self.assertEqual(self._sub_ports_dict_to_set([updated_sub_port]),
                          self._sub_ports_dict_to_set(trunk_sub_ports))
 
+    @decorators.idempotent_id('912044d8-e0c1-4c6c-ab4e-bc1cadc46c18')
     def test_update_trunk_name_and_description(self):
         new_name = 'pineapple'
         new_description = 'This is a test trunk'
diff --git a/heat_tempest_plugin/tests/functional/test_encrypted_parameter.py b/heat_tempest_plugin/tests/functional/test_encrypted_parameter.py
index bfbd77b..0e7483e 100644
--- a/heat_tempest_plugin/tests/functional/test_encrypted_parameter.py
+++ b/heat_tempest_plugin/tests/functional/test_encrypted_parameter.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -43,6 +45,7 @@
     value: { get_param: foo }
 '''
 
+    @decorators.idempotent_id('d5bbf763-8eb9-4657-ad3f-e97405b6e1f2')
     def test_db_encryption(self):
         # Create a stack with the value of 'foo' to be encrypted
         foo_param = 'my_encrypted_foo'
diff --git a/heat_tempest_plugin/tests/functional/test_encryption_vol_type.py b/heat_tempest_plugin/tests/functional/test_encryption_vol_type.py
index 2b98022..c0dd884 100644
--- a/heat_tempest_plugin/tests/functional/test_encryption_vol_type.py
+++ b/heat_tempest_plugin/tests/functional/test_encryption_vol_type.py
@@ -10,6 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
 
 from heat_tempest_plugin.tests.functional import functional_base
 
@@ -73,6 +74,7 @@
         self.assertEqual(my_encrypted_vol_type_tmpl_prop['control_location'],
                          phy_rsrc_specs.control_location)
 
+    @decorators.idempotent_id('a98de4ce-aa59-478b-a8ce-b5d818c76a68')
     def test_create_update(self):
         stack_identifier = self.stack_create(
             template=test_encryption_vol_type)
diff --git a/heat_tempest_plugin/tests/functional/test_event_sinks.py b/heat_tempest_plugin/tests/functional/test_event_sinks.py
index a6e59eb..7cb1d7b 100644
--- a/heat_tempest_plugin/tests/functional/test_event_sinks.py
+++ b/heat_tempest_plugin/tests/functional/test_event_sinks.py
@@ -12,6 +12,7 @@
 
 import uuid
 
+from tempest.lib import decorators
 from zaqarclient.queues.v2 import client as zaqarclient
 
 from heat_tempest_plugin.common import test
@@ -28,6 +29,7 @@
       value: ok
 '''
 
+    @decorators.idempotent_id('d0b72695-e97d-4aa1-bfaf-31c14b09ac87')
     def test_events(self):
         queue_id = str(uuid.uuid4())
         environment = {'event_sinks': [{'type': 'zaqar-queue',
diff --git a/heat_tempest_plugin/tests/functional/test_external_ref.py b/heat_tempest_plugin/tests/functional/test_external_ref.py
index c54e453..d6a73ac 100644
--- a/heat_tempest_plugin/tests/functional/test_external_ref.py
+++ b/heat_tempest_plugin/tests/functional/test_external_ref.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -32,6 +34,7 @@
     value: {get_resource: test1}
 '''
 
+    @decorators.idempotent_id('45449bad-18ba-4148-82e6-a6bc1e9a9b04')
     def test_create_with_external_ref(self):
         stack_name = self._stack_rand_name()
         stack_identifier = self.stack_create(
@@ -55,6 +58,7 @@
               'output_key': 'str',
               'output_value': 'foobar'}], stack.outputs)
 
+    @decorators.idempotent_id('fb16477c-e981-4ef9-a83b-c0acc162343a')
     def test_update_with_external_ref(self):
         stack_name = self._stack_rand_name()
         stack_identifier = self.stack_create(
diff --git a/heat_tempest_plugin/tests/functional/test_hooks.py b/heat_tempest_plugin/tests/functional/test_hooks.py
index 78c58f3..91351fa 100644
--- a/heat_tempest_plugin/tests/functional/test_hooks.py
+++ b/heat_tempest_plugin/tests/functional/test_hooks.py
@@ -12,6 +12,8 @@
 
 import yaml
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -27,6 +29,7 @@
                              'foo_step3': {'type': 'OS::Heat::RandomString',
                                            'depends_on': 'foo_step2'}}}
 
+    @decorators.idempotent_id('f14cbe86-0392-474a-9f28-bb561745698d')
     def test_hook_pre_create(self):
         env = {'resource_registry':
                {'resources':
@@ -58,6 +61,7 @@
             stack_identifier, 'foo_step2', 'CREATE_COMPLETE')
         self._wait_for_stack_status(stack_identifier, 'CREATE_COMPLETE')
 
+    @decorators.idempotent_id('75009076-96eb-43af-b4df-f002704737d2')
     def test_hook_pre_update_nochange(self):
         env = {'resource_registry':
                {'resources':
@@ -99,6 +103,7 @@
         self.assertEqual(res_before.physical_resource_id,
                          res_after.physical_resource_id)
 
+    @decorators.idempotent_id('9f03d1e0-a2d2-42fc-a9c6-47db05b9c8ed')
     def test_hook_pre_update_replace(self):
         env = {'resource_registry':
                {'resources':
@@ -141,6 +146,7 @@
         self.assertNotEqual(res_before.physical_resource_id,
                             res_after.physical_resource_id)
 
+    @decorators.idempotent_id('15c4f97d-5e06-40c6-83af-0e57d5afaff9')
     def test_hook_pre_update_in_place(self):
         env = {'resource_registry':
                {'resources':
@@ -190,6 +196,7 @@
         self.assertEqual(res_before.physical_resource_id,
                          res_after.physical_resource_id)
 
+    @decorators.idempotent_id('7d96b5f4-4aba-493d-b098-4beea4654a2b')
     def test_hook_pre_create_nested(self):
         files = {'nested.yaml': yaml.safe_dump(self.template)}
         env = {'resource_registry':
@@ -231,6 +238,7 @@
             nested_identifier, 'foo_step2', 'CREATE_COMPLETE')
         self._wait_for_stack_status(stack_identifier, 'CREATE_COMPLETE')
 
+    @decorators.idempotent_id('cffc0783-3add-4f0c-ac66-03c90f6feeb0')
     def test_hook_pre_create_wildcard(self):
         env = {'resource_registry':
                {'resources':
diff --git a/heat_tempest_plugin/tests/functional/test_lbaasv2.py b/heat_tempest_plugin/tests/functional/test_lbaasv2.py
index e33c5b9..3439179 100644
--- a/heat_tempest_plugin/tests/functional/test_lbaasv2.py
+++ b/heat_tempest_plugin/tests/functional/test_lbaasv2.py
@@ -11,6 +11,8 @@
 #    under the License.
 
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -88,6 +90,7 @@
         if not self.is_network_extension_supported('lbaasv2'):
             self.skipTest('LBaasv2 extension not available, skipping')
 
+    @decorators.idempotent_id('2f4a476c-cba7-448b-a7c1-85f7284f0293')
     def test_create_update_loadbalancer(self):
         parameters = {
             'subnet': self.conf.fixed_subnet_name,
@@ -125,6 +128,7 @@
         self.assertEqual(7777, output['connection_limit'])
         self.assertEqual('updatedListener', output['description'])
 
+    @decorators.idempotent_id('104f59ae-a3c8-4c12-98e5-a7bc0007878d')
     def test_add_delete_poolmember(self):
         parameters = {
             'subnet': self.conf.fixed_subnet_name,
diff --git a/heat_tempest_plugin/tests/functional/test_nova_server_networks.py b/heat_tempest_plugin/tests/functional/test_nova_server_networks.py
index 9ab4eb1..32ed27a 100644
--- a/heat_tempest_plugin/tests/functional/test_nova_server_networks.py
+++ b/heat_tempest_plugin/tests/functional/test_nova_server_networks.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -173,6 +175,7 @@
         stack = self.client.stacks.get(stack_identifier)
         return self._stack_output(stack, output_key)
 
+    @decorators.idempotent_id('58ccf0aa-7531-4eaa-8ed5-38663a4defaa')
     def test_create_server_with_subnet_fixed_ip_sec_group(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'image': self.conf.minimal_image_ref}
@@ -190,6 +193,7 @@
         server = self.compute_client.servers.get(server_id)
         self.assertEqual([{"name": "the_sg"}], server.security_groups)
 
+    @decorators.idempotent_id('12185eaa-927f-43f3-a525-0424c4eb9b5d')
     def test_create_update_server_with_subnet(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'image': self.conf.minimal_image_ref}
@@ -213,6 +217,7 @@
         self.assertNotIn('11.11.11', new_networks['the_net'][0])
         self.assertIn('12.12.12', new_networks['the_net'][0])
 
+    @decorators.idempotent_id('19479c15-6b25-4865-8889-658566608bd9')
     def test_create_server_with_port(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'image': self.conf.minimal_image_ref}
@@ -234,6 +239,7 @@
         stack = self.client.stacks.get(stack_identifier)
         return self._stack_output(stack, output_key)
 
+    @decorators.idempotent_id('c1a22dbf-3160-41b7-8d3f-62ca33fc35a8')
     def test_create_update_server_swap_network_subnet(self):
         '''Test updating stack with:
 
@@ -257,6 +263,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('cccfe612-1ab7-401f-a4c5-63372826a780')
     def test_create_update_server_swap_network_port(self):
         '''Test updating stack with:
 
@@ -280,6 +287,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('3eeb0dff-5d2d-4178-a4e6-06e4c26ce23a')
     def test_create_update_server_swap_subnet_network(self):
         '''Test updating stack with:
 
@@ -303,6 +311,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('647fda5d-fc0c-4eb1-9ce3-c4c537461324')
     def test_create_update_server_add_subnet(self):
         '''Test updating stack with:
 
@@ -328,6 +337,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('01c0f1cd-25b2-49b9-b4ac-fc4dd8937e42')
     def test_create_update_server_add_same_fixed_ip(self):
         '''Test updating stack with:
 
@@ -355,6 +365,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('abc39cd6-7745-4314-ac04-85df532dd7c9')
     def test_create_update_server_add_network(self):
         '''Test updating stack with:
 
@@ -380,6 +391,7 @@
                           parameters=self.params)
         self.assertEqual(port0, self.get_outputs(stack_identifier, 'port0_id'))
 
+    @decorators.idempotent_id('3f729e7e-a698-4ee3-8a5e-0db84f16d1e1')
     def test_create_update_server_multi_networks_swaps(self):
         '''Test updating stack with:
 
diff --git a/heat_tempest_plugin/tests/functional/test_os_wait_condition.py b/heat_tempest_plugin/tests/functional/test_os_wait_condition.py
index e19be4f..dc78341 100644
--- a/heat_tempest_plugin/tests/functional/test_os_wait_condition.py
+++ b/heat_tempest_plugin/tests/functional/test_os_wait_condition.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -99,6 +101,7 @@
         if not self.conf.minimal_instance_type:
             raise self.skipException("No minimal flavor configured to test")
 
+    @decorators.idempotent_id('cc54ca6e-b91d-4ddd-80cc-24a886dfaaa0')
     def test_create_stack_with_multi_signal_waitcondition(self):
         params = {'flavor': self.conf.minimal_instance_type,
                   'image': self.conf.minimal_image_ref,
diff --git a/heat_tempest_plugin/tests/functional/test_preview.py b/heat_tempest_plugin/tests/functional/test_preview.py
index b1779dc..f1a6d72 100644
--- a/heat_tempest_plugin/tests/functional/test_preview.py
+++ b/heat_tempest_plugin/tests/functional/test_preview.py
@@ -10,9 +10,11 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from heat_tempest_plugin.tests.functional import functional_base
 from heatclient import exc
 import six
+from tempest.lib import decorators
+
+from heat_tempest_plugin.tests.functional import functional_base
 
 
 class StackPreviewTest(functional_base.FunctionalTestsBase):
@@ -88,6 +90,7 @@
         self.assertEqual(stack_name, result['parameters']['OS::stack_name'])
         self.assertEqual('abc', result['parameters']['incomming'])
 
+    @decorators.idempotent_id('4c2c062d-4723-42c0-a113-3307dd4ceb12')
     def test_basic_pass(self):
         stack_name = self._stack_rand_name()
         result = self.client.stacks.preview(
@@ -114,6 +117,7 @@
                 self.assertEqual('abc', res['properties']['value'])
                 self.assertEqual([], res['required_by'])
 
+    @decorators.idempotent_id('54e69a54-762d-479e-a4f4-1fbf21af01c6')
     def test_basic_fail(self):
         stack_name = self._stack_rand_name()
 
@@ -131,6 +135,7 @@
                       ': The Parameter (missing) was not provided.',
                       six.text_type(excp))
 
+    @decorators.idempotent_id('0449113c-ff90-4f2b-8825-27ea35c1983f')
     def test_nested_pass(self):
         """Nested stacks need to recurse down the stacks."""
         main_template = '''
@@ -187,6 +192,7 @@
         self.assertEqual('abc', res['properties']['value'])
         self.assertEqual([], res['required_by'])
 
+    @decorators.idempotent_id('6ca8ddfc-106f-4ecc-83f7-fca31d0c85ca')
     def test_res_group_with_nested_template(self):
         main_template = '''
 heat_template_version: 2015-04-30
diff --git a/heat_tempest_plugin/tests/functional/test_remote_stack.py b/heat_tempest_plugin/tests/functional/test_remote_stack.py
index 4c53933..5e778e7 100644
--- a/heat_tempest_plugin/tests/functional/test_remote_stack.py
+++ b/heat_tempest_plugin/tests/functional/test_remote_stack.py
@@ -13,6 +13,7 @@
 
 from heatclient import exc
 import six
+from tempest.lib import decorators
 
 from heat_tempest_plugin.tests.functional import functional_base
 
@@ -49,6 +50,7 @@
         self.template = self.template.replace('RegionOne',
                                               self.conf.region)
 
+    @decorators.idempotent_id('7e735c40-24fb-4ef8-8585-d1c68b344476')
     def test_remote_stack_alone(self):
         stack_id = self.stack_create(template=self.remote_template)
         expected_resources = {'random1': 'OS::Heat::RandomString'}
@@ -57,6 +59,7 @@
         output_value = self._stack_output(stack, 'remote_key')
         self.assertEqual(32, len(output_value))
 
+    @decorators.idempotent_id('aeed20d1-ebda-4544-9ace-16b0c8fc24f6')
     def test_stack_create(self):
         files = {'remote_stack.yaml': self.remote_template}
         stack_id = self.stack_create(files=files)
@@ -80,6 +83,7 @@
         remote_resources = {'random1': 'OS::Heat::RandomString'}
         self.assertEqual(remote_resources, self.list_resources(remote_id))
 
+    @decorators.idempotent_id('830bfeae-6d8a-4cb2-823d-d8b6c3a740ad')
     def test_stack_create_bad_region(self):
         tmpl_bad_region = self.template.replace(self.conf.region, 'DARKHOLE')
         files = {'remote_stack.yaml': self.remote_template}
@@ -94,6 +98,7 @@
                      'orchestration service in DARKHOLE region not found"')
         self.assertEqual(error_msg, six.text_type(ex))
 
+    @decorators.idempotent_id('b2190dfc-d223-4595-b168-6c42b0f3a3e5')
     def test_stack_resource_validation_fail(self):
         tmpl_bad_format = self.remote_template.replace('resources', 'resource')
         files = {'remote_stack.yaml': tmpl_bad_format}
@@ -106,6 +111,7 @@
                      'invalid: resource"') % self.conf.region
         self.assertEqual(error_msg, six.text_type(ex))
 
+    @decorators.idempotent_id('141f0478-121b-4e61-bde7-d5551bfd1fc2')
     def test_stack_update(self):
         files = {'remote_stack.yaml': self.remote_template}
         stack_id = self.stack_create(files=files)
@@ -137,6 +143,7 @@
         self.assertEqual(remote_resources,
                          self.list_resources(rstack.id))
 
+    @decorators.idempotent_id('50841af8-bdf5-4df6-a075-dc061ada6833')
     def test_stack_suspend_resume(self):
         files = {'remote_stack.yaml': self.remote_template}
         stack_id = self.stack_create(files=files)
diff --git a/heat_tempest_plugin/tests/functional/test_resources_list.py b/heat_tempest_plugin/tests/functional/test_resources_list.py
index 0a182ad..16c941f 100644
--- a/heat_tempest_plugin/tests/functional/test_resources_list.py
+++ b/heat_tempest_plugin/tests/functional/test_resources_list.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -35,6 +37,7 @@
 
 class ResourcesList(functional_base.FunctionalTestsBase):
 
+    @decorators.idempotent_id('b65b5c82-68b0-42c9-82a0-c0e74e9ad906')
     def test_filtering_with_depend(self):
         stack_identifier = self.stack_create(template=test_template_depend)
         [test2] = self.client.resources.list(stack_identifier,
@@ -42,6 +45,7 @@
 
         self.assertEqual('CREATE_COMPLETE', test2.resource_status)
 
+    @decorators.idempotent_id('97a65d53-b449-4a43-8283-42d43b165756')
     def test_required_by(self):
         stack_identifier = self.stack_create(template=test_template_depend)
         [test1] = self.client.resources.list(stack_identifier,
diff --git a/heat_tempest_plugin/tests/functional/test_software_config.py b/heat_tempest_plugin/tests/functional/test_software_config.py
index 2f31b29..f034096 100644
--- a/heat_tempest_plugin/tests/functional/test_software_config.py
+++ b/heat_tempest_plugin/tests/functional/test_software_config.py
@@ -20,6 +20,7 @@
 import yaml
 
 from oslo_utils import timeutils
+from tempest.lib import decorators
 
 from heat_tempest_plugin.common import exceptions
 from heat_tempest_plugin.common import test
@@ -69,6 +70,7 @@
 
     enable_cleanup = True
 
+    @decorators.idempotent_id('8ee231ff-f80a-4a17-a860-5cda87e18ad0')
     def test_deployments_metadata(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'network': self.conf.fixed_network_name,
@@ -102,6 +104,7 @@
         for config_stack in config_stacks:
             self._wait_for_stack_status(config_stack, 'CREATE_COMPLETE')
 
+    @decorators.idempotent_id('bd539232-b999-4bec-b47d-ff4822fc8b82')
     def test_deployments_timeout_failed(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'network': self.conf.fixed_network_name,
@@ -226,6 +229,7 @@
 queue_id = %(queue_id)s
     '''
 
+    @decorators.idempotent_id('3af97ced-bead-4629-b78a-97762719e990')
     def test_signal_queues(self):
         parms = {'flavor': self.conf.minimal_instance_type,
                  'network': self.conf.fixed_network_name,
diff --git a/heat_tempest_plugin/tests/functional/test_stack_events.py b/heat_tempest_plugin/tests/functional/test_stack_events.py
index 0db852e..185ca4f 100644
--- a/heat_tempest_plugin/tests/functional/test_stack_events.py
+++ b/heat_tempest_plugin/tests/functional/test_stack_events.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -42,6 +44,7 @@
         self.assertIsNotNone(event.resource_status_reason)
         self.assertIsNotNone(event.id)
 
+    @decorators.idempotent_id('620f4f7c-74f8-48a4-a8b0-d06d0337f133')
     def test_event(self):
         parameters = {}
 
diff --git a/heat_tempest_plugin/tests/functional/test_stack_outputs.py b/heat_tempest_plugin/tests/functional/test_stack_outputs.py
index f629a97..1b20b7b 100644
--- a/heat_tempest_plugin/tests/functional/test_stack_outputs.py
+++ b/heat_tempest_plugin/tests/functional/test_stack_outputs.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -35,6 +37,7 @@
     value: { get_attr: [test_resource_b, output] }
 '''
 
+    @decorators.idempotent_id('a886dd67-4506-4a37-82ae-43f0a7d83f35')
     def test_outputs(self):
         stack_identifier = self.stack_create(
             template=self.template
@@ -89,6 +92,7 @@
     value: {get_attr: [test_resource_b, output]}
 '''
 
+    @decorators.idempotent_id('aea0e495-4c77-4033-8c43-3351e9cb7b48')
     def test_outputs_update_new_resource(self):
         stack_identifier = self.stack_create(template=self.before_template)
         self.update_stack(stack_identifier, template=self.after_template)
@@ -133,6 +137,7 @@
     value: { get_param: foo }
 '''
 
+    @decorators.idempotent_id('993a403c-c6e2-475d-a65d-a82b8c9e0c22')
     def test_output_error_nested(self):
         stack_identifier = self.stack_create(
             template=self.nested_template,
diff --git a/heat_tempest_plugin/tests/functional/test_stack_tags.py b/heat_tempest_plugin/tests/functional/test_stack_tags.py
index a270950..7d3d52a 100644
--- a/heat_tempest_plugin/tests/functional/test_stack_tags.py
+++ b/heat_tempest_plugin/tests/functional/test_stack_tags.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -31,6 +33,7 @@
       value: {get_param: input}
 '''
 
+    @decorators.idempotent_id('67332e51-b427-42d5-ad8d-fd2ec334f361')
     def test_stack_tag(self):
         # Stack create with stack tags
         tags = 'foo,bar'
@@ -66,6 +69,7 @@
         empty_tags_stack = self.client.stacks.get(stack_identifier)
         self.assertIsNone(empty_tags_stack.tags)
 
+    @decorators.idempotent_id('5ed79584-0684-4f9c-ae8e-44a8f874ec79')
     def test_hidden_stack(self):
         # Stack create with hidden stack tag
         tags = 'foo,hidden'
diff --git a/heat_tempest_plugin/tests/functional/test_template_validate.py b/heat_tempest_plugin/tests/functional/test_template_validate.py
index ed85443..e41f952 100644
--- a/heat_tempest_plugin/tests/functional/test_template_validate.py
+++ b/heat_tempest_plugin/tests/functional/test_template_validate.py
@@ -14,6 +14,7 @@
 import six
 
 from heatclient import exc
+from tempest.lib import decorators
 
 from heat_tempest_plugin.tests.functional import functional_base
 
@@ -86,6 +87,7 @@
       length: {get_param: aparam}
 '''
 
+    @decorators.idempotent_id('b65a80c2-a507-4deb-9e7e-43181cc05211')
     def test_template_validate_basic(self):
         ret = self.client.stacks.validate(template=self.random_template)
         expected = {'Description': 'the stack description',
@@ -102,6 +104,7 @@
                         'resource_registry': {u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('bf27371d-e202-4bae-9f13-2ef137958517')
     def test_template_validate_override_default(self):
         env = {'parameters': {'aparam': 5}}
         ret = self.client.stacks.validate(template=self.random_template,
@@ -121,6 +124,7 @@
                         'resource_registry': {u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('0278e03d-ed50-4909-b29d-9c4267d3fcd6')
     def test_template_validate_override_none(self):
         env = {'resource_registry': {
                'OS::Heat::RandomString': 'OS::Heat::None'}}
@@ -142,6 +146,7 @@
                             u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('acb1435b-f1db-4427-9121-7e3144ddb81e')
     def test_template_validate_basic_required_param(self):
         tmpl = self.random_template.replace('default: 10', '')
         ret = self.client.stacks.validate(template=tmpl)
@@ -158,6 +163,7 @@
                         'resource_registry': {u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('7aac1feb-8256-4f70-8459-5e9780d28904')
     def test_template_validate_fail_version(self):
         fail_template = self.random_template.replace('2014-10-16', 'invalid')
         ex = self.assertRaises(exc.HTTPBadRequest,
@@ -165,6 +171,7 @@
                                template=fail_template)
         self.assertIn('The template version is invalid', six.text_type(ex))
 
+    @decorators.idempotent_id('6a6472d2-71fa-4ebe-a2b6-20878838555b')
     def test_template_validate_parameter_groups(self):
         ret = self.client.stacks.validate(template=self.random_template_groups)
         expected = {'Description': 'the stack description',
@@ -198,6 +205,7 @@
                         'resource_registry': {u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('5100cf18-f52a-47a2-880c-d540edad149f')
     def test_template_validate_nested_off(self):
         files = {'mynested.yaml': self.random_template}
         ret = self.client.stacks.validate(template=self.parent_template,
@@ -218,6 +226,7 @@
                             u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('480bcf64-25ae-49c7-b147-7cbc27d09cea')
     def test_template_validate_nested_on(self):
         files = {'mynested.yaml': self.random_template}
         ret = self.client.stacks.validate(template=self.parent_template_noprop,
@@ -244,6 +253,7 @@
                             u'resources': {}}}}
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('a0bb07f0-2e10-4226-a205-a7eb04df415f')
     def test_template_validate_nested_on_multiple(self):
         # parent_template -> nested_template -> random_template
         nested_template = self.random_template.replace(
diff --git a/heat_tempest_plugin/tests/functional/test_templates.py b/heat_tempest_plugin/tests/functional/test_templates.py
index 95c6a01..5cb7b66 100644
--- a/heat_tempest_plugin/tests/functional/test_templates.py
+++ b/heat_tempest_plugin/tests/functional/test_templates.py
@@ -10,6 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
 
 from heat_tempest_plugin.tests.functional import functional_base
 
@@ -38,6 +39,7 @@
         }
     }
 
+    @decorators.idempotent_id('ac6ebc41-bd6a-4df4-80e5-f4b9ae3b5506')
     def test_get_stack_template(self):
         stack_identifier = self.stack_create(
             template=self.template
@@ -45,11 +47,13 @@
         template_from_client = self.client.stacks.template(stack_identifier)
         self.assertEqual(self.template, template_from_client)
 
+    @decorators.idempotent_id('9f9a2fc0-f029-4d1f-a2eb-f019b9f75944')
     def test_resource_types(self):
         resource_types = self.client.resource_types.list()
         self.assertTrue(any(resource.resource_type == "OS::Heat::TestResource"
                             for resource in resource_types))
 
+    @decorators.idempotent_id('fafbdcd0-eec3-4e6f-9c88-1e4835d085cf')
     def test_show_resource_template(self):
         resource_details = self.client.resource_types.get(
             resource_type="OS::Heat::TestResource"
diff --git a/heat_tempest_plugin/tests/functional/test_unicode_template.py b/heat_tempest_plugin/tests/functional/test_unicode_template.py
index 9184455..02bad65 100644
--- a/heat_tempest_plugin/tests/functional/test_unicode_template.py
+++ b/heat_tempest_plugin/tests/functional/test_unicode_template.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.tests.functional import functional_base
 
 
@@ -61,6 +63,7 @@
         self.assertEqual('OS::Heat::RandomString',
                          result['resource_type'])
 
+    @decorators.idempotent_id('871cc5dd-7550-494d-8c6d-9d549a8c0305')
     def test_template_validate_basic(self):
         ret = self.client.stacks.validate(template=self.random_template)
         expected = {
@@ -82,6 +85,7 @@
         }
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('e84c76b8-a5e5-45e7-9c4b-4c160d1c385f')
     def test_template_validate_override_default(self):
         env = {'parameters': {u'\u53c2\u6570': 5}}
         ret = self.client.stacks.validate(template=self.random_template,
@@ -106,6 +110,7 @@
         }
         self.assertEqual(expected, ret)
 
+    @decorators.idempotent_id('66338945-a3ae-4e3a-aa17-ab802ceb00b1')
     def test_stack_preview(self):
         result = self.client.stacks.preview(
             template=self.random_template,
@@ -113,6 +118,7 @@
             disable_rollback=True).to_dict()
         self._assert_preview_results(result)
 
+    @decorators.idempotent_id('d2c4a10c-3cb4-4efd-889d-695a0acbd04f')
     def test_create_stack(self):
         stack_identifier = self.stack_create(template=self.random_template)
         stack = self.client.stacks.get(stack_identifier)
diff --git a/heat_tempest_plugin/tests/functional/test_waitcondition.py b/heat_tempest_plugin/tests/functional/test_waitcondition.py
index 84d8ef1..b50c0a2 100644
--- a/heat_tempest_plugin/tests/functional/test_waitcondition.py
+++ b/heat_tempest_plugin/tests/functional/test_waitcondition.py
@@ -13,6 +13,7 @@
 import json
 
 from keystoneclient.v3 import client as keystoneclient
+from tempest.lib import decorators
 from zaqarclient.queues.v2 import client as zaqarclient
 
 from heat_tempest_plugin.tests.functional import functional_base
@@ -38,6 +39,7 @@
    value: {'Fn::Select': ['data_id', {get_attr: [wait_condition, data]}]}
 '''
 
+    @decorators.idempotent_id('90183f0d-9929-43a6-8fb6-b81003824c6d')
     def test_signal_queues(self):
         stack_identifier = self.stack_create(
             template=self.template,
diff --git a/heat_tempest_plugin/tests/scenario/test_aodh_alarm.py b/heat_tempest_plugin/tests/scenario/test_aodh_alarm.py
index 3108c1e..4e25158 100644
--- a/heat_tempest_plugin/tests/scenario/test_aodh_alarm.py
+++ b/heat_tempest_plugin/tests/scenario/test_aodh_alarm.py
@@ -11,7 +11,9 @@
 #    under the License.
 
 import datetime
+
 from oslo_log import log as logging
+from tempest.lib import decorators
 
 from heat_tempest_plugin.common import test
 from heat_tempest_plugin.tests.scenario import scenario_base
@@ -35,6 +37,7 @@
                                                                  actual))
         return actual == expected
 
+    @decorators.idempotent_id('fc0f18a6-f65c-4df1-b9c5-e160dea59849')
     def test_alarm(self):
         """Confirm we can create an alarm and trigger it."""
         # create metric
diff --git a/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py b/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py
index e576867..b8ffa1f 100644
--- a/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py
+++ b/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py
@@ -14,6 +14,7 @@
 import time
 
 import requests
+from tempest.lib import decorators
 
 from heat_tempest_plugin.common import test
 from heat_tempest_plugin.tests.scenario import scenario_base
@@ -48,6 +49,7 @@
                 resp.add(r.text)
         self.assertEqual(expected_num, len(resp))
 
+    @decorators.idempotent_id('48ddbc45-cef6-4640-acd6-7efc281833b9')
     def test_autoscaling_loadbalancer_neutron(self):
         """Check work of AutoScaing and Neutron LBaaS v1 resource in Heat.
 
diff --git a/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py b/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py
index 65fa91c..52957f5 100644
--- a/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py
+++ b/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py
@@ -14,6 +14,7 @@
 import time
 
 import requests
+from tempest.lib import decorators
 
 from heat_tempest_plugin.common import test
 from heat_tempest_plugin.tests.scenario import scenario_base
@@ -50,6 +51,7 @@
                     break
         self.assertEqual(expected_num, len(resp))
 
+    @decorators.idempotent_id('89459930-aa61-4557-989b-3429d3b3b612')
     def test_autoscaling_loadbalancer_neutron(self):
         """Check work of AutoScaing and Neutron LBaaS v2 resource in Heat.
 
diff --git a/heat_tempest_plugin/tests/scenario/test_base_resources.py b/heat_tempest_plugin/tests/scenario/test_base_resources.py
index e63242e..ddd8564 100644
--- a/heat_tempest_plugin/tests/scenario/test_base_resources.py
+++ b/heat_tempest_plugin/tests/scenario/test_base_resources.py
@@ -10,9 +10,11 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from heatclient.common import template_utils
+from tempest.lib import decorators
+
 from heat_tempest_plugin.common import test
 from heat_tempest_plugin.tests.scenario import scenario_base
-from heatclient.common import template_utils
 
 
 class BasicResourcesTest(scenario_base.ScenarioTestsBase):
@@ -38,6 +40,7 @@
         server_networks = self._stack_output(stack, 'server_networks')
         self.assertIn(self.private_net_name, server_networks)
 
+    @decorators.idempotent_id('bd151ea4-2dcd-4440-9bf0-eff63a98e5d4')
     def test_base_resources_integration(self):
         """Define test for base resources interation from core porjects
 
diff --git a/heat_tempest_plugin/tests/scenario/test_server_cfn_init.py b/heat_tempest_plugin/tests/scenario/test_server_cfn_init.py
index 5ea0fb9..963d1ad 100644
--- a/heat_tempest_plugin/tests/scenario/test_server_cfn_init.py
+++ b/heat_tempest_plugin/tests/scenario/test_server_cfn_init.py
@@ -12,6 +12,8 @@
 
 import json
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.common import exceptions
 from heat_tempest_plugin.tests.scenario import scenario_base
 
@@ -92,6 +94,7 @@
                 self._log_console_output(servers=[server])
                 raise
 
+    @decorators.idempotent_id('3f7726fc-a41b-40ca-ab38-51e2973f146a')
     def test_server_cfn_init(self):
         """Check cfn-init and cfn-signal availability on the created server.
 
diff --git a/heat_tempest_plugin/tests/scenario/test_server_signal.py b/heat_tempest_plugin/tests/scenario/test_server_signal.py
index a49a21b..a43c74a 100644
--- a/heat_tempest_plugin/tests/scenario/test_server_signal.py
+++ b/heat_tempest_plugin/tests/scenario/test_server_signal.py
@@ -13,6 +13,8 @@
 
 import json
 
+from tempest.lib import decorators
+
 from heat_tempest_plugin.common import exceptions
 from heat_tempest_plugin.tests.scenario import scenario_base
 
@@ -75,10 +77,12 @@
             self.fail(
                 "Timed out waiting for %s to become reachable" % server_ip)
 
+    @decorators.idempotent_id('8da0f6cc-60e6-4298-9e54-e1f905c5552a')
     def test_server_signal_userdata_format_raw(self):
         self._test_server_signal(image=self.conf.minimal_image_ref,
                                  flavor=self.conf.minimal_instance_type)
 
+    @decorators.idempotent_id('3d753d42-7c16-4a0e-8f73-875881826626')
     def test_server_signal_userdata_format_software_config(self):
         if not self.conf.image_ref:
             raise self.skipException("No image configured to test")
diff --git a/heat_tempest_plugin/tests/scenario/test_server_software_config.py b/heat_tempest_plugin/tests/scenario/test_server_software_config.py
index 1546684..4d2f7dc 100644
--- a/heat_tempest_plugin/tests/scenario/test_server_software_config.py
+++ b/heat_tempest_plugin/tests/scenario/test_server_software_config.py
@@ -12,6 +12,7 @@
 
 from heatclient.common import template_utils
 import six
+from tempest.lib import decorators
 
 from heat_tempest_plugin.tests.scenario import scenario_base
 
@@ -132,6 +133,7 @@
                 dep1_dep.updated_time,
                 dep1_dep.creation_time)
 
+    @decorators.idempotent_id('fb2afe23-d1a8-45fc-bf8d-b18fc8412972')
     def test_server_software_config(self):
         """Check that passed files with scripts are executed on created server.
 
diff --git a/heat_tempest_plugin/tests/scenario/test_volumes.py b/heat_tempest_plugin/tests/scenario/test_volumes.py
index eea6e97..57d0936 100644
--- a/heat_tempest_plugin/tests/scenario/test_volumes.py
+++ b/heat_tempest_plugin/tests/scenario/test_volumes.py
@@ -14,6 +14,7 @@
 from cinderclient import exceptions as cinder_exceptions
 from oslo_log import log as logging
 import six
+from tempest.lib import decorators
 
 from heat_tempest_plugin.common import exceptions
 from heat_tempest_plugin.tests.scenario import scenario_base
@@ -98,6 +99,7 @@
                           self.volume_client.volumes.get,
                           volume_id2)
 
+    @decorators.idempotent_id('c3416735-87bf-4478-85c5-b3823819eb19')
     def test_cinder_volume_create_backup_restore(self):
         """Ensure the 'Snapshot' deletion policy works.
 
diff --git a/releasenotes/notes/support-check-uuid-aa577427e4d32e4b.yaml b/releasenotes/notes/support-check-uuid-aa577427e4d32e4b.yaml
new file mode 100644
index 0000000..053c240
--- /dev/null
+++ b/releasenotes/notes/support-check-uuid-aa577427e4d32e4b.yaml
@@ -0,0 +1,7 @@
+---
+other:
+  - |
+    We can now run check-uuid to check if we give tempest id for all tempest
+    tests (not includes tests which run with gabbits) by running
+    ``tox -e pep8``. Also now you can run ``tox -e uuidgen`` for automatically
+    add ids to tests.
diff --git a/tox.ini b/tox.ini
index ece89c6..7b8aeec 100644
--- a/tox.ini
+++ b/tox.ini
@@ -12,7 +12,17 @@
            testr run {posargs}
 
 [testenv:pep8]
-commands = flake8
+setenv =
+    PYTHONPATH = .
+commands =
+    flake8
+    check-uuid --package heat_tempest_plugin
+
+[testenv:uuidgen]
+setenv =
+    PYTHONPATH = .
+commands =
+    check-uuid --fix --package heat_tempest_plugin
 
 [testenv:docs]
 deps = -r{toxinidir}/requirements.txt
