diff --git a/designate_tempest_plugin/tests/api/v2/test_ptrs.py b/designate_tempest_plugin/tests/api/v2/test_ptrs.py
index a764505..cf97d16 100644
--- a/designate_tempest_plugin/tests/api/v2/test_ptrs.py
+++ b/designate_tempest_plugin/tests/api/v2/test_ptrs.py
@@ -46,11 +46,6 @@
     def resource_setup(cls):
         super(BasePtrTest, cls).resource_setup()
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name='BasePtrTest')
-        cls.tld_name = tld_name[:-1]
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
         # Create dedicated External network for PTRs tests
         network_name = data_utils.rand_name('designate-tempest-fips-external')
         cls.external_network = cls.admin_network_client.create_network(
@@ -71,11 +66,6 @@
             cls.admin_subnet_client.delete_subnet,
             cls.external_subnet['subnet']['id'])
 
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BasePtrTest, cls).resource_cleanup()
-
 
 class DesignatePtrRecord(BasePtrTest, tempest.test.BaseTestCase):
 
@@ -94,24 +84,15 @@
         cls.primary_ptr_client = cls.os_primary.dns_v2.PtrClient()
         cls.primary_floating_ip_client = cls.os_primary.floating_ips_client
 
-    @classmethod
-    def resource_setup(cls):
-        super(DesignatePtrRecord, cls).resource_setup()
-
-        # The 'arpa' TLD is a special case as the negative test class also
-        # needs to use this space. To stop test class concurrency conflicts,
-        # let each class manage different TLDs for the reverse namespace.
-        cls.arpa_tld = cls.admin_tld_client.create_tld(tld_name='arpa')
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.arpa_tld[1]['id'])
-        super(DesignatePtrRecord, cls).resource_cleanup()
+    # This test class uses 'arpa' TLD
+    # The 'arpa' TLD is a special case as the negative test class also
+    # needs to use this space. To stop test class concurrency conflicts,
+    # let each class manage different TLDs for the reverse namespace.
 
     def _set_ptr(self, ptr_name=None, ttl=None, description=None,
                  headers=None, tld=None, fip_id=None):
         if not tld:
-            tld = self.tld_name
+            tld = self.tld_suffix
         if not fip_id:
             fip = self.primary_floating_ip_client.create_floatingip(
                 floating_network_id=self.external_network['id'])[
@@ -217,25 +198,10 @@
         cls.primary_floating_ip_client = cls.os_primary.floating_ips_client
         cls.admin_ptr_client = cls.os_admin.dns_v2.PtrClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(DesignatePtrRecordNegative, cls).resource_setup()
-
-        # The 'arpa' TLD is a special case as the positive test class also
-        # needs to use this space. To stop test class concurrency conflicts,
-        # let each class manage different TLDs for the reverse namespace.
-        cls.in_addr_arpa_tld = cls.admin_tld_client.create_tld(
-            tld_name='in-addr.arpa')
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.in_addr_arpa_tld[1]['id'])
-        super(DesignatePtrRecordNegative, cls).resource_cleanup()
-
     def _set_ptr(self, ptr_name=None, ttl=None, description=None,
                  headers=None, tld=None, fip_id=None):
         if not tld:
