diff --git a/manila_tempest_tests/tests/api/admin/test_export_locations.py b/manila_tempest_tests/tests/api/admin/test_export_locations.py
index 1be9d87..67c200e 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations.py
@@ -27,11 +27,15 @@
 LATEST_MICROVERSION = CONF.share.max_api_microversion
 
 
-@base.skip_if_microversion_not_supported("2.9")
 @ddt.ddt
 class ExportLocationsTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ExportLocationsTest, cls).skip_checks()
+        utils.check_skip_if_microversion_not_supported('2.9')
+
+    @classmethod
     def resource_setup(cls):
         super(ExportLocationsTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py b/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
index 5fffff2..fe211ff 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
@@ -18,14 +18,19 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@base.skip_if_microversion_not_supported("2.9")
 class ExportLocationsNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ExportLocationsNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt("2.9")
+
+    @classmethod
     def resource_setup(cls):
         super(ExportLocationsNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
@@ -82,9 +87,13 @@
                 )
 
 
-@base.skip_if_microversion_not_supported("2.9")
 class ExportLocationsAPIOnlyNegativeTest(base.BaseSharesAdminTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(ExportLocationsAPIOnlyNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt("2.9")
+
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_get_export_locations_by_nonexistent_share(self):
         self.assertRaises(
diff --git a/manila_tempest_tests/tests/api/admin/test_replication.py b/manila_tempest_tests/tests/api/admin/test_replication.py
index a40c94f..60f97a7 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication.py
@@ -14,7 +14,6 @@
 #    under the License.
 
 from tempest import config
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -26,12 +25,17 @@
 _MIN_SUPPORTED_MICROVERSION = '2.11'
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationAdminTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationAdminTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationAdminTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/admin/test_replication_actions.py b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
index b5b0f42..8264798 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
@@ -24,17 +24,22 @@
 _MIN_SUPPORTED_MICROVERSION = '2.11'
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@testtools.skipIf(
-    CONF.share.multitenancy_enabled,
-    "Only for driver_handles_share_servers = False driver mode.")
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
-class ReplicationAdminTest(base.BaseSharesMixedTest):
+class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
+
+    @classmethod
+    def skip_checks(cls):
+        super(ReplicationActionsAdminTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+        if CONF.share.multitenancy_enabled:
+            raise cls.skipException(
+                'Only for driver_handles_share_servers = False driver mode.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
-        super(ReplicationAdminTest, cls).resource_setup()
+        super(ReplicationActionsAdminTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
         cls.replication_type = CONF.share.backend_replication_type
diff --git a/manila_tempest_tests/tests/api/admin/test_share_group_types.py b/manila_tempest_tests/tests/api/admin/test_share_group_types.py
index c08448b..6474f59 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_group_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_group_types.py
@@ -16,7 +16,6 @@
 import ddt
 from tempest import config
 from tempest.lib.common.utils import data_utils
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -28,13 +27,19 @@
 LATEST_MICROVERSION = CONF.share.max_api_microversion
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 @ddt.ddt
 class ShareGroupTypesTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupTypesTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupTypesTest, cls).resource_setup()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py b/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
index a7cd8a5..3cb5ed7 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
@@ -13,21 +13,27 @@
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 class ShareGroupTypesAdminNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupTypesAdminNegativeTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupTypesAdminNegativeTest, cls).resource_setup()
         cls.share_type = cls.create_share_type(
diff --git a/manila_tempest_tests/tests/api/admin/test_share_groups.py b/manila_tempest_tests/tests/api/admin/test_share_groups.py
index 966a80a..39925ba 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -20,16 +20,23 @@
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 class ShareGroupsTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupsTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupsTest, cls).resource_setup()
         # Create 2 share_types
diff --git a/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py b/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
index 979e6a4..8a226c4 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
@@ -15,21 +15,27 @@
 
 from tempest import config
 from tempest.lib.common.utils import data_utils
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests import share_exceptions
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 class ShareGroupsNegativeTest(base.BaseSharesAdminTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(ShareGroupsNegativeTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_wrong_consistent_snapshot_spec(self):
         # Create valid share type for share group type
diff --git a/manila_tempest_tests/tests/api/admin/test_share_manage.py b/manila_tempest_tests/tests/api/admin/test_share_manage.py
index f74cd37..f5fd840 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_manage.py
@@ -16,7 +16,7 @@
 import ddt
 from tempest import config
 from tempest.lib.common.utils import data_utils
-import testtools
+
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -35,9 +35,12 @@
     # won't be deleted.
 
     @classmethod
-    @testtools.skipUnless(
-        CONF.share.run_manage_unmanage_tests,
-        "Manage/unmanage tests are disabled.")
+    def skip_checks(cls):
+        super(ManageNFSShareTest, cls).skip_checks()
+        if not CONF.share.run_manage_unmanage_tests:
+            raise cls.skipException('Manage/unmanage tests are disabled.')
+
+    @classmethod
     def resource_setup(cls):
         if cls.protocol not in CONF.share.enable_protocols:
             message = "%s tests are disabled" % cls.protocol
diff --git a/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py
index 8c9e146..de7e1bf 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py
@@ -34,9 +34,12 @@
     # won't be deleted.
 
     @classmethod
-    @testtools.skipUnless(
-        CONF.share.run_manage_unmanage_tests,
-        "Manage/unmanage tests are disabled.")
+    def skip_checks(cls):
+        super(ManageNFSShareNegativeTest, cls).skip_checks()
+        if not CONF.share.run_manage_unmanage_tests:
+            raise cls.skipException('Manage/unmanage tests are disabled.')
+
+    @classmethod
     def resource_setup(cls):
         if cls.protocol not in CONF.share.enable_protocols:
             message = "%s tests are disabled" % cls.protocol
diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers.py b/manila_tempest_tests/tests/api/admin/test_share_servers.py
index 65ccd96..c49b0d9 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers.py
@@ -29,13 +29,17 @@
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.multitenancy_enabled,
-    'Share servers can be tested only with multitenant drivers.')
 @ddt.ddt
 class ShareServersAdminTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareServersAdminTest, cls).skip_checks()
+        if not CONF.share.multitenancy_enabled:
+            raise cls.skipException(
+                'Share servers can be tested only with multitenant drivers.')
+
+    @classmethod
     def resource_setup(cls):
         super(ShareServersAdminTest, cls).resource_setup()
         # create share type
diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py b/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
index 661079f..7b037b3 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
@@ -25,17 +25,20 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt("2.49")
-@testtools.skipUnless(
-    CONF.share.multitenancy_enabled,
-    'Multitenancy tests are disabled.')
-@testtools.skipUnless(
-    CONF.share.run_manage_unmanage_tests,
-    'Manage/unmanage tests are disabled.')
 @ddt.ddt
 class ManageShareServersTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ManageShareServersTest, cls).skip_checks()
+        if not CONF.share.multitenancy_enabled:
+            raise cls.skipException('Multitenancy tests are disabled.')
+        if not CONF.share.run_manage_unmanage_tests:
+            raise cls.skipException('Manage/unmanage tests are disabled.')
+
+        utils.check_skip_if_microversion_lt('2.49')
+
+    @classmethod
     def resource_setup(cls):
         super(ManageShareServersTest, cls).resource_setup()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py
index 6163152..e3a5608 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py
@@ -29,17 +29,20 @@
 LATEST_MICROVERSION = CONF.share.max_api_microversion
 
 
-@base.skip_if_microversion_lt("2.49")
-@testtools.skipUnless(
-    CONF.share.multitenancy_enabled,
-    'Multitenancy tests are disabled')
-@testtools.skipUnless(
-    CONF.share.run_manage_unmanage_tests,
-    'Manage/unmanage tests are disabled.')
 @ddt.ddt
 class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ManageShareServersNegativeTest, cls).skip_checks()
+        if not CONF.share.multitenancy_enabled:
+            raise cls.skipException('Multitenancy tests are disabled.')
+        if not CONF.share.run_manage_unmanage_tests:
+            raise cls.skipException('Manage/unmanage tests are disabled.')
+
+        utils.check_skip_if_microversion_lt('2.49')
+
+    @classmethod
     def resource_setup(cls):
         super(ManageShareServersNegativeTest, cls).resource_setup()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
index 7167766..b8b859f 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
@@ -15,21 +15,26 @@
 
 import ddt
 from tempest import config
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(CONF.share.run_snapshot_tests,
-                      'Snapshot tests are disabled.')
-@base.skip_if_microversion_lt("2.19")
 @ddt.ddt
 class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareSnapshotInstancesTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+
+        utils.check_skip_if_microversion_lt("2.19")
+
+    @classmethod
     def resource_setup(cls):
         super(ShareSnapshotInstancesTest, cls).resource_setup()
         # create share type
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
index c1ffd11..17d9bcc 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
@@ -15,20 +15,25 @@
 
 from tempest import config
 from tempest.lib import exceptions as lib_exc
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(CONF.share.run_snapshot_tests,
-                      'Snapshot tests are disabled.')
-@base.skip_if_microversion_lt("2.19")
 class SnapshotInstancesNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(SnapshotInstancesNegativeTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+
+        utils.check_skip_if_microversion_lt('2.19')
+
+    @classmethod
     def resource_setup(cls):
         super(SnapshotInstancesNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
@@ -69,12 +74,17 @@
             'error')
 
 
-@testtools.skipUnless(CONF.share.run_snapshot_tests,
-                      'Snapshot tests are disabled.')
-@base.skip_if_microversion_lt("2.19")
 class SnapshotInstancesNegativeNoResourceTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(SnapshotInstancesNegativeNoResourceTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+
+        utils.check_skip_if_microversion_lt('2.19')
+
+    @classmethod
     def resource_setup(cls):
         super(SnapshotInstancesNegativeNoResourceTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
index 8e37636..a7b8641 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
@@ -17,23 +17,29 @@
 from oslo_utils import uuidutils
 import six
 from tempest import config
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 LATEST_MICROVERSION = CONF.share.max_api_microversion
 
 
-@base.skip_if_microversion_lt("2.32")
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and
-                      CONF.share.run_snapshot_tests,
-                      "Mountable snapshots tests are disabled.")
 @ddt.ddt
 class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(SnapshotExportLocationsTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
+
+        utils.check_skip_if_microversion_lt("2.32")
+
+    @classmethod
     def setup_clients(cls):
         super(SnapshotExportLocationsTest, cls).setup_clients()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
index c886398..9d48254 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
@@ -15,21 +15,27 @@
 
 from tempest import config
 from tempest.lib import exceptions as lib_exc
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt("2.32")
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and
-                      CONF.share.run_snapshot_tests,
-                      "Mountable snapshots tests are disabled.")
 class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(SnapshotExportLocationsNegativeTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
+
+        utils.check_skip_if_microversion_lt("2.32")
+
+    @classmethod
     def setup_clients(cls):
         super(SnapshotExportLocationsNegativeTest, cls).setup_clients()
         cls.admin_client = cls.admin_shares_v2_client
@@ -107,13 +113,19 @@
                 )
 
 
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and
-                      CONF.share.run_snapshot_tests,
-                      "Mountable snapshots tests are disabled.")
-@base.skip_if_microversion_lt("2.32")
 class SnapshotExportLocationsAPIOnlyNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(SnapshotExportLocationsAPIOnlyNegativeTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
+
+        utils.check_skip_if_microversion_lt('2.32')
+
+    @classmethod
     def setup_clients(cls):
         super(SnapshotExportLocationsAPIOnlyNegativeTest, cls).setup_clients()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
index aa7ccc8..5c57aa9 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
@@ -17,7 +17,7 @@
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
-import testtools
+
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -35,17 +35,20 @@
     # because cinder volume snapshots won't be deleted.
 
     @classmethod
-    @base.skip_if_microversion_lt("2.12")
-    @testtools.skipUnless(
-        CONF.share.run_manage_unmanage_snapshot_tests,
-        "Manage/unmanage snapshot tests are disabled.")
-    def resource_setup(cls):
+    def skip_checks(cls):
+        super(ManageNFSSnapshotTest, cls).skip_checks()
+        if not CONF.share.run_manage_unmanage_snapshot_tests:
+            raise cls.skipException(
+                'Manage/unmanage snapshot tests are disabled.')
         if cls.protocol not in CONF.share.enable_protocols:
             message = "%s tests are disabled" % cls.protocol
             raise cls.skipException(message)
 
+        utils.check_skip_if_microversion_lt('2.12')
         utils.skip_if_manage_not_supported_for_version()
 
+    @classmethod
+    def resource_setup(cls):
         super(ManageNFSSnapshotTest, cls).resource_setup()
 
         # Create share type
diff --git a/manila_tempest_tests/tests/api/admin/test_user_messages.py b/manila_tempest_tests/tests/api/admin/test_user_messages.py
index 6bcd7cf..8a11b1c 100644
--- a/manila_tempest_tests/tests/api/admin/test_user_messages.py
+++ b/manila_tempest_tests/tests/api/admin/test_user_messages.py
@@ -16,6 +16,7 @@
 from tempest.lib import decorators
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -36,9 +37,13 @@
 )
 
 
-@base.skip_if_microversion_lt(MICROVERSION)
 class UserMessageTest(base.BaseSharesAdminTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(UserMessageTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt(MICROVERSION)
+
     def setUp(self):
         super(UserMessageTest, self).setUp()
         self.message = self.create_user_message()
diff --git a/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py b/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
index ccca166..c9debdd 100644
--- a/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
@@ -16,15 +16,20 @@
 from tempest.lib import exceptions as lib_exc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 MICROVERSION = '2.37'
 
 
-@base.skip_if_microversion_lt(MICROVERSION)
 class UserMessageNegativeTest(base.BaseSharesAdminTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(UserMessageNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt(MICROVERSION)
+
     def setUp(self):
         super(UserMessageNegativeTest, self).setUp()
         self.message = self.create_user_message()
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 9ba720a..232b15a 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -257,6 +257,9 @@
         super(BaseSharesTest, cls).skip_checks()
         if not CONF.service_available.manila:
             raise cls.skipException("Manila support is required")
+        if not any(p in CONF.share.enable_protocols for p in cls.protocols):
+            skip_msg = "%s tests are disabled" % CONF.share.enable_protocols
+            raise cls.skipException(skip_msg)
 
     @classmethod
     def verify_nonempty(cls, *args):
@@ -301,15 +304,6 @@
             }
             cls.class_resources.insert(0, resource)
 
-    @classmethod
-    def resource_setup(cls):
-        if not (any(p in CONF.share.enable_protocols
-                    for p in cls.protocols) and
-                CONF.service_available.manila):
-            skip_msg = "Manila is disabled"
-            raise cls.skipException(skip_msg)
-        super(BaseSharesTest, cls).resource_setup()
-
     def setUp(self):
         super(BaseSharesTest, self).setUp()
         self.addCleanup(self.clear_isolated_creds)
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata.py b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
index db435d3..e569585 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
@@ -24,17 +24,12 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt(
-    constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 @ddt.ddt
 class AccessRulesMetadataTest(base.BaseSharesMixedTest):
 
     @classmethod
-    def resource_setup(cls):
-        super(AccessRulesMetadataTest, cls).resource_setup()
-        # The share access rule metadata doesn't care about the value of
-        # access type, access protocol, access_to, so we only get one of
-        # the value that the driver support.
+    def skip_checks(cls):
+        super(AccessRulesMetadataTest, cls).skip_checks()
         if not (any(p in CONF.share.enable_ip_rules_for_protocols
                     for p in cls.protocols) or
                 any(p in CONF.share.enable_user_rules_for_protocols
@@ -45,6 +40,16 @@
                     for p in cls.protocols)):
             cls.message = "Rule tests are disabled"
             raise cls.skipException(cls.message)
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
+
+    @classmethod
+    def resource_setup(cls):
+        super(AccessRulesMetadataTest, cls).resource_setup()
+        # The share access rule metadata doesn't care about the value of
+        # access type, access protocol, access_to, so we only get one of
+        # the value that the driver support.
         if CONF.share.enable_ip_rules_for_protocols:
             cls.protocol = CONF.share.enable_ip_rules_for_protocols[0]
             cls.access_type = "ip"
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
index df69ba3..033beea 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
@@ -25,14 +25,12 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt(
-    constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 @ddt.ddt
 class AccessesMetadataNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
-    def resource_setup(cls):
-        super(AccessesMetadataNegativeTest, cls).resource_setup()
+    def skip_checks(cls):
+        super(AccessesMetadataNegativeTest, cls).skip_checks()
         if not (any(p in CONF.share.enable_ip_rules_for_protocols
                     for p in cls.protocols) or
                 any(p in CONF.share.enable_user_rules_for_protocols
@@ -43,6 +41,13 @@
                     for p in cls.protocols)):
             cls.message = "Rule tests are disabled"
             raise cls.skipException(cls.message)
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
+
+    @classmethod
+    def resource_setup(cls):
+        super(AccessesMetadataNegativeTest, cls).resource_setup()
         if CONF.share.enable_ip_rules_for_protocols:
             cls.protocol = CONF.share.enable_ip_rules_for_protocols[0]
             cls.access_type = "ip"
diff --git a/manila_tempest_tests/tests/api/test_availability_zones_negative.py b/manila_tempest_tests/tests/api/test_availability_zones_negative.py
index 477e69c..95aa2d7 100644
--- a/manila_tempest_tests/tests/api/test_availability_zones_negative.py
+++ b/manila_tempest_tests/tests/api/test_availability_zones_negative.py
@@ -17,11 +17,16 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
-@base.skip_if_microversion_not_supported("2.7")
 class AvailabilityZonesNegativeTest(base.BaseSharesTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(AvailabilityZonesNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_not_supported('2.7')
+
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_list_availability_zones_api_not_found_with_legacy_url(self):
         # NOTE(vponomaryov): remove this test with removal of availability zone
diff --git a/manila_tempest_tests/tests/api/test_replication.py b/manila_tempest_tests/tests/api/test_replication.py
index cfb5812..08f73d1 100644
--- a/manila_tempest_tests/tests/api/test_replication.py
+++ b/manila_tempest_tests/tests/api/test_replication.py
@@ -30,12 +30,17 @@
                               'share_network_id', 'created_at']
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationTest, cls).resource_setup()
         # Create share_type
@@ -348,12 +353,17 @@
             constants.REPLICATION_STATE_ACTIVE, replica['replica_state'])
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationActionsTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationActionsTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationActionsTest, cls).resource_setup()
         # Create share_type
diff --git a/manila_tempest_tests/tests/api/test_replication_export_locations.py b/manila_tempest_tests/tests/api/test_replication_export_locations.py
index 165b40b..a99ee55 100644
--- a/manila_tempest_tests/tests/api/test_replication_export_locations.py
+++ b/manila_tempest_tests/tests/api/test_replication_export_locations.py
@@ -25,12 +25,16 @@
 LATEST_MICROVERSION = CONF.share.max_api_microversion
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
 @ddt.ddt
 class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationExportLocationsTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationExportLocationsTest, cls).resource_setup()
         # Create share_type
diff --git a/manila_tempest_tests/tests/api/test_replication_export_locations_negative.py b/manila_tempest_tests/tests/api/test_replication_export_locations_negative.py
index 64d2c2c..3d18fae 100644
--- a/manila_tempest_tests/tests/api/test_replication_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_export_locations_negative.py
@@ -24,11 +24,15 @@
 CONF = config.CONF
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
 class ReplicationExportLocationsNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationExportLocationsNegativeTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationExportLocationsNegativeTest, cls).resource_setup()
         # Create share_type
diff --git a/manila_tempest_tests/tests/api/test_replication_negative.py b/manila_tempest_tests/tests/api/test_replication_negative.py
index fd8bf4f..a71449e 100644
--- a/manila_tempest_tests/tests/api/test_replication_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_negative.py
@@ -28,12 +28,17 @@
 _MIN_SUPPORTED_MICROVERSION = '2.11'
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationNegativeTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
@@ -238,11 +243,16 @@
                           self.replica_zone)
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationAPIOnlyNegativeTest(base.BaseSharesTest):
 
+    @classmethod
+    def skip_checks(cls):
+        super(ReplicationAPIOnlyNegativeTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_get_replica_by_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
diff --git a/manila_tempest_tests/tests/api/test_replication_snapshots.py b/manila_tempest_tests/tests/api/test_replication_snapshots.py
index 40bf365..591b3fd 100644
--- a/manila_tempest_tests/tests/api/test_replication_snapshots.py
+++ b/manila_tempest_tests/tests/api/test_replication_snapshots.py
@@ -26,14 +26,19 @@
 _MIN_SUPPORTED_MICROVERSION = '2.11'
 
 
-@testtools.skipUnless(CONF.share.run_replication_tests,
-                      'Replication tests are disabled.')
-@testtools.skipUnless(CONF.share.run_snapshot_tests,
-                      'Snapshot tests disabled.')
-@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
 class ReplicationSnapshotTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ReplicationSnapshotTest, cls).skip_checks()
+        if not CONF.share.run_replication_tests:
+            raise cls.skipException('Replication tests are disabled.')
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests disabled.')
+
+        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ReplicationSnapshotTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
diff --git a/manila_tempest_tests/tests/api/test_revert_to_snapshot.py b/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
index c862c0b..ea9e5dd 100644
--- a/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
+++ b/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
@@ -27,8 +27,6 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_not_supported(
-    constants.REVERT_TO_SNAPSHOT_MICROVERSION)
 @ddt.ddt
 class RevertToSnapshotTest(base.BaseSharesMixedTest):
 
@@ -45,6 +43,9 @@
             msg = "Snapshot tests are disabled."
             raise cls.skipException(msg)
 
+        utils.check_skip_if_microversion_not_supported(
+            constants.REVERT_TO_SNAPSHOT_MICROVERSION)
+
     @classmethod
     def resource_setup(cls):
         super(RevertToSnapshotTest, cls).resource_setup()
diff --git a/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py b/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
index 505a614..34b0530 100644
--- a/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
+++ b/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
@@ -22,12 +22,11 @@
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@base.skip_if_microversion_not_supported(
-    constants.REVERT_TO_SNAPSHOT_MICROVERSION)
 @ddt.ddt
 class RevertToSnapshotNegativeTest(base.BaseSharesMixedTest):
 
@@ -44,6 +43,9 @@
             msg = "Snapshot tests are disabled."
             raise cls.skipException(msg)
 
+        utils.check_skip_if_microversion_not_supported(
+            constants.REVERT_TO_SNAPSHOT_MICROVERSION)
+
     @classmethod
     def resource_setup(cls):
         super(RevertToSnapshotNegativeTest, cls).resource_setup()
diff --git a/manila_tempest_tests/tests/api/test_share_group_actions.py b/manila_tempest_tests/tests/api/test_share_group_actions.py
index 6b2d442..169d767 100644
--- a/manila_tempest_tests/tests/api/test_share_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_share_group_actions.py
@@ -17,7 +17,6 @@
 import ddt
 from tempest import config
 from tempest.lib.common.utils import data_utils
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -27,14 +26,20 @@
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 @ddt.ddt
 class ShareGroupActionsTest(base.BaseSharesMixedTest):
     """Covers share group functionality."""
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupActionsTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupActionsTest, cls).resource_setup()
 
@@ -338,12 +343,18 @@
                         share['share_network_id'])
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 class ShareGroupRenameTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupRenameTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupRenameTest, cls).resource_setup()
 
diff --git a/manila_tempest_tests/tests/api/test_share_groups.py b/manila_tempest_tests/tests/api/test_share_groups.py
index 4e8499f..330c40e 100644
--- a/manila_tempest_tests/tests/api/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/test_share_groups.py
@@ -16,23 +16,29 @@
 import ddt
 from tempest import config
 from tempest.lib import exceptions as lib_exc
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 @ddt.ddt
 class ShareGroupsTest(base.BaseSharesMixedTest):
     """Covers share group functionality."""
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupsTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupsTest, cls).resource_setup()
         # create share type
