diff --git a/designate_tempest_plugin/tests/api/admin/test_quotas.py b/designate_tempest_plugin/tests/api/admin/test_quotas.py
index 9016d96..762f817 100644
--- a/designate_tempest_plugin/tests/api/admin/test_quotas.py
+++ b/designate_tempest_plugin/tests/api/admin/test_quotas.py
@@ -12,7 +12,6 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 
 from designate_tempest_plugin.tests import base
@@ -36,7 +35,6 @@
 
         cls.admin_client = cls.os_adm.quotas_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('ed42f367-e5ba-40d7-a08d-366ad787d21c')
     def test_show_quotas(self):
         LOG.info("Updating quotas")
@@ -50,7 +48,6 @@
         LOG.info("Ensuring the response has all quota types")
         self.assertExpected(quotas['quota'], body['quota'], self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('33e0affb-5d66-4216-881c-f101a779851a')
     def test_delete_quotas(self):
         LOG.info("Deleting quotas")
@@ -59,7 +56,6 @@
         LOG.info("Ensuring an empty response body")
         self.assertEqual(body.strip(), "")
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('4f2b65b7-c4e1-489c-9047-755e42ba0985')
     def test_update_quotas(self):
         LOG.info("Updating quotas")
diff --git a/designate_tempest_plugin/tests/api/v1/test_domains.py b/designate_tempest_plugin/tests/api/v1/test_domains.py
index eae4086..c19a342 100644
--- a/designate_tempest_plugin/tests/api/v1/test_domains.py
+++ b/designate_tempest_plugin/tests/api/v1/test_domains.py
@@ -51,7 +51,6 @@
         self.assertRaises(lib_exc.NotFound,
                           self.client.get_domain, domain_id)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('a78a4a6a-77a6-4dab-a61a-17df9731bca8')
     def test_list_domains(self):
         # Get a list of domains
diff --git a/designate_tempest_plugin/tests/api/v1/test_records.py b/designate_tempest_plugin/tests/api/v1/test_records.py
index 473e9c2..5569038 100644
--- a/designate_tempest_plugin/tests/api/v1/test_records.py
+++ b/designate_tempest_plugin/tests/api/v1/test_records.py
@@ -75,7 +75,6 @@
             self.assertIn(record['id'],
                           six.moves.map(lambda x: x['id'], records))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('1714fe3a-8a29-420e-a7dc-8209c7c174de')
     def test_create_update_get_delete_record(self):
         # Create Domain
diff --git a/designate_tempest_plugin/tests/api/v1/test_servers.py b/designate_tempest_plugin/tests/api/v1/test_servers.py
index 45f0ca4..0a8b519 100644
--- a/designate_tempest_plugin/tests/api/v1/test_servers.py
+++ b/designate_tempest_plugin/tests/api/v1/test_servers.py
@@ -16,7 +16,6 @@
 import six
 from tempest.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
-from tempest import test
 from tempest import config
 from tempest.lib import decorators
 
@@ -69,7 +68,6 @@
         self.assertRaises(lib_exc.NotFound,
                           self.client.get_server, server_id)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('0296fb0c-f400-4b52-9be4-a24f37646e3f')
     def test_list_servers(self):
         # Get a list of servers
@@ -79,7 +77,6 @@
             self.assertIn(server['id'],
                           six.moves.map(lambda x: x['id'], servers))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('7d18fdfc-3959-4c3f-9855-0bf2f8c9ade2')
     def test_create_update_get_delete_server(self):
         # Create Dns Server
diff --git a/designate_tempest_plugin/tests/api/v2/test_blacklists.py b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
index fc91471..cc7260d 100644
--- a/designate_tempest_plugin/tests/api/v2/test_blacklists.py
+++ b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
@@ -12,7 +12,6 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 from tempest.lib.common.utils import data_utils
@@ -36,7 +35,6 @@
         super(BlacklistsAdminTest, cls).setup_clients()
         cls.admin_client = cls.os_adm.blacklists_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('3a7f7564-6bdd-446e-addc-a3475b4c3f71')
     def test_create_blacklist(self):
         LOG.info('Create a blacklist')
@@ -49,7 +47,6 @@
 
         self.assertExpected(blacklist, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('5bc02942-6225-4619-8f49-2105581a8dd6')
     def test_show_blacklist(self):
         LOG.info('Create a blacklist')
@@ -62,7 +59,6 @@
         LOG.info('Ensure the fetched response matches the created blacklist')
         self.assertExpected(blacklist, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('dcea40d9-8d36-43cb-8440-4a842faaef0d')
     def test_delete_blacklist(self):
         LOG.info('Create a blacklist')
@@ -76,7 +72,6 @@
         # A blacklist delete returns an empty body
         self.assertEqual(body.strip(), "")
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('3a2a1e6c-8176-428c-b5dd-d85217c0209d')
     def test_list_blacklists(self):
         LOG.info('Create a blacklist')
@@ -89,7 +84,6 @@
         # TODO(pglass): Assert that the created blacklist is in the response
         self.assertGreater(len(body['blacklists']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('0063d6ad-9557-49c7-b521-e64a14d4d0d0')
     def test_update_blacklist(self):
         LOG.info('Create a blacklist')
@@ -119,7 +113,6 @@
         super(TestBlacklistNotFoundAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.blacklists_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('9d65b638-fe98-47a8-853f-fa9244d144cc')
     def test_show_blacklist_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -127,7 +120,6 @@
                               data_utils.rand_uuid())
         self.assertBlacklist404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('a9e12415-5040-4fba-905c-95d201fcfd3b')
     def test_update_blacklist_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -135,7 +127,6 @@
                               data_utils.rand_uuid())
         self.assertBlacklist404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('b1132586-bf06-47a6-9f6f-3bab6a2c1932')
     def test_delete_blacklist_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -159,7 +150,6 @@
         super(TestBlacklistInvalidIdAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.blacklists_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('c7bae53f-2edc-45d8-b254-8a81482728c1')
     def test_show_blacklist_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -167,7 +157,6 @@
                               'foo')
         self.assertBlacklistInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('c57b97da-ca87-44b5-9f40-a099937433bf')
     def test_update_blacklist_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -175,7 +164,6 @@
                               'foo')
         self.assertBlacklistInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('5d62a026-13e4-48b9-9773-1780660c5920')
     def test_delete_blacklist_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
diff --git a/designate_tempest_plugin/tests/api/v2/test_pool.py b/designate_tempest_plugin/tests/api/v2/test_pool.py
index 5746ce0..c5f5f68 100644
--- a/designate_tempest_plugin/tests/api/v2/test_pool.py
+++ b/designate_tempest_plugin/tests/api/v2/test_pool.py
@@ -15,7 +15,6 @@
 from operator import itemgetter
 
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 from tempest.lib.common.utils import data_utils
@@ -43,7 +42,6 @@
 
         cls.admin_client = cls.os_adm.pool_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('69257f7c-b3d5-4e1b-998e-0677ad12f125')
     def test_create_pool(self):
         pool_data = {
@@ -61,7 +59,6 @@
         self.assertEqual(pool_data["name"], pool['name'])
         self.assertExpected(pool_data, pool, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('e80eb70a-8ee5-40eb-b06e-599597a8ab7e')
     def test_show_pool(self):
         LOG.info('Create a pool')
@@ -76,7 +73,6 @@
         self._assertExpectedNSRecords(pool["ns_records"], body["ns_records"],
                                 expected_key="priority")
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('d8c4c377-5d88-452d-a4d2-c004d72e1abe')
     def test_delete_pool(self):
         LOG.info('Create a pool')
@@ -90,7 +86,6 @@
         self.assertRaises(lib_exc.NotFound,
            lambda: self.admin_client.show_pool(pool['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('77c85b40-83b2-4c17-9fbf-e6d516cfce90')
     def test_list_pools(self):
         LOG.info('Create a pool')
@@ -102,7 +97,6 @@
 
         self.assertGreater(len(body['pools']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('fdcc84ce-af65-4af6-a5fc-6c50acbea0f0')
     def test_update_pool(self):
         LOG.info('Create a pool')
@@ -115,7 +109,6 @@
 
         self.assertEqual("foo", patch_pool["name"])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('41ad6a84-00ce-4a04-9fd5-b7c15c31e2db')
     def test_list_pools_dot_json_fails(self):
         uri = self.admin_client.get_uri('pools.json')
@@ -133,7 +126,6 @@
         super(TestPoolNotFoundAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.pool_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('56281b2f-dd5a-4376-8c32-aba771062fa5')
     def test_show_pool_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -141,7 +133,6 @@
                               data_utils.rand_uuid())
         self.assertPool404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('10fba3c2-9972-479c-ace1-8f7eac7c159f')
     def test_update_pool_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -149,7 +140,6 @@
                               data_utils.rand_uuid())
         self.assertPool404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('96132295-896b-4de3-8f86-cc2ee513fdad')
     def test_delete_pool_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -173,7 +163,6 @@
         super(TestPoolInvalidIdAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.pool_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('081d0188-42a7-4953-af0e-b022960715e2')
     def test_show_pool_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -181,7 +170,6 @@
                               'foo')
         self.assertPoolInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('f4ab4f5a-d7f0-4758-b232-8338f02d7c5c')
     def test_update_pool_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -189,7 +177,6 @@
                               'foo')
         self.assertPoolInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('bf5ad3be-2e79-439d-b247-902fe198143b')
     def test_delete_pool_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index ab1cba8..7d73d4d 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -56,7 +56,6 @@
         LOG.info('Ensure we respond with PENDING')
         self.assertEqual('PENDING', body['status'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('5964f730-5546-46e6-9105-5030e9c492b2')
     def test_list_recordsets(self):
         LOG.info('Create a zone')
@@ -74,7 +73,6 @@
 
         self.assertGreater(len(body), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('84c13cb2-9020-4c1e-aeb0-c348d9a70caa')
     def test_show_recordsets(self):
         LOG.info('Create a zone')
@@ -93,7 +91,6 @@
         LOG.info('Ensure the fetched response matches the expected one')
         self.assertExpected(body, record, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('855399c1-8806-4ae5-aa31-cb8a6f35e218')
     def test_delete_recordset(self):
         LOG.info('Create a zone')
@@ -113,7 +110,6 @@
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_recordset(zone['id'], record['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('8d41c85f-09f9-48be-a202-92d1bdf5c796')
     def test_update_recordset(self):
         LOG.info('Create a zone')
@@ -146,7 +142,6 @@
         cls.client = cls.os.recordset_client
         cls.zone_client = cls.os.zones_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('631d74fd-6909-4684-a61b-5c4d2f92c3e7')
     @ddt.file_data("recordset_data_invalid.json")
     def test_create_recordset_invalid(self, name, type, records):
@@ -189,7 +184,6 @@
                         "available" % cls.__name__)
             raise cls.skipException(skip_msg)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('48a081b9-4474-4da0-9b1a-6359a80456ce')
     def test_list_zones_recordsets(self):
         LOG.info('Create a zone')
@@ -205,7 +199,6 @@
 
         self.assertGreater(len(body['recordsets']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('a8e41020-65be-453b-a8c1-2497d539c345')
     def test_list_filter_zones_recordsets(self):
         LOG.info('Create a zone')
diff --git a/designate_tempest_plugin/tests/api/v2/test_tld.py b/designate_tempest_plugin/tests/api/v2/test_tld.py
index ee74d86..0fd7faf 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tld.py
@@ -13,7 +13,6 @@
 #    under the License.
 
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 from tempest.lib.common.utils import data_utils
@@ -41,7 +40,6 @@
         cls.tld = cls.admin_client.create_tld(tld_name='com',
                       ignore_errors=lib_exc.Conflict)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('52a4bb4b-4eff-4591-9dd3-ad98316806c3')
     def test_create_tld(self):
         tld_data = {
@@ -55,7 +53,6 @@
 
         self.assertEqual(tld_data["name"], tld['name'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('271af08c-2603-4f61-8eb1-05887b74e25a')
     def test_show_tld(self):
         tld_data = {
@@ -73,7 +70,6 @@
         LOG.info('Ensure the fetched response matches the created tld')
         self.assertExpected(tld, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('26708cb8-7126-48a7-9424-1c225e56e609')
     def test_delete_tld(self):
         LOG.info('Create a tld')
@@ -87,7 +83,6 @@
         self.assertRaises(lib_exc.NotFound,
            lambda: self.admin_client.show_tld(tld['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('95b13759-c85c-4791-829b-9591ca15779d')
     def test_list_tlds(self):
         LOG.info('List tlds')
@@ -95,7 +90,6 @@
 
         self.assertGreater(len(body['tlds']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('1a233812-48d9-4d15-af5e-9961744286ff')
     def test_update_tld(self):
         _, tld = self.admin_client.create_tld()
@@ -113,7 +107,6 @@
         self.assertEqual(tld_data["name"], patch_tld["name"])
         self.assertEqual(tld_data["description"], patch_tld["description"])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('8116dcf5-a329-47d1-90be-5ff32f299c53')
     def test_list_tlds_dot_json_fails(self):
         uri = self.admin_client.get_uri('tlds.json')
@@ -131,7 +124,6 @@
         super(TestTldNotFoundAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.tld_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('b237d5ee-0d76-4294-a3b6-c2f8bf4b0e30')
     def test_show_tld_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -139,7 +131,6 @@
                               data_utils.rand_uuid())
         self.assertTld404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('3d128772-7f52-4473-b569-51ae8294667b')
     def test_update_tld_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -147,7 +138,6 @@
                               data_utils.rand_uuid())
         self.assertTld404(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('18e465e7-5c7d-4775-acef-bd12a8db1095')
     def test_delete_tld_404(self):
         e = self.assertRaises(lib_exc.NotFound,
@@ -171,7 +161,6 @@
         super(TestTldInvalidIdAdmin, cls).setup_clients()
         cls.admin_client = cls.os_adm.tld_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('f9ec0730-57ff-4720-8d06-e11d377c7cfc')
     def test_show_tld_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -179,7 +168,6 @@
                               'foo')
         self.assertTldInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('13dc6518-b479-4502-90f5-f5a5ecc8b1fb')
     def test_update_tld_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
@@ -187,7 +175,6 @@
                               'foo')
         self.assertTldInvalidId(e.resp, e.resp_body)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('6a6fc9db-9a73-4ffc-831a-172e1cbc7394')
     def test_delete_tld_invalid_uuid(self):
         e = self.assertRaises(lib_exc.BadRequest,
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 ce4f538..a043137 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
@@ -12,7 +12,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 
 from designate_tempest_plugin.tests import base
@@ -34,7 +33,6 @@
         cls.request_client = cls.os.transfer_request_client
         cls.client = cls.os.transfer_accept_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('1c6baf97-a83e-4d2e-a5d8-9d37fb7808f3')
     def test_create_transfer_accept(self):
         LOG.info('Create a zone')
@@ -57,7 +55,6 @@
         LOG.info('Ensure we respond with ACTIVE status')
         self.assertEqual('COMPLETE', transfer_accept['status'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('37c6afbb-3ea3-4fd8-94ea-a426244f019a')
     def test_show_transfer_accept(self):
         LOG.info('Create a zone')
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 c91db1d..7b9af10 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
@@ -12,7 +12,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
@@ -34,7 +33,6 @@
         cls.zone_client = cls.os.zones_client
         cls.client = cls.os.transfer_request_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('2381d489-ad84-403d-b0a2-8b77e4e966bf')
     def test_create_transfer_request(self):
         LOG.info('Create a zone')
@@ -49,7 +47,6 @@
         LOG.info('Ensure we respond with ACTIVE status')
         self.assertEqual('ACTIVE', transfer_request['status'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('64a7be9f-8371-4ce1-a242-c1190de7c985')
     def test_show_transfer_request(self):
         LOG.info('Create a zone')
@@ -68,7 +65,6 @@
                  'created transfer_request')
         self.assertExpected(transfer_request, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('7d81c487-aa15-44c4-b3e5-424ab9e6a3e5')
     def test_delete_transfer_request(self):
         LOG.info('Create a zone')
@@ -86,7 +82,6 @@
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_transfer_request(transfer_request['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('ddd42a19-1768-428c-846e-32f9d6493011')
     def test_list_transfer_requests(self):
         LOG.info('Create a zone')
@@ -103,7 +98,6 @@
 
         self.assertGreater(len(body['transfer_requests']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('de5e9d32-c723-4518-84e5-58da9722cc13')
     def test_update_transfer_request(self):
         LOG.info('Create a zone')
@@ -125,7 +119,6 @@
         self.assertEqual(data['description'],
                          transfer_request_patch['description'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('73b754a9-e856-4fd6-80ba-e8d1b80f5dfa')
     def test_list_transfer_requests_dot_json_fails(self):
         uri = self.client.get_uri('transfer_requests.json')
diff --git a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
index 750d3d4..2e4ffa9 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
@@ -13,7 +13,6 @@
 #    under the License.
 
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
@@ -35,7 +34,6 @@
         cls.zone_client = cls.os.zones_client
         cls.admin_client = cls.os_admin.tsigkey_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('e7b484e3-7ed5-4840-89d7-1e696986f8e4')
     def test_create_tsigkey(self):
         LOG.info('Create a resource')
@@ -58,7 +56,6 @@
 
         self.assertEqual(tsigkey_data["name"], tsigkey['name'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('d46e5e86-a18c-4315-aa0c-95a00e816fbf')
     def test_list_tsigkey(self):
         LOG.info('Create a resource')
@@ -70,7 +67,6 @@
         _, body = self.admin_client.list_tsigkeys()
         self.assertGreater(len(body['tsigkeys']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('c5d7facf-0f05-47a2-a4fb-87f203860880')
     def test_show_tsigkey(self):
         LOG.info('Create a resource')
@@ -87,7 +83,6 @@
         LOG.info('Ensure the fetched response matches the created tsigkey')
         self.assertExpected(tsigkey, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('d09dc0dd-dd72-41ee-9085-2afb2bf35459')
     def test_update_tsigkey(self):
         LOG.info('Create a resource')
@@ -113,7 +108,6 @@
         self.assertEqual(tsigkey_data['secret'], patch_tsigkey['secret'])
         self.assertEqual(tsigkey_data['scope'], patch_tsigkey['scope'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('9cdffbd2-bc67-4a25-8eb7-4be8635c88a3')
     def test_delete_tsigkey(self):
         LOG.info('Create a resource')
@@ -129,7 +123,6 @@
         self.assertRaises(lib_exc.NotFound,
            lambda: self.admin_client.show_tsigkey(tsigkey['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('4bdc20ef-96f9-47f6-a1aa-275159af326b')
     def test_list_tsigkeys_dot_json_fails(self):
         uri = self.admin_client.get_uri('tsigkeys.json')
diff --git a/designate_tempest_plugin/tests/api/v2/test_unauthed.py b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
index f036824..e788a3b 100644
--- a/designate_tempest_plugin/tests/api/v2/test_unauthed.py
+++ b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
@@ -12,7 +12,6 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 from oslo_log import log as logging
-from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 import ddt
@@ -38,7 +37,6 @@
         cls.pool_client = cls.os.pool_client
         cls.blacklists_client = cls.os.blacklists_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('0f7a6d20-f6f3-4937-8fe6-7a9851227d98')
     @ddt.file_data('unauthed_data.json')
     def test_unauthed(self, client, method, args=None):
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index 37c0d4e..a2d15d7 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -35,7 +35,6 @@
 
         cls.client = cls.os.zones_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('9d2e20fc-e56f-4a62-9c61-9752a9ec615c')
     def test_create_zone(self):
         LOG.info('Create a zone')
@@ -46,7 +45,6 @@
         self.assertEqual('CREATE', zone['action'])
         self.assertEqual('PENDING', zone['status'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('02ca5d6a-86ce-4f02-9d94-9e5db55c3055')
     def test_show_zone(self):
         LOG.info('Create a zone')
@@ -74,7 +72,6 @@
         self.assertEqual('DELETE', body['action'])
         self.assertEqual('PENDING', body['status'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('5bfa3cfe-5bc8-443b-bf48-cfba44cbb247')
     def test_list_zones(self):
         LOG.info('Create a zone')
@@ -88,7 +85,6 @@
         #              present in the response.
         self.assertGreater(len(body['zones']), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('123f51cb-19d5-48a9-aacc-476742c02141')
     def test_update_zone(self):
         LOG.info('Create a zone')
@@ -109,7 +105,6 @@
         LOG.info('Ensure we respond with updated values')
         self.assertEqual(description, zone['description'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('925192f2-0ed8-4591-8fe7-a9fa028f90a0')
     def test_list_zones_dot_json_fails(self):
         uri = self.client.get_uri('zones.json')
@@ -152,7 +147,6 @@
         cls.client = cls.os.zones_client
         cls.alt_client = cls.os_alt.zones_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('5d28580a-a012-4b57-b211-e077b1a01340')
     def test_no_create_duplicate_domain(self):
         LOG.info('Create a zone as a default user')
@@ -167,7 +161,6 @@
         self.assertRaises(lib_exc.Conflict,
             self.alt_client.create_zone, name=zone['name'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('a48776fd-b1aa-4a25-9f09-d1d34cfbb175')
     def test_no_create_subdomain_by_alt_user(self):
         LOG.info('Create a zone as a default user')
@@ -180,7 +173,6 @@
         self.assertRaises(lib_exc.Forbidden,
             self.alt_client.create_zone, name='sub.sub.' + zone['name'])
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('f1723d48-c082-43cd-94bf-ebeb5b8c9458')
     def test_no_create_superdomain_by_alt_user(self):
         zone_name = dns_data_utils.rand_zone_name()
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 0a3469d..9ee0729 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -35,7 +35,6 @@
         cls.zone_client = cls.os.zones_client
         cls.client = cls.os.zone_exports_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('2dd8a9a0-98a2-4bf6-bb51-286583b30f40')
     def test_create_zone_export(self):
         LOG.info('Create a zone')
@@ -64,7 +63,6 @@
         LOG.info('Ensure the fetched response matches the zone export')
         self.assertExpected(zone_export, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('97234f00-8bcb-43f8-84dd-874f8bc4a80e')
     def test_delete_zone_export(self):
         LOG.info('Create a zone')
@@ -82,7 +80,6 @@
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_zone_export(zone_export['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('476bfdfe-58c8-46e2-b376-8403c0fff440')
     def test_list_zone_exports(self):
         LOG.info('Create a zone')
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 6aaa8e2..643691a 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -33,7 +33,6 @@
         super(ZonesImportTest, cls).setup_clients()
         cls.client = cls.os.zone_imports_client
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('2e2d907d-0609-405b-9c96-3cb2b87e3dce')
     def test_create_zone_import(self):
         LOG.info('Create a zone import')
@@ -56,7 +55,6 @@
         LOG.info('Ensure the fetched response matches the expected one')
         self.assertExpected(zone_import, body, self.excluded_keys)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('56a16e68-b241-4e41-bc5c-c40747fa68e3')
     def test_delete_zone_import(self):
         LOG.info('Create a zone import')
@@ -69,7 +67,6 @@
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_zone_import(zone_import['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('9eab76af-1995-485f-a2ef-8290c1863aba')
     def test_list_zones_imports(self):
         LOG.info('Create a zone import')
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index 117a5fb..c98a551 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -32,6 +32,7 @@
         cls.client = cls.os.zones_client
         cls.query_client = cls.os.query_client
 
+    @test.attr(type='smoke')
     @test.attr(type='slow')
     @decorators.idempotent_id('d0648f53-4114-45bd-8792-462a82f69d32')
     def test_create_and_delete_zone(self):
