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 7fd2909..84e77e5 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 ea38fa6..1e395d6 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 3798bf4..74639ba 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.lib.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):