diff --git a/manila_tempest_tests/tests/api/test_share_groups_negative.py b/manila_tempest_tests/tests/api/test_share_groups_negative.py
index b605632..60e7b18 100644
--- a/manila_tempest_tests/tests/api/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_groups_negative.py
@@ -16,21 +16,28 @@
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
-import testtools
+
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
 
-@testtools.skipUnless(
-    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareGroupsNegativeTest, cls).skip_checks()
+        if not CONF.share.run_share_group_tests:
+            raise cls.skipException('Share Group tests disabled.')
+
+        utils.check_skip_if_microversion_lt(
+            constants.MIN_SHARE_GROUP_MICROVERSION)
+
+    @classmethod
     def resource_setup(cls):
         super(ShareGroupsNegativeTest, cls).resource_setup()
         # Create a share type
diff --git a/manila_tempest_tests/tests/api/test_share_network_subnets.py b/manila_tempest_tests/tests/api/test_share_network_subnets.py
index d824680..5c90fd1 100644
--- a/manila_tempest_tests/tests/api/test_share_network_subnets.py
+++ b/manila_tempest_tests/tests/api/test_share_network_subnets.py
@@ -24,11 +24,15 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt("2.51")
 @ddt.ddt
 class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareNetworkSubnetsTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt("2.51")