-            tld = self.tld_name
+            tld = self.tld_suffix
         if not fip_id:
             fip = self.primary_floating_ip_client.create_floatingip(
                 floating_network_id=self.external_network['id'])[
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index f4ce02b..eb76928 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -40,11 +40,6 @@
     def resource_setup(cls):
         super(BaseRecordsetsTest, cls).resource_setup()
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseRecordsetsTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
         # All the recordset tests need a zone, create one to share
         zone_name = dns_data_utils.rand_zone_name(name="TestZone",
                                               suffix=cls.tld_name)
@@ -55,7 +50,6 @@
     def resource_cleanup(cls):
         cls.zones_client.delete_zone(
             cls.zone['id'], ignore_errors=lib_exc.NotFound)
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
         super(BaseRecordsetsTest, cls).resource_cleanup()
 
 
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
index 8675b66..fd3760b 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
@@ -79,14 +79,8 @@
     @property
     def zone(self):
         if self._zone is None:
-            tld_name = dns_data_utils.rand_zone_name(
-                name="recordsetvalidation")
-            self.class_tld = self.admin_tld_client.create_tld(
-                tld_name=tld_name[:-1])
-            self.addCleanup(
-                self.admin_tld_client.delete_tld, self.class_tld[1]['id'])
             zone_name = dns_data_utils.rand_zone_name(name="TestZone",
-                                                  suffix=f'.{tld_name}')
+                                                    suffix=self.tld_name)
             zone_data = dns_data_utils.rand_zone_data(name=zone_name)
             resp, body = self.zones_client.create_zone(**zone_data)
             self._zone = body
diff --git a/designate_tempest_plugin/tests/api/v2/test_shared_zones.py b/designate_tempest_plugin/tests/api/v2/test_shared_zones.py
index a089cf0..b65edbb 100644
--- a/designate_tempest_plugin/tests/api/v2/test_shared_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_shared_zones.py
@@ -45,11 +45,6 @@
                 'The shared zones API tests require Designate API version '
                 '2.1 or newer. Skipping Shared Zones API tests.')
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="APISharedZoneTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
         # All the shared zone tests need a zone, create one to share
         zone_name = dns_data_utils.rand_zone_name(name="TestZone",
                                                   suffix=cls.tld_name)
@@ -60,7 +55,6 @@
     def resource_cleanup(cls):
         cls.zones_client.delete_zone(
             cls.zone['id'], ignore_errors=lib_exc.NotFound, delete_shares=True)
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
         super(BaseSharedZoneTest, cls).resource_cleanup()
 
     @classmethod
