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..84e77e5 100644
--- a/designate_tempest_plugin/tests/api/v1/test_domains.py
+++ b/designate_tempest_plugin/tests/api/v1/test_domains.py
@@ -15,7 +15,7 @@
 #    under the License.
 
 import six
-from tempest.common.utils import data_utils
+from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
 from tempest import test
 from tempest.lib import decorators
@@ -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..1e395d6 100644
--- a/designate_tempest_plugin/tests/api/v1/test_records.py
+++ b/designate_tempest_plugin/tests/api/v1/test_records.py
@@ -15,7 +15,7 @@
 #    under the License.
 
 import six
-from tempest.common.utils import data_utils
+from tempest.lib.common.utils import data_utils
 from tempest import test
 from tempest.lib import decorators
 
@@ -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..74639ba 100644
--- a/designate_tempest_plugin/tests/api/v1/test_servers.py
+++ b/designate_tempest_plugin/tests/api/v1/test_servers.py
@@ -14,9 +14,8 @@
 #    under the License.
 
 import six
-from tempest.common.utils import data_utils
+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 cfb3053..71f0e6b 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -68,7 +68,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):
         recordset_data = data_utils.rand_recordset_data(
@@ -83,7 +82,6 @@
 
         self.assertGreater(len(body), 0)
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('84c13cb2-9020-4c1e-aeb0-c348d9a70caa')
     def test_show_recordsets(self):
         recordset_data = data_utils.rand_recordset_data(
@@ -99,7 +97,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):
         recordset_data = data_utils.rand_recordset_data(
@@ -116,7 +113,6 @@
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_recordset(self.zone['id'], record['id']))
 
-    @test.attr(type='smoke')
     @decorators.idempotent_id('8d41c85f-09f9-48be-a202-92d1bdf5c796')
     def test_update_recordset(self):
         recordset_data = data_utils.rand_recordset_data(
@@ -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):
@@ -186,7 +181,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('List recordsets')
@@ -194,7 +188,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):
         recordset_data = {
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):
diff --git a/requirements.txt b/requirements.txt
index 124a3b8..d7c3d83 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,4 +5,4 @@
 dnspython>=1.14.0 # http://www.dnspython.org/LICENSE
 dnspython3>=1.12.0;python_version>='3.0' # http://www.dnspython.org/LICENSE
 ddt>=1.0.1 # MIT
-tempest>=11.0.0 # Apache-2.0
+tempest>=12.1.0 # Apache-2.0