+
+    @classmethod
     def resource_setup(cls):
         super(ShareNetworkSubnetsTest, cls).resource_setup()
         # create share_type
diff --git a/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py b/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
index aa9ce67..4836e74 100644
--- a/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
@@ -27,11 +27,15 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt("2.51")
 @ddt.ddt
 class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareNetworkSubnetsNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_lt("2.51")
+
+    @classmethod
     def resource_setup(cls):
         super(ShareNetworkSubnetsNegativeTest, cls).resource_setup()
         # Create a new share network which will be used in the tests
diff --git a/manila_tempest_tests/tests/api/test_share_type_availability_zones.py b/manila_tempest_tests/tests/api/test_share_type_availability_zones.py
index 79678ca..177cb8c 100644
--- a/manila_tempest_tests/tests/api/test_share_type_availability_zones.py
+++ b/manila_tempest_tests/tests/api/test_share_type_availability_zones.py
@@ -16,16 +16,21 @@
 import testtools
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 tc = testtools.testcase
 CONF = config.CONF
 
 
-@base.skip_if_microversion_not_supported("2.48")
 @ddt.ddt
 class ShareTypeAvailabilityZonesTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareTypeAvailabilityZonesTest, cls).skip_checks()
+        utils.check_skip_if_microversion_not_supported("2.48")
+
+    @classmethod
     def resource_setup(cls):
         super(ShareTypeAvailabilityZonesTest, cls).resource_setup()
         cls.share_type = cls._create_share_type()
