diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
index 3cd7301..035c138 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration.py
@@ -11,6 +11,8 @@
 #    under the License.
 
 import os
+import requests
+import time
 
 from tempest import config
 from tempest.lib.common.utils import data_utils
@@ -28,6 +30,10 @@
     TIMEOUT_SCALING_FACTOR = 5
 
     @classmethod
+    def resource_setup(cls):
+        cls.stack_name = data_utils.rand_name("telemetry")
+
+    @classmethod
     def skip_checks(cls):
         super(TestTelemetryIntegration, cls).skip_checks()
         for name in ["aodh", "gnocchi", "nova", "heat",
@@ -74,6 +80,29 @@
                                 opt_section.catalog_type)
             return endpoints[0]['endpoints'][0][endpoint_type].rstrip('/')
 
+    @classmethod
+    def resource_cleanup(cls):
+        headers = {'X-Auth-Token': cls.os_primary.auth_provider.get_auth()[0]}
+        url = os.environ['HEAT_SERVICE_URL'] + "/stacks/" + cls.stack_name
+        r = requests.get(url, headers=headers)
+
+        if r.status_code == 200 and \
+                "stack" in r.json():
+            stack = r.json()["stack"]
+            stack_url = (f'{os.environ["HEAT_SERVICE_URL"]}/stacks/'
+                         f'{stack["stack_name"]}/{stack["id"]}')
+            requests.delete(stack_url, headers=headers)
+
+            repeats = 0
+            r = requests.get(stack_url, headers=headers)
+            while r.json()["stack"]["stack_status"] == \
+                    "DELETE_IN_PROGRESS" and repeats < 30:
+                time.sleep(2)
+                r = requests.get(stack_url, headers=headers)
+                repeats += 1
+
+        super(TestTelemetryIntegration, cls).resource_cleanup()
+
     def _prep_test(self, filename):
         admin_auth = self.os_admin.auth_provider.get_auth()
         auth = self.os_primary.auth_provider.get_auth()
@@ -99,7 +128,7 @@
             "GLANCE_IMAGE_NAME": self.image_create(),
             "NOVA_FLAVOR_REF": config.CONF.compute.flavor_ref,
             "NEUTRON_NETWORK": networks[0].get('id'),
-            "STACK_NAME": data_utils.rand_name('telemetry'),
+            "STACK_NAME": self.stack_name,
         })
 
 
diff --git a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
index 0d6637b..63b4661 100644
--- a/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
+++ b/telemetry_tempest_plugin/scenario/test_telemetry_integration_prometheus.py
@@ -11,6 +11,8 @@
 #    under the License.
 
 import os
+import requests
+import time
 
 from tempest import config
 from tempest.lib.common.utils import data_utils
@@ -29,6 +31,10 @@
     TIMEOUT_SCALING_FACTOR = 5
 
     @classmethod
+    def resource_setup(cls):
+        cls.stack_name = data_utils.rand_name("telemetry")
+
+    @classmethod
     def skip_checks(cls):
         super(PrometheusGabbiTest, cls).skip_checks()
         for name in ["aodh", "nova", "heat",
@@ -75,15 +81,37 @@
                                 opt_section.catalog_type)
             return endpoints[0]['endpoints'][0][endpoint_type].rstrip('/')
 
+    @classmethod
+    def resource_cleanup(cls):
+        headers = {'X-Auth-Token': cls.os_primary.auth_provider.get_auth()[0]}
+        url = os.environ['HEAT_SERVICE_URL'] + "/stacks/" + cls.stack_name
+        r = requests.get(url, headers=headers)
+
+        if r.status_code == 200 and \
+                "stack" in r.json():
+            stack = r.json()["stack"]
+            stack_url = (f'{os.environ["HEAT_SERVICE_URL"]}/stacks/'
+                         f'{stack["stack_name"]}/{stack["id"]}')
+            requests.delete(stack_url, headers=headers)
+
+            repeats = 0
+            r = requests.get(stack_url, headers=headers)
+            while r.json()["stack"]["stack_status"] == \
+                    "DELETE_IN_PROGRESS" and repeats < 30:
+                time.sleep(2)
+                r = requests.get(stack_url, headers=headers)
+                repeats += 1
+
+        super(PrometheusGabbiTest, cls).resource_cleanup()
+
     def _prep_test(self, filename):
         auth = self.os_primary.auth_provider.get_auth()
         networks = self.os_primary.networks_client.list_networks(
             **{'router:external': False, 'fields': 'id'})['networks']
-        stack_name = data_utils.rand_name('telemetry')
         # NOTE(marihan): This is being used in prometheus query as heat is
         # using the last 7 digits from stack_name to create the autoscaling
         # resources.
-        resource_prefix = stack_name[-7:]
+        resource_prefix = self.stack_name[-7:]
         prometheus_rate_duration = (
             config.CONF.telemetry.ceilometer_polling_interval
             + config.CONF.telemetry.prometheus_scrape_interval)
@@ -104,7 +132,7 @@
             "GLANCE_IMAGE_NAME": self.image_create(),
             "NOVA_FLAVOR_REF": config.CONF.compute.flavor_ref,
             "NEUTRON_NETWORK": networks[0].get('id'),
-            "STACK_NAME": stack_name,
+            "STACK_NAME": self.stack_name,
             "RESOURCE_PREFIX": resource_prefix,
             "PROMETHEUS_RATE_DURATION": str(prometheus_rate_duration),
         })