diff --git a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
index 73eab09..cb8f692 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
@@ -33,20 +33,6 @@
         super(BaseTransferAcceptTest, cls).setup_clients()
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseTransferAcceptTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseTransferAcceptTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseTransferAcceptTest, cls).resource_cleanup()
-
 
 class TransferAcceptTest(BaseTransferAcceptTest):
     credentials = ["primary", "alt", "admin",
diff --git a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
index 963872c..0277856 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
@@ -32,21 +32,6 @@
         super(BaseTransferRequestTest, cls).setup_clients()
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseTransferRequestTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(
-            name="BaseTransferRequestTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseTransferRequestTest, cls).resource_cleanup()
-
 
 class TransferRequestTest(BaseTransferRequestTest):
     credentials = ["primary", "alt", "admin",
diff --git a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
index 9522395..80dc975 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
@@ -34,20 +34,6 @@
 
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseTsigkeyTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseTsigkeyTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseTsigkeyTest, cls).resource_cleanup()
-
 
 class TsigkeyAdminTest(BaseTsigkeyTest):
     credentials = ["primary", "admin", "project_member",
diff --git a/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py b/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
index 42f6a84..3ad7fcf 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
@@ -41,20 +41,6 @@
 
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseZonesTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseZonesTest, cls).resource_cleanup()
-
 
 class ZoneTasks(BaseZonesTest):
     credentials = ["primary", "alt", "admin",
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index 57a4596..b025ffa 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -36,20 +36,6 @@
         super(BaseZonesTest, cls).setup_clients()
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseZonesTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseZonesTest, cls).resource_cleanup()
-
 
 class ZonesTest(BaseZonesTest):
 
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
index 67a0e6a..aab85b4 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -37,20 +37,6 @@
 
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseZoneExportsTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseZoneExportsTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseZoneExportsTest, cls).resource_cleanup()
-
 
 class ZonesExportTest(BaseZoneExportsTest):
     credentials = ["primary", "admin", "alt",
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
index 6fcdae9..be7bcaa 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -35,20 +35,6 @@
         super(BaseZonesImportTest, cls).setup_clients()
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseZonesImportTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesImportTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseZonesImportTest, cls).resource_cleanup()
-
 
 class ZonesImportTest(BaseZonesImportTest):
     credentials = ["primary", "admin", "alt",
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index 3cbd4ca..22e8ae6 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -188,6 +188,8 @@
 
     all_projects_header = {'X-Auth-All-Projects': True}
     managed_records = {'x-designate-edit-managed-records': True}
+    tld_suffix = CONF.dns.tld_suffix
+    tld_name = '.{}.'.format(tld_suffix)
 
     @classmethod
     def skip_checks(cls):
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py b/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
index c47db39..27e5fc5 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
@@ -33,20 +33,6 @@
 
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(BaseBlacklistsTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="BaseBlacklistsTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(BaseBlacklistsTest, cls).resource_cleanup()
-
 
 class BlacklistE2E(BaseBlacklistsTest):
 
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_quotas.py b/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
index 4a346f3..899a52e 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
@@ -63,20 +63,6 @@
         cls.alt_zone_client = cls.os_alt.dns_v2.ZonesClient()
         cls.recordset_client = cls.os_primary.dns_v2.RecordsetClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(QuotasV2Test, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="QuotasV2Test")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(QuotasV2Test, cls).resource_cleanup()
-
     def _set_quota_for_project(self, project_id, quotas):
         http_header = {'x-auth-sudo-project-id': project_id}
         self.admin_client.set_quotas(
@@ -307,19 +293,6 @@
         cls.export_zone_client = cls.os_admin.dns_v2.ZoneExportsClient()
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(QuotasBoundary, cls).resource_setup()
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="QuotasBoundary")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(QuotasBoundary, cls).resource_cleanup()
-
     @decorators.attr(type='slow')
     @decorators.idempotent_id('e4981eb2-3803-11ed-9d3c-201e8823901f')
     def test_zone_quota_boundary(self):
@@ -390,16 +363,6 @@
                 'The shared zones scenario tests require Designate API '
                 'version 2.1 or newer. Skipping Shared Zones scenario tests.')
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name='SharedZonesTest')
-        cls.tld_name = f'.{tld_name}'
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(SharedZonesQuotaTest, cls).resource_cleanup()
-
     def _create_shared_zone_for_project(
             self, zone_name, project_id, sudo_header):
         """Admin creates Zone for project ID and shares it with Primary"""
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
index f2eeeea..b93f051 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
@@ -51,11 +51,6 @@
             LOG.info('Retrieve info from a zone')
             zone = cls.zones_client.show_zone(zone_id)[1]
         else:
-            # Make sure we have an allowed TLD available
-            tld_name = dns_data_utils.rand_zone_name(name="RecordsetsTest")
-            cls.tld_name = f".{tld_name}"
-            cls.class_tld = cls.admin_tld_client.create_tld(
-                tld_name=tld_name[:-1])
             LOG.info('Create a new zone')
             zone_name = dns_data_utils.rand_zone_name(
                 name="recordsets_test_setup", suffix=cls.tld_name)
@@ -71,7 +66,6 @@
 
     @classmethod
     def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
         super(RecordsetsTest, cls).resource_cleanup()
 
     def _test_create_and_delete_records_on_existing_zone(
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_shared_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_shared_zones.py
index 2106050..b94a425 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_shared_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_shared_zones.py
@@ -52,16 +52,6 @@
                 'The shared zones scenario tests require Designate API '
                 'version 2.1 or newer. Skipping Shared Zones scenario tests.')
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name='SharedZonesTest')
-        cls.tld_name = f'.{tld_name}'
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(SharedZonesTest, cls).resource_cleanup()
-
     @decorators.attr(type='slow')
     @decorators.idempotent_id('b0fad45d-25ec-49b9-89a8-10b0e3c8b14c')
     def test_zone_share_CRUD_recordset(self):