diff --git a/manila_tempest_tests/tests/api/test_share_type_availability_zones_negative.py b/manila_tempest_tests/tests/api/test_share_type_availability_zones_negative.py
index 0e2d9c7..e756d1a 100644
--- a/manila_tempest_tests/tests/api/test_share_type_availability_zones_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_type_availability_zones_negative.py
@@ -15,13 +15,18 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
-@base.skip_if_microversion_not_supported("2.48")
 @ddt.ddt
 class ShareTypeAvailabilityZonesNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
+    def skip_checks(cls):
+        super(ShareTypeAvailabilityZonesNegativeTest, cls).skip_checks()
+        utils.check_skip_if_microversion_not_supported('2.48')
+
+    @classmethod
     def resource_setup(cls):
         super(ShareTypeAvailabilityZonesNegativeTest, cls).resource_setup()
         cls.share_type = cls._create_share_type()
@@ -52,7 +57,6 @@
             client=self.admin_shares_v2_client)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported("2.48")
     def test_share_type_azs_filter_by_invalid_azs_extra_spec(self):
         self.admin_shares_v2_client.update_share_type_extra_spec(
             self.share_type_id, self.az_spec, self.valid_azs_spec)
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules.py b/manila_tempest_tests/tests/api/test_snapshot_rules.py
index 354e549..86cb339 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules.py
@@ -17,10 +17,10 @@
 
 import ddt
 from tempest import config
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -60,22 +60,27 @@
             self.snapshot['id'], rule['id'])
 
 
-@base.skip_if_microversion_lt("2.32")
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and
-                      CONF.share.run_snapshot_tests,
-                      'Mountable snapshots tests are disabled.')
 @ddt.ddt
 class ShareSnapshotIpRulesForNFSTest(BaseShareSnapshotRulesTest):
     protocol = "nfs"
 
     @classmethod
-    def resource_setup(cls):
+    def skip_checks(cls):
+        super(ShareSnapshotIpRulesForNFSTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
         if not (cls.protocol in CONF.share.enable_protocols and
                 cls.protocol in CONF.share.enable_ip_rules_for_protocols):
             msg = "IP rule tests for %s protocol are disabled." % cls.protocol
             raise cls.skipException(msg)
-        super(ShareSnapshotIpRulesForNFSTest, cls).resource_setup()
 
+        utils.check_skip_if_microversion_lt('2.32')
+
+    @classmethod
+    def resource_setup(cls):
+        super(ShareSnapshotIpRulesForNFSTest, cls).resource_setup()
         cls.access_type = "ip"
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
@@ -84,22 +89,25 @@
         self._test_create_delete_access_rules(access_to)
 
 
-@base.skip_if_microversion_lt("2.32")
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests,
-                      'Mountable snapshots tests are disabled.')
 @ddt.ddt
 class ShareSnapshotUserRulesForCIFSTest(BaseShareSnapshotRulesTest):
     protocol = "cifs"
 
     @classmethod