@@ -388,16 +378,6 @@
                 'The shared zones scenario tests require Designate API '
                 'version 2.1 or newer. Skipping Shared Zones scenario tests.')
 
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name='SharedZonesTest')
-        cls.tld_name = f'.{tld_name}'
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(SharedZonesTestNegative, cls).resource_cleanup()
-
     def _create_shared_zone(self, zone_name):
         # Primary tenant creates zone and shares it with Alt tenant
         zone_name = dns_data_utils.rand_zone_name(
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_tld.py b/designate_tempest_plugin/tests/scenario/v2/test_tld.py
index c7d69fe..23126a4 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_tld.py
@@ -27,7 +27,6 @@
 
 class TldZoneTest(base.BaseDnsV2Test):
     credentials = ["admin", "primary"]
-    tld_suffix = '.'.join(["TldZoneTest", CONF.dns.tld_suffix])
 
     @classmethod
     def setup_credentials(cls):
@@ -41,24 +40,13 @@
         cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.primary_tld_client = cls.os_primary.dns_v2.TldClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(TldZoneTest, cls).resource_setup()
-        cls.class_tld = cls.admin_tld_client.create_tld(
-            tld_name=cls.tld_suffix)
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(TldZoneTest, cls).resource_cleanup()
-
     @decorators.idempotent_id('68b3e7cc-bf0e-11ec-b803-201e8823901f')
     def test_create_zone_using_existing_tld(self):
         LOG.info('Creates a zone using existing TLD:"{}"'.format(
-            self.tld_suffix))
+            self.tld_name))
         zone_name = dns_data_utils.rand_zone_name(
             name='existing_tld_zone', prefix='rand',
-            suffix='.{}.'.format(self.tld_suffix))
+            suffix=self.tld_name)
         zone = self.zones_client.create_zone(
             name=zone_name, wait_until=const.ACTIVE)[1]
         self.addCleanup(
@@ -67,10 +55,10 @@
     @decorators.idempotent_id('06deced8-d4de-11eb-b8ee-74e5f9e2a801')
     def test_create_zone_using_not_existing_tld(self):
         LOG.info('Try to create a Zone using not existing TLD:"{}"'.format(
-            self.tld_suffix[::-1]))
+            self.tld_name[::-1]))
         zone_name = dns_data_utils.rand_zone_name(
             name='not_existing_tld_zone', prefix='rand',
-            suffix='.{}.'.format(self.tld_suffix)[::-1])
+            suffix=self.tld_name[::-1])
         self.assertRaises(
             lib_exc.BadRequest, self.zones_client.create_zone,
             name=zone_name)
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index d94132a..11fa653 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -44,19 +44,6 @@
         cls.rec_client = cls.os_admin.dns_v2.RecordsetClient()
         cls.primary_client = cls.os_primary.dns_v2.BlacklistsClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(ZonesTest, cls).resource_setup()
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="ZonesTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(ZonesTest, cls).resource_cleanup()
-
     @decorators.attr(type='smoke')
     @decorators.attr(type='slow')
     @decorators.idempotent_id('d0648f53-4114-45bd-8792-462a82f69d32')
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
index c01424b..101bec4 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
@@ -40,20 +40,6 @@
         cls.accept_client = cls.os_primary.dns_v2.TransferAcceptClient()
         cls.alt_accept_client = cls.os_alt.dns_v2.TransferAcceptClient()
 
-    @classmethod
-    def resource_setup(cls):
-        super(ZonesTransferTest, cls).resource_setup()
-
-        # Make sure we have an allowed TLD available
-        tld_name = dns_data_utils.rand_zone_name(name="ZonesTransferTest")
-        cls.tld_name = f".{tld_name}"
-        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
-        super(ZonesTransferTest, cls).resource_cleanup()
-
     @decorators.idempotent_id('60bd80ac-c979-4686-9a03-f2f775f272ab')
     def test_zone_transfer(self):
         LOG.info('Create a zone as primary tenant')