-    def resource_setup(cls):
+    def skip_checks(cls):
+        super(ShareSnapshotUserRulesForCIFSTest, cls).skip_checks()
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
         if not (cls.protocol in CONF.share.enable_protocols and
                 cls.protocol in CONF.share.enable_user_rules_for_protocols):
             msg = ("User rule tests for %s protocol are "
                    "disabled." % cls.protocol)
             raise cls.skipException(msg)
-        super(ShareSnapshotUserRulesForCIFSTest, cls).resource_setup()
+        utils.check_skip_if_microversion_lt('2.32')
 
+    @classmethod
+    def resource_setup(cls):
+        super(ShareSnapshotUserRulesForCIFSTest, cls).resource_setup()
         cls.access_type = "user"
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
index f4f88a9..7a4308d 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
@@ -16,7 +16,6 @@
 import ddt
 from tempest import config
 from tempest.lib import exceptions as lib_exc
-import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
@@ -26,21 +25,27 @@
 CONF = config.CONF
 
 
-@base.skip_if_microversion_lt("2.32")
-@testtools.skipUnless(CONF.share.run_mount_snapshot_tests and
-                      CONF.share.run_snapshot_tests,
-                      'Mountable snapshots tests are disabled.')
 @ddt.ddt
 class SnapshotIpRulesForNFSNegativeTest(
         test_snapshot_rules.BaseShareSnapshotRulesTest):
     protocol = "nfs"
 
     @classmethod
-    def resource_setup(cls):
+    def skip_checks(cls):
+        super(SnapshotIpRulesForNFSNegativeTest, cls).skip_checks()
+        if not CONF.share.run_snapshot_tests:
+            raise cls.skipException('Snapshot tests are disabled.')
+        if not CONF.share.run_mount_snapshot_tests:
+            raise cls.skipException('Mountable snapshots tests are disabled.')
         if not (cls.protocol in CONF.share.enable_protocols and
                 cls.protocol in CONF.share.enable_ip_rules_for_protocols):
             msg = "IP rule tests for %s protocol are disabled." % cls.protocol
             raise cls.skipException(msg)
+
+        utils.check_skip_if_microversion_lt('2.32')
+
+    @classmethod
+    def resource_setup(cls):
         super(SnapshotIpRulesForNFSNegativeTest, cls).resource_setup()
         # create share type
         extra_specs = {'mount_snapshot_support': 'True'}
diff --git a/manila_tempest_tests/utils.py b/manila_tempest_tests/utils.py
index 357bbaa..2ea623d 100644
--- a/manila_tempest_tests/utils.py
+++ b/manila_tempest_tests/utils.py
@@ -92,6 +92,19 @@
     return lambda f: f
 
 
+def check_skip_if_microversion_lt(microversion):
+    if is_microversion_lt(CONF.share.max_api_microversion, microversion):
+        reason = ("Skipped. Test requires microversion greater than or "
+                  "equal to '%s'." % microversion)
+        raise testtools.TestCase.skipException(reason)
+
+
+def check_skip_if_microversion_not_supported(microversion):
+    if not is_microversion_supported(microversion):
+        reason = ("Skipped. Test requires microversion '%s'." % microversion)
+        raise testtools.TestCase.skipException(reason)
+
+
 def rand_ip(network=False):
     """This uses the TEST-NET-3 range of reserved IP addresses.
 
