diff --git a/manila_tempest_tests/tests/api/admin/test_admin_actions.py b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
index 108173e..bc89642 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -39,13 +39,13 @@
         if CONF.share.run_snapshot_tests:
             cls.sn = cls.create_snapshot_wait_for_active(cls.sh["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_reset_share_state(self):
         for status in self.states:
             self.shares_v2_client.reset_state(self.sh["id"], status=status)
             self.shares_v2_client.wait_for_share_status(self.sh["id"], status)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_reset_share_instance_state(self):
         id = self.sh_instance["id"]
         for status in self.states:
@@ -53,7 +53,7 @@
                 id, s_type="share_instances", status=status)
             self.shares_v2_client.wait_for_share_instance_status(id, status)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_reset_snapshot_state_to_error(self):
@@ -63,7 +63,7 @@
             self.shares_v2_client.wait_for_snapshot_status(
                 self.sn["id"], status)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_force_delete_share(self):
         share = self.create_share()
 
@@ -78,7 +78,7 @@
         self.shares_v2_client.force_delete(share["id"])
         self.shares_v2_client.wait_for_resource_deletion(share_id=share["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_force_delete_share_instance(self):
         share = self.create_share(cleanup_in_class=False)
         instances = self.shares_v2_client.get_instances_of_share(share["id"])
@@ -101,7 +101,7 @@
         self.shares_v2_client.wait_for_resource_deletion(
             share_instance_id=instance["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_force_delete_snapshot(self):
@@ -119,7 +119,7 @@
         self.shares_v2_client.force_delete(sn["id"], s_type="snapshots")
         self.shares_v2_client.wait_for_resource_deletion(snapshot_id=sn["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_reset_share_task_state(self):
         for task_state in self.task_states:
diff --git a/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py b/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
index 82fcd5a..be760c0 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
@@ -38,30 +38,13 @@
         cls.member_shares_client = clients.Manager().shares_client
         cls.member_shares_v2_client = clients.Manager().shares_v2_client
 
-    @test.attr(type=["gate", "negative", ])
-    def test_reset_nonexistent_share_state(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.reset_state, "fake")
-
-    @test.attr(type=["gate", "negative", ])
-    def test_reset_nonexistent_share_instance_state(self):
-        self.assertRaises(lib_exc.NotFound, self.shares_v2_client.reset_state,
-                          "fake", s_type="share_instances")
-
-    @test.attr(type=["gate", "negative", ])
-    @testtools.skipUnless(CONF.share.run_snapshot_tests,
-                          "Snapshot tests are disabled.")
-    def test_reset_nonexistent_snapshot_state(self):
-        self.assertRaises(lib_exc.NotFound, self.shares_client.reset_state,
-                          "fake", s_type="snapshots")
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_reset_share_state_to_unacceptable_state(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.reset_state,
                           self.sh["id"], status="fake")
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_reset_share_instance_state_to_unacceptable_state(self):
         self.assertRaises(
             lib_exc.BadRequest,
@@ -71,7 +54,7 @@
             status="fake"
         )
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_reset_snapshot_state_to_unacceptable_state(self):
@@ -79,21 +62,21 @@
                           self.shares_client.reset_state,
                           self.sn["id"], s_type="snapshots", status="fake")
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_reset_share_state_with_member(self):
         # Even if member from another tenant, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.reset_state,
                           self.sh["id"])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_reset_share_instance_state_with_member(self):
         # Even if member from another tenant, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_v2_client.reset_state,
                           self.sh_instance["id"], s_type="share_instances")
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_try_reset_snapshot_state_with_member(self):
@@ -102,42 +85,21 @@
                           self.member_shares_client.reset_state,
                           self.sn["id"], s_type="snapshots")
 
-    @test.attr(type=["gate", "negative", ])
-    def test_force_delete_nonexistent_share(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.force_delete, "fake")
-
-    @test.attr(type=["gate", "negative", ])
-    def test_force_delete_nonexistent_share_instance(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.force_delete,
-                          "fake",
-                          s_type="share_instances")
-
-    @test.attr(type=["gate", "negative", ])
-    @testtools.skipUnless(CONF.share.run_snapshot_tests,
-                          "Snapshot tests are disabled.")
-    def test_force_delete_nonexistent_snapshot(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.force_delete,
-                          "fake",
-                          s_type="snapshots")
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_force_delete_share_with_member(self):
         # If a non-admin tries to do force_delete, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.force_delete,
                           self.sh["id"])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_force_delete_share_instance_with_member(self):
         # If a non-admin tries to do force_delete, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_v2_client.force_delete,
                           self.sh_instance["id"], s_type="share_instances")
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_try_force_delete_snapshot_with_member(self):
@@ -146,20 +108,14 @@
                           self.member_shares_client.force_delete,
                           self.sn["id"], s_type="snapshots")
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_get_share_instance_with_member(self):
         # If a non-admin tries to get instance, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_v2_client.get_share_instance,
                           self.sh_instance["id"])
 
-    @test.attr(type=["gate", "negative", ])
-    def test_try_list_share_instance_with_member(self):
-        # If a non-admin tries to list instances, it should be unauthorized
-        self.assertRaises(lib_exc.Forbidden,
-                          self.member_shares_v2_client.list_share_instances)
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_get_instances_of_share_with_member(self):
         # If a non-admin tries to list instances of given share, it should be
         # unauthorized
@@ -167,23 +123,75 @@
                           self.member_shares_v2_client.get_instances_of_share,
                           self.sh['id'])
 
-    @test.attr(type=["gate", "negative", ])
-    @base.skip_if_microversion_lt("2.15")
-    def test_reset_task_state_share_not_found(self):
-        self.assertRaises(
-            lib_exc.NotFound, self.shares_v2_client.reset_task_state,
-            'fake_share', 'migration_error')
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_reset_task_state_empty(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.reset_task_state,
             self.sh['id'], None)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_reset_task_state_invalid_state(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.reset_task_state,
             self.sh['id'], 'fake_state')
+
+
+class AdminActionsAPIOnlyNegativeTest(base.BaseSharesAdminTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(AdminActionsAPIOnlyNegativeTest, cls).resource_setup()
+        cls.member_shares_v2_client = clients.Manager().shares_v2_client
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_try_list_share_instance_with_member(self):
+        # If a non-admin tries to list instances, it should be unauthorized
+        self.assertRaises(lib_exc.Forbidden,
+                          self.member_shares_v2_client.list_share_instances)
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @base.skip_if_microversion_lt("2.15")
+    def test_reset_task_state_share_not_found(self):
+        self.assertRaises(
+            lib_exc.NotFound, self.shares_v2_client.reset_task_state,
+            'fake_share', 'migration_error')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    def test_force_delete_nonexistent_snapshot(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.force_delete,
+                          "fake",
+                          s_type="snapshots")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_force_delete_nonexistent_share(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.force_delete, "fake")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_force_delete_nonexistent_share_instance(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.force_delete,
+                          "fake",
+                          s_type="share_instances")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_reset_nonexistent_share_state(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.reset_state, "fake")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_reset_nonexistent_share_instance_state(self):
+        self.assertRaises(lib_exc.NotFound, self.shares_v2_client.reset_state,
+                          "fake", s_type="share_instances")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    def test_reset_nonexistent_snapshot_state(self):
+        self.assertRaises(lib_exc.NotFound, self.shares_client.reset_state,
+                          "fake", s_type="snapshots")
diff --git a/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py b/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
index 21704ff..d427e1c 100644
--- a/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
@@ -46,7 +46,7 @@
         cls.consistency_group = cls.shares_v2_client.get_consistency_group(
             cls.consistency_group['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_cg_from_cgsnapshot_with_multiple_share_types_v2_4(self):
         # Create cgsnapshot
         cgsnapshot = self.create_cgsnapshot_wait_for_active(
@@ -68,7 +68,7 @@
                          'Expected share types of %s, but got %s.' % (
                              expected_types, actual_types))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_cg_from_multi_typed_populated_cgsnapshot_v2_4(self):
         share_name = data_utils.rand_name("tempest-share-name")
         share_desc = data_utils.rand_name("tempest-share-description")
diff --git a/manila_tempest_tests/tests/api/admin/test_consistency_groups.py b/manila_tempest_tests/tests/api/admin/test_consistency_groups.py
index b064dcd..87b7f51 100644
--- a/manila_tempest_tests/tests/api/admin/test_consistency_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_consistency_groups.py
@@ -42,7 +42,7 @@
         share_type = cls.create_share_type(name, extra_specs=extra_specs)
         cls.share_type2 = share_type['share_type']
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_multiple_share_types_v2_4(self):
         # Create a consistency group
         consistency_group = self.create_consistency_group(
@@ -67,6 +67,7 @@
                                                       expected_share_types,
                                                       actual_share_types))
 
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_create_cg_from_cgsnapshot_verify_share_server_information(self):
diff --git a/manila_tempest_tests/tests/api/admin/test_consistency_groups_negative.py b/manila_tempest_tests/tests/api/admin/test_consistency_groups_negative.py
index dfccb6a..6532831 100644
--- a/manila_tempest_tests/tests/api/admin/test_consistency_groups_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_consistency_groups_negative.py
@@ -61,14 +61,14 @@
             name=cls.cgsnap_name,
             description=cls.cgsnap_desc)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_share_type_in_use_by_cg(self):
         # Attempt delete of share type
         self.assertRaises(exceptions.BadRequest,
                           self.shares_client.delete_share_type,
                           self.share_type['id'])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_share_of_unsupported_type_in_cg_v2_4(self):
         # Attempt to create share of default type in the cg
         self.assertRaises(exceptions.BadRequest,
@@ -77,7 +77,7 @@
                           consistency_group_id=self.consistency_group['id'],
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_share_in_cg_that_is_not_available_v2_4(self):
         consistency_group = self.create_consistency_group(
             cleanup_in_class=False, version='2.4')
@@ -122,7 +122,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cgsnapshot_of_cg_that_is_not_available_v2_4(self):
         consistency_group = self.create_consistency_group(
             cleanup_in_class=False, version='2.4')
@@ -161,7 +161,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cgsnapshot_of_cg_with_share_in_error_state_v2_4(self):
         consistency_group = self.create_consistency_group(version='2.4')
         share_name = data_utils.rand_name("tempest-share-name")
@@ -183,7 +183,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_cgsnapshot_not_in_available_or_error_v2_4(self):
         cgsnapshot = self.create_cgsnapshot_wait_for_active(
             self.consistency_group['id'],
@@ -216,7 +216,7 @@
                           cgsnapshot['id'],
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_cg_not_in_available_or_error_v2_4(self):
         consistency_group = self.create_consistency_group(
             cleanup_in_class=False, version='2.4')
@@ -243,7 +243,7 @@
                           consistency_group['id'],
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_conflicting_share_types_v2_4(self):
         # Create conflicting share types
         name = data_utils.rand_name("tempest-manila")
@@ -263,7 +263,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_multi_tenant_share_type_and_no_share_network_v2_4(
             self):
         # Create multi tenant share type
@@ -287,7 +287,7 @@
 
         self.assertRaises(exceptions.BadRequest, create_cg)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_update_cg_share_types(self):
         consistency_group = self.create_consistency_group(
             cleanup_in_class=False, version='2.4')
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 a7b45a8..7c3d78d 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations.py
@@ -101,7 +101,7 @@
                     # it making assertion that it has proper date value.
                     timeutils.parse_strtime(time)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.13')
     def test_list_share_export_locations(self):
         export_locations = self.admin_client.list_share_export_locations(
@@ -110,7 +110,7 @@
         self._verify_export_location_structure(export_locations,
                                                version='2.13')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.14')
     def test_list_share_export_locations_with_preferred_flag(self):
         export_locations = self.admin_client.list_share_export_locations(
@@ -119,7 +119,7 @@
         self._verify_export_location_structure(export_locations,
                                                version='2.14')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_export_location(self):
         export_locations = self.admin_client.list_share_export_locations(
             self.share['id'])
@@ -129,14 +129,14 @@
                 self.share['id'], export_location['id'])
             self._verify_export_location_structure(el, format='detail')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_export_locations_by_member(self):
         export_locations = self.member_client.list_share_export_locations(
             self.share['id'])
 
         self._verify_export_location_structure(export_locations, role='member')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_export_location_by_member(self):
         export_locations = self.admin_client.list_share_export_locations(
             self.share['id'])
@@ -149,7 +149,7 @@
             self._verify_export_location_structure(el, role='member',
                                                    format='detail')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.13')
     def test_list_share_instance_export_locations(self):
         for share_instance in self.share_instances:
@@ -159,7 +159,7 @@
             self._verify_export_location_structure(export_locations,
                                                    version='2.13')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.14')
     def test_list_share_instance_export_locations_with_preferred_flag(self):
         for share_instance in self.share_instances:
@@ -169,7 +169,7 @@
             self._verify_export_location_structure(export_locations,
                                                    version='2.14')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_instance_export_location(self):
         for share_instance in self.share_instances:
             export_locations = (
@@ -180,7 +180,7 @@
                     share_instance['id'], el['id'])
                 self._verify_export_location_structure(el, format='detail')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_share_contains_all_export_locations_of_all_share_instances(self):
         share_export_locations = self.admin_client.list_share_export_locations(
             self.share['id'])
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 93ff5f0..7c83a24 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
@@ -36,15 +36,7 @@
         cls.share_instances = cls.shares_v2_client.get_instances_of_share(
             cls.share['id'])
 
-    @test.attr(type=["gate", "negative"])
-    def test_get_export_locations_by_inexistent_share(self):
-        self.assertRaises(
-            lib_exc.NotFound,
-            self.admin_client.list_share_export_locations,
-            "fake-inexistent-share-id",
-        )
-
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_get_inexistent_share_export_location(self):
         self.assertRaises(
             lib_exc.NotFound,
@@ -53,15 +45,7 @@
             "fake-inexistent-share-instance-id",
         )
 
-    @test.attr(type=["gate", "negative"])
-    def test_get_export_locations_by_inexistent_share_instance(self):
-        self.assertRaises(
-            lib_exc.NotFound,
-            self.admin_client.list_share_instance_export_locations,
-            "fake-inexistent-share-instance-id",
-        )
-
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_get_inexistent_share_instance_export_location(self):
         for share_instance in self.share_instances:
             self.assertRaises(
@@ -71,7 +55,7 @@
                 "fake-inexistent-share-instance-id",
             )
 
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_instance_export_locations_by_member(self):
         for share_instance in self.share_instances:
             self.assertRaises(
@@ -80,7 +64,7 @@
                 "fake-inexistent-share-instance-id",
             )
 
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_instance_export_location_by_member(self):
         for share_instance in self.share_instances:
             export_locations = (
@@ -92,3 +76,23 @@
                     self.member_client.get_share_instance_export_location,
                     share_instance['id'], el['id'],
                 )
+
+
+@base.skip_if_microversion_not_supported("2.9")
+class ExportLocationsAPIOnlyNegativeTest(base.BaseSharesAdminTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_export_locations_by_nonexistent_share(self):
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.shares_v2_client.list_share_export_locations,
+            "fake-inexistent-share-id",
+        )
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_export_locations_by_nonexistent_share_instance(self):
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.shares_v2_client.list_share_instance_export_locations,
+            "fake-inexistent-share-instance-id",
+        )
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index 96f657a..f808a44 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration.py
@@ -39,7 +39,7 @@
         if not CONF.share.run_migration_tests:
             raise cls.skipException("Migration tests disabled. Skipping.")
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @base.skip_if_microversion_lt("2.5")
     def test_migration_empty_v2_5(self):
 
@@ -52,7 +52,7 @@
         self._validate_migration_successful(dest_pool, share, old_exports,
                                             version='2.5')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_migration_completion_empty_v2_15(self):
 
diff --git a/manila_tempest_tests/tests/api/admin/test_migration_negative.py b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
index b7d75c4..348e5fa 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
@@ -47,28 +47,28 @@
         cls.dest_pool = next((x for x in pools
                               if x['name'] != cls.share['host']), None)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_migration_cancel_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_cancel,
             self.share['id'])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_migration_get_progress_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_get_progress,
             self.share['id'])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.15")
     def test_migration_complete_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_complete,
             self.share['id'])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.5")
     def test_migrate_share_with_snapshot_v2_5(self):
         snap = self.create_snapshot_wait_for_active(self.share['id'])
@@ -78,14 +78,14 @@
         self.shares_client.delete_snapshot(snap['id'])
         self.shares_client.wait_for_resource_deletion(snapshot_id=snap["id"])
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.5")
     def test_migrate_share_same_host_v2_5(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migrate_share,
             self.share['id'], self.share['host'], True, version='2.5')
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_lt("2.5")
     def test_migrate_share_not_available_v2_5(self):
         self.shares_client.reset_state(self.share['id'], 'error')
diff --git a/manila_tempest_tests/tests/api/admin/test_multi_backend.py b/manila_tempest_tests/tests/api/admin/test_multi_backend.py
index 59f56c8..57fb9fd 100644
--- a/manila_tempest_tests/tests/api/admin/test_multi_backend.py
+++ b/manila_tempest_tests/tests/api/admin/test_multi_backend.py
@@ -56,14 +56,14 @@
         # Create shares using precreated share types
         cls.shares = cls.create_shares(share_data_list)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_share_backend_name_reporting(self):
         # Share's 'host' should be like "hostname@backend_name"
         for share in self.shares:
             get = self.shares_client.get_share(share['id'])
             self.assertTrue(len(get["host"].split("@")) == 2)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_share_share_type(self):
         # Share type should be the same as provided with share creation
         for i in [0, 1]:
@@ -71,7 +71,7 @@
                                                   version="2.5")
             self.assertEqual(self.sts[i]["name"], get["share_type"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_share_share_type_v_2_6(self):
         # Share type should be the same as provided with share creation
         for i in [0, 1]:
@@ -80,7 +80,7 @@
             self.assertEqual(self.sts[i]["id"], get["share_type"])
             self.assertEqual(self.sts[i]["name"], get["share_type_name"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_share_backend_name_distinction(self):
         # Different share backends should have different host records
         if CONF.share.backend_names[0] == CONF.share.backend_names[1]:
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas.py b/manila_tempest_tests/tests/api/admin/test_quotas.py
index 3c99083..da79215 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas.py
@@ -34,7 +34,7 @@
         cls.user_id = cls.shares_v2_client.user_id
         cls.tenant_id = cls.shares_v2_client.tenant_id
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_default_quotas(self):
         quotas = self.shares_v2_client.default_quotas(self.tenant_id)
         self.assertGreater(int(quotas["gigabytes"]), -2)
@@ -43,7 +43,7 @@
         self.assertGreater(int(quotas["snapshots"]), -2)
         self.assertGreater(int(quotas["share_networks"]), -2)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_show_quotas(self):
         quotas = self.shares_v2_client.show_quotas(self.tenant_id)
         self.assertGreater(int(quotas["gigabytes"]), -2)
@@ -52,7 +52,7 @@
         self.assertGreater(int(quotas["snapshots"]), -2)
         self.assertGreater(int(quotas["share_networks"]), -2)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_show_quotas_for_user(self):
         quotas = self.shares_v2_client.show_quotas(
             self.tenant_id, self.user_id)
@@ -83,7 +83,7 @@
         self.tenant_id = self.client.tenant_id
         self.user_id = self.client.user_id
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_tenant_quota_shares(self):
         # get current quotas
         quotas = self.client.show_quotas(self.tenant_id)
@@ -93,7 +93,7 @@
         updated = self.client.update_quotas(self.tenant_id, shares=new_quota)
         self.assertEqual(new_quota, int(updated["shares"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_user_quota_shares(self):
         # get current quotas
         quotas = self.client.show_quotas(self.tenant_id, self.user_id)
@@ -104,7 +104,7 @@
             self.tenant_id, self.user_id, shares=new_quota)
         self.assertEqual(new_quota, int(updated["shares"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_tenant_quota_snapshots(self):
         # get current quotas
         quotas = self.client.show_quotas(self.tenant_id)
@@ -115,7 +115,7 @@
             self.tenant_id, snapshots=new_quota)
         self.assertEqual(new_quota, int(updated["snapshots"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_user_quota_snapshots(self):
         # get current quotas
         quotas = self.client.show_quotas(self.tenant_id, self.user_id)
@@ -126,7 +126,7 @@
             self.tenant_id, self.user_id, snapshots=new_quota)
         self.assertEqual(new_quota, int(updated["snapshots"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_tenant_quota_gigabytes(self):
         # get current quotas
         custom = self.client.show_quotas(self.tenant_id)
@@ -139,7 +139,7 @@
             self.tenant_id, gigabytes=gigabytes)
         self.assertEqual(gigabytes, int(updated["gigabytes"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_tenant_quota_snapshot_gigabytes(self):
         # get current quotas
         custom = self.client.show_quotas(self.tenant_id)
@@ -154,7 +154,7 @@
         self.assertEqual(snapshot_gigabytes,
                          int(updated["snapshot_gigabytes"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_user_quota_gigabytes(self):
         # get current quotas
         custom = self.client.show_quotas(self.tenant_id, self.user_id)
@@ -167,7 +167,7 @@
             self.tenant_id, self.user_id, gigabytes=gigabytes)
         self.assertEqual(gigabytes, int(updated["gigabytes"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_user_quota_snapshot_gigabytes(self):
         # get current quotas
         custom = self.client.show_quotas(self.tenant_id, self.user_id)
@@ -182,7 +182,7 @@
         self.assertEqual(snapshot_gigabytes,
                          int(updated["snapshot_gigabytes"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_tenant_quota_share_networks(self):
         # get current quotas
         quotas = self.client.show_quotas(self.tenant_id)
@@ -193,7 +193,7 @@
             self.tenant_id, share_networks=new_quota)
         self.assertEqual(new_quota, int(updated["share_networks"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_user_quota_share_networks(self):
         # get current quotas
         quotas = self.client.show_quotas(
@@ -206,7 +206,7 @@
             share_networks=new_quota)
         self.assertEqual(new_quota, int(updated["share_networks"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_reset_tenant_quotas(self):
         # get default_quotas
         default = self.client.default_quotas(self.tenant_id)
@@ -247,7 +247,7 @@
         self.assertEqual(int(default["share_networks"]),
                          int(reseted["share_networks"]))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_quota_for_shares(self):
         self.client.update_quotas(self.tenant_id, shares=-1)
 
@@ -255,7 +255,7 @@
 
         self.assertEqual(-1, quotas.get('shares'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_user_quota_for_shares(self):
         self.client.update_quotas(
             self.tenant_id, self.user_id, shares=-1)
@@ -264,7 +264,7 @@
 
         self.assertEqual(-1, quotas.get('shares'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_quota_for_snapshots(self):
         self.client.update_quotas(self.tenant_id, snapshots=-1)
 
@@ -272,7 +272,7 @@
 
         self.assertEqual(-1, quotas.get('snapshots'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_user_quota_for_snapshots(self):
         self.client.update_quotas(
             self.tenant_id, self.user_id, snapshots=-1)
@@ -281,7 +281,7 @@
 
         self.assertEqual(-1, quotas.get('snapshots'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_quota_for_gigabytes(self):
         self.client.update_quotas(self.tenant_id, gigabytes=-1)
 
@@ -289,7 +289,7 @@
 
         self.assertEqual(-1, quotas.get('gigabytes'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_quota_for_snapshot_gigabytes(self):
         self.client.update_quotas(
             self.tenant_id, snapshot_gigabytes=-1)
@@ -298,7 +298,7 @@
 
         self.assertEqual(-1, quotas.get('snapshot_gigabytes'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_user_quota_for_gigabytes(self):
         self.client.update_quotas(
             self.tenant_id, self.user_id, gigabytes=-1)
@@ -307,7 +307,7 @@
 
         self.assertEqual(-1, quotas.get('gigabytes'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_user_quota_for_snapshot_gigabytes(self):
         self.client.update_quotas(
             self.tenant_id, self.user_id, snapshot_gigabytes=-1)
@@ -316,7 +316,7 @@
 
         self.assertEqual(-1, quotas.get('snapshot_gigabytes'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_quota_for_share_networks(self):
         self.client.update_quotas(self.tenant_id, share_networks=-1)
 
@@ -324,7 +324,7 @@
 
         self.assertEqual(-1, quotas.get('share_networks'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_unlimited_user_quota_for_share_networks(self):
         self.client.update_quotas(
             self.tenant_id, self.user_id, share_networks=-1)
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
index d5452ed..8d623c1 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
@@ -38,18 +38,18 @@
         cls.user_id = cls.shares_client.user_id
         cls.tenant_id = cls.shares_client.tenant_id
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_quotas_with_empty_tenant_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.show_quotas, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_reset_quotas_with_empty_tenant_id(self):
         client = self.get_client_with_isolated_creds()
         self.assertRaises(lib_exc.NotFound,
                           client.reset_quotas, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_update_shares_quota_with_wrong_data(self):
         # -1 is acceptable value as unlimited
         client = self.get_client_with_isolated_creds()
@@ -58,7 +58,7 @@
                           client.tenant_id,
                           shares=-2)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_update_snapshots_quota_with_wrong_data(self):
         # -1 is acceptable value as unlimited
         client = self.get_client_with_isolated_creds()
@@ -67,7 +67,7 @@
                           client.tenant_id,
                           snapshots=-2)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_update_gigabytes_quota_with_wrong_data(self):
         # -1 is acceptable value as unlimited
         client = self.get_client_with_isolated_creds()
@@ -76,7 +76,7 @@
                           client.tenant_id,
                           gigabytes=-2)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_update_snapshot_gigabytes_quota_with_wrong_data(self):
         # -1 is acceptable value as unlimited
         client = self.get_client_with_isolated_creds()
@@ -85,7 +85,7 @@
                           client.tenant_id,
                           snapshot_gigabytes=-2)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_update_share_networks_quota_with_wrong_data(self):
         # -1 is acceptable value as unlimited
         client = self.get_client_with_isolated_creds()
@@ -94,7 +94,7 @@
                           client.tenant_id,
                           share_networks=-2)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_create_share_with_size_bigger_than_quota(self):
         quotas = self.shares_client.show_quotas(
             self.shares_client.tenant_id)
@@ -105,7 +105,7 @@
                           self.create_share,
                           size=overquota)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_user_quota_shares_bigger_than_tenant_quota(self):
         client = self.get_client_with_isolated_creds()
 
@@ -120,7 +120,7 @@
                           client.user_id,
                           shares=bigger_value)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_user_quota_snaps_bigger_than_tenant_quota(self):
         client = self.get_client_with_isolated_creds()
 
@@ -135,7 +135,7 @@
                           client.user_id,
                           snapshots=bigger_value)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_user_quota_gigabytes_bigger_than_tenant_quota(self):
         client = self.get_client_with_isolated_creds()
 
@@ -150,7 +150,7 @@
                           client.user_id,
                           gigabytes=bigger_value)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_user_quota_snap_gigabytes_bigger_than_tenant_quota(self):
         client = self.get_client_with_isolated_creds()
 
@@ -165,7 +165,7 @@
                           client.user_id,
                           snapshot_gigabytes=bigger_value)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_user_quota_share_networks_bigger_than_tenant_quota(self):
         client = self.get_client_with_isolated_creds()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_replication.py b/manila_tempest_tests/tests/api/admin/test_replication.py
index 605656c..8e7ddb8 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication.py
@@ -67,7 +67,7 @@
         return [replica['id'] for replica in replica_list
                 if replica['replica_state'] == r_state]
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_promote_out_of_sync_share_replica(self):
         """Test promote 'out_of_sync' share replica to active state."""
         if (self.replication_type
@@ -113,7 +113,7 @@
             replica_list, constants.REPLICATION_STATE_ACTIVE)
         self.assertEqual(1, len(new_active_replicas))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_force_delete_share_replica(self):
         """Test force deleting a replica that is in 'error_deleting' status."""
         replica = self.create_share_replica(self.share['id'],
@@ -127,7 +127,7 @@
         self.shares_v2_client.wait_for_resource_deletion(
             replica_id=replica['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_reset_share_replica_status(self):
         """Test resetting a replica's 'status' attribute."""
         replica = self.create_share_replica(self.share['id'],
@@ -138,7 +138,7 @@
         self.shares_v2_client.wait_for_share_replica_status(
             replica['id'], constants.STATUS_ERROR)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_reset_share_replica_state(self):
         """Test resetting a replica's 'replica_state' attribute."""
         replica = self.create_share_replica(self.share['id'],
@@ -149,7 +149,7 @@
         self.shares_v2_client.wait_for_share_replica_status(
             replica['id'], constants.STATUS_ERROR, status_attr='replica_state')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_resync_share_replica(self):
         """Test resyncing a replica."""
         replica = self.create_share_replica(self.share['id'],
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 6ca2f0c..0df830e 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
@@ -64,7 +64,7 @@
         cls.replica = cls.shares_v2_client.list_share_replicas(
             share_id=cls.share['id'])[0]
 
-    @test.attr(type=["gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_extend_tests,
                           'Extend share tests are disabled.')
     def test_extend_replicated_share(self):
@@ -76,7 +76,7 @@
         share = self.shares_v2_client.get_share(self.share["id"])
         self.assertEqual(new_size, int(share["size"]))
 
-    @test.attr(type=["gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_shrink_tests,
                           'Shrink share tests are disabled.')
     def test_shrink_replicated_share(self):
@@ -87,7 +87,7 @@
         shrink_share = self.shares_v2_client.get_share(self.share["id"])
         self.assertEqual(new_size, int(shrink_share["size"]))
 
-    @test.attr(type=["gate", "positive"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_tests,
                           'Manage/Unmanage Tests are disabled.')
     def test_manage_share_for_replication_type(self):
@@ -121,7 +121,7 @@
         self.create_share_replica(managed_share['id'], self.replica_zone,
                                   cleanup=True)
 
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_tests,
                           'Manage/Unmanage Tests are disabled.')
     def test_unmanage_replicated_share_with_replica(self):
@@ -134,7 +134,7 @@
             self.shares_v2_client.unmanage_share,
             share_id=self.share['id'])
 
-    @test.attr(type=["gate", "positive"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_tests,
                           'Manage/Unmanage Tests are disabled.')
     def test_unmanage_replicated_share_with_no_replica(self):
@@ -145,7 +145,7 @@
         self.shares_v2_client.unmanage_share(share['id'])
         self.shares_v2_client.wait_for_resource_deletion(share_id=share['id'])
 
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_snapshot_tests,
                           'Manage/Unmanage Snapshot Tests are disabled.')
     def test_manage_replicated_share_snapshot(self):
@@ -160,7 +160,7 @@
             provider_location="127.0.0.1:/fake_provider_location/"
                               "manila_share_9dc61f49_fbc8_48d7_9337_2f9593d9")
 
-    @test.attr(type=["gate", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_snapshot_tests,
                           'Manage/Unmanage Snapshot Tests are disabled.')
     def test_unmanage_replicated_share_snapshot(self):
@@ -174,7 +174,7 @@
             self.shares_v2_client.unmanage_snapshot,
             snapshot_id=snapshot['id'])
 
-    @test.attr(type=["gate", "positive"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_manage_unmanage_snapshot_tests,
                           'Manage/Unmanage Snapshot Tests are disabled.')
     def test_unmanage_replicated_share_snapshot_with_no_replica(self):
diff --git a/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py b/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
index d1ef6ef..2fa6be9 100644
--- a/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
+++ b/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
@@ -23,7 +23,7 @@
 
 class SchedulerStatsAdminTest(base.BaseSharesAdminTest):
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_pool_list(self):
 
         # List pools
@@ -36,7 +36,7 @@
         actual_keys = set(pool.keys())
         self.assertTrue(actual_keys.issuperset(required_keys))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_pool_list_with_filters(self):
 
         # List pools
@@ -65,7 +65,7 @@
         for k, v in search_opts.items():
             self.assertEqual(v[1:-1], filtered_pool_list[0][k])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_pool_list_with_filters_negative(self):
 
         # Build search opts for a non-existent pool
@@ -81,7 +81,7 @@
         # Ensure we got no pools
         self.assertEmpty(pool_list)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_pool_list_detail(self):
 
         # List pools
@@ -94,7 +94,7 @@
         actual_keys = set(pool.keys())
         self.assertTrue(actual_keys.issuperset(required_keys))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_pool_list_detail_with_filters(self):
 
         # List pools
@@ -123,7 +123,7 @@
         for k, v in search_opts.items():
             self.assertEqual(v[1:-1], filtered_pool_list[0][k])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_pool_list_detail_with_filters_negative(self):
 
         # Build search opts for a non-existent pool
diff --git a/manila_tempest_tests/tests/api/admin/test_security_services.py b/manila_tempest_tests/tests/api/admin/test_security_services.py
index 562aa3d..79169ff 100644
--- a/manila_tempest_tests/tests/api/admin/test_security_services.py
+++ b/manila_tempest_tests/tests/api/admin/test_security_services.py
@@ -46,7 +46,7 @@
             'kerberos',
             **ss_kerberos_data)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_security_services_all_tenants(self):
         listed = self.shares_client.list_security_services(
             params={'all_tenants': 1})
@@ -57,7 +57,7 @@
         keys = ["name", "id", "status", "type", ]
         [self.assertIn(key, s_s.keys()) for s_s in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_security_services_invalid_filters(self):
         listed = self.shares_client.list_security_services(
             params={'fake_opt': 'some_value'})
diff --git a/manila_tempest_tests/tests/api/admin/test_services.py b/manila_tempest_tests/tests/api/admin/test_services.py
index 10df866..f2d4175 100644
--- a/manila_tempest_tests/tests/api/admin/test_services.py
+++ b/manila_tempest_tests/tests/api/admin/test_services.py
@@ -26,7 +26,7 @@
         super(ServicesAdminTest, self).setUp()
         self.services = self.shares_client.list_services()
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_list_services(self, client_name):
         services = getattr(self, client_name).list_services()
@@ -35,7 +35,7 @@
         for service in services:
             self.assertIsNotNone(service['id'])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_host_name(self, client_name):
         host = self.services[0]["host"]
@@ -45,7 +45,7 @@
         for service in services:
             self.assertEqual(host, service["host"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_binary_name(self, client_name):
         binary = self.services[0]["binary"]
@@ -55,7 +55,7 @@
         for service in services:
             self.assertEqual(binary, service["binary"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_availability_zone(self, client_name):
         zone = self.services[0]["zone"]
@@ -65,7 +65,7 @@
         for service in services:
             self.assertEqual(zone, service["zone"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_status(self, client_name):
         status = self.services[0]["status"]
@@ -75,7 +75,7 @@
         for service in services:
             self.assertEqual(status, service["status"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_state(self, client_name):
         state = self.services[0]["state"]
@@ -85,7 +85,7 @@
         for service in services:
             self.assertEqual(state, service["state"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_get_services_by_all_filters(self, client_name):
         params = {
diff --git a/manila_tempest_tests/tests/api/admin/test_services_negative.py b/manila_tempest_tests/tests/api/admin/test_services_negative.py
index b32ee5a..0ffa30d 100644
--- a/manila_tempest_tests/tests/api/admin/test_services_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_services_negative.py
@@ -30,12 +30,12 @@
         user_clients = clients.Manager()
         cls.user_shares_client = user_clients.shares_client
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_services_with_non_admin_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.user_shares_client.list_services)
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_params(self):
         # All services are expected if send the request with invalid parameter
         services = self.shares_client.list_services()
@@ -55,37 +55,37 @@
                                 key=lambda service: service['id']),
                          msg)
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_host(self):
         params = {'host': 'fake_host'}
         services_fake = self.shares_client.list_services(params)
         self.assertEqual(0, len(services_fake))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_binary(self):
         params = {'binary': 'fake_binary'}
         services_fake = self.shares_client.list_services(params)
         self.assertEqual(0, len(services_fake))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_zone(self):
         params = {'zone': 'fake_zone'}
         services_fake = self.shares_client.list_services(params)
         self.assertEqual(0, len(services_fake))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_status(self):
         params = {'status': 'fake_status'}
         services_fake = self.shares_client.list_services(params)
         self.assertEqual(0, len(services_fake))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_service_by_invalid_state(self):
         params = {'state': 'fake_state'}
         services_fake = self.shares_client.list_services(params)
         self.assertEqual(0, len(services_fake))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     @ddt.data(
         ('os-services', '2.7'),
         ('services', '2.6'),
diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances.py b/manila_tempest_tests/tests/api/admin/test_share_instances.py
index 248d145..3c2712c 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_instances.py
@@ -29,7 +29,7 @@
         super(ShareInstancesTest, cls).resource_setup()
         cls.share = cls.create_share()
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_instances_of_share_v2_3(self):
         """Test that we get only the 1 share instance back for the share."""
         share_instances = self.shares_v2_client.get_instances_of_share(
@@ -47,7 +47,7 @@
                                                    self.share['id'],
                                                    si['share_id']))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_instances_v2_3(self):
         """Test that we get at least the share instance back for the share."""
         share_instances = self.shares_v2_client.get_instances_of_share(
@@ -83,14 +83,14 @@
                          'expected %s, got %s.' % (
                              si['id'], expected_keys, actual_keys))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_instance_v2_3(self):
         self._get_share_instance('2.3')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_instance_v2_9(self):
         self._get_share_instance('2.9')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_instance_v2_10(self):
         self._get_share_instance('2.10')
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 31269a7..ee028e9 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_manage.py
@@ -160,22 +160,22 @@
                           self.shares_v2_client.get_share,
                           managed_share['id'])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_not_supported("2.5")
     def test_manage_with_os_share_manage_url(self):
         self._test_manage(share=self.shares[2], version="2.5")
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_not_supported("2.8")
     def test_manage_with_is_public_True(self):
         self._test_manage(share=self.shares[3], is_public=True, version="2.8")
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @base.skip_if_microversion_not_supported("2.16")
     def test_manage_show_user_id(self):
         self._test_manage(share=self.shares[4], version="2.16")
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_manage(self):
         # After 'unmanage' operation, share instance should be deleted.
         # Assert not related to 'manage' test, but placed here for
@@ -186,7 +186,7 @@
 
         self._test_manage(share=self.shares[0])
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_manage_invalid(self):
         # Try to manage share with invalid parameters, it should not succeed
         # because the scheduler will reject it. If it succeeds, then this test
diff --git a/manila_tempest_tests/tests/api/admin/test_share_networks.py b/manila_tempest_tests/tests/api/admin/test_share_networks.py
index cc4dad4..b3df760 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_networks.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_networks.py
@@ -76,7 +76,7 @@
             cls.sn_with_kerberos_ss["id"],
             cls.ss_kerberos["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks_all_tenants(self):
         listed = self.shares_client.list_share_networks_with_detail(
             {'all_tenants': 1})
@@ -85,7 +85,7 @@
         self.assertTrue(any(self.sn_with_kerberos_ss['id'] == sn['id']
                             for sn in listed))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks_filter_by_project_id(self):
         listed = self.shares_client.list_share_networks_with_detail(
             {'project_id': self.sn_with_kerberos_ss['project_id']})
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 df13ce9..9509cb1 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers.py
@@ -50,7 +50,7 @@
         cls.date_re = re.compile("^([0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z]{1}"
                                  "[0-9]{2}:[0-9]{2}:[0-9]{2}).*$")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_without_filters(self):
         servers = self.shares_client.list_share_servers()
         self.assertTrue(len(servers) > 0)
@@ -81,7 +81,7 @@
         # Server we used is present.
         any(s["share_network_name"] in self.sn_name_and_id for s in servers)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_with_host_filter(self):
         # Get list of share servers and remember 'host' name
         servers = self.shares_client.list_share_servers()
@@ -107,7 +107,7 @@
         for server in servers:
             self.assertEqual(server["host"], host)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_with_status_filter(self):
         # Get list of share servers
         servers = self.shares_client.list_share_servers()
@@ -133,7 +133,7 @@
         for server in servers:
             self.assertEqual(server["status"], status)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_with_project_id_filter(self):
         search_opts = {"project_id": self.share_network["project_id"]}
         servers = self.shares_client.list_share_servers(search_opts)
@@ -143,7 +143,7 @@
             self.assertEqual(server["project_id"],
                              self.share_network["project_id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_with_share_network_name_filter(self):
         search_opts = {"share_network": self.share_network["name"]}
         servers = self.shares_client.list_share_servers(search_opts)
@@ -153,7 +153,7 @@
             self.assertEqual(server["share_network_name"],
                              self.share_network["name"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_with_share_network_id_filter(self):
         search_opts = {"share_network": self.share_network["id"]}
         servers = self.shares_client.list_share_servers(search_opts)
@@ -163,7 +163,7 @@
             self.assertIn(server["share_network_name"],
                           self.sn_name_and_id)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_show_share_server(self):
         servers = self.shares_client.list_share_servers()
         server = self.shares_client.show_share_server(servers[0]["id"])
@@ -198,7 +198,7 @@
         # backend_details should be a dict
         self.assertIsInstance(server["backend_details"], dict)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_show_share_server_details(self):
         servers = self.shares_client.list_share_servers()
         details = self.shares_client.show_share_server_details(
@@ -208,7 +208,6 @@
             self.assertIsInstance(k, six.string_types)
             self.assertIsInstance(v, six.string_types)
 
-    @test.attr(type=["gate", "smoke", ])
     def _delete_share_server(self, delete_share_network):
         # Get network and subnet from existing share_network and reuse it
         # to be able to delete share_server after test ends.
@@ -266,10 +265,10 @@
                 self.shares_client.wait_for_resource_deletion(
                     sn_id=new_sn["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_share_server(self):
         self._delete_share_server(False)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_share_server_by_deletion_of_share_network(self):
         self._delete_share_server(True)
diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers_negative.py b/manila_tempest_tests/tests/api/admin/test_share_servers_negative.py
index e4712aa..cd32b10 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers_negative.py
@@ -28,66 +28,66 @@
         super(ShareServersNegativeAdminTest, cls).resource_setup()
         cls.member_shares_client = clients.Manager().shares_client
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_share_servers_with_member(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.list_share_servers)
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_show_share_server_with_member(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.show_share_server,
                           'fake_id')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_show_share_server_details_with_member(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.show_share_server_details,
                           'fake_id')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_show_share_server_with_inexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.show_share_server,
                           'fake_id')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_show_share_server_details_with_inexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.show_share_server_details,
                           'fake_id')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_wrong_filter_key(self):
         search_opts = {'fake_filter_key': 'ACTIVE'}
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_wrong_filter_value(self):
         search_opts = {'host': 123}
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_fake_status(self):
         search_opts = {"status": data_utils.rand_name("fake_status")}
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_fake_host(self):
         search_opts = {"host": data_utils.rand_name("fake_host")}
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_fake_project(self):
         search_opts = {"project_id": data_utils.rand_name("fake_project_id")}
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_share_servers_with_fake_share_network(self):
         search_opts = {
             "share_network": data_utils.rand_name("fake_share_network"),
@@ -95,13 +95,13 @@
         servers = self.shares_client.list_share_servers(search_opts)
         self.assertEqual(0, len(servers))
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_delete_share_server_with_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_server,
                           "fake_nonexistent_share_server_id")
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_delete_share_server_with_member(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.member_shares_client.delete_share_server,
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types.py b/manila_tempest_tests/tests/api/admin/test_share_types.py
index c1a17cd..5dc462d 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types.py
@@ -28,7 +28,7 @@
 @ddt.ddt
 class ShareTypesAdminTest(base.BaseSharesAdminTest):
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_share_type_create_delete(self):
         name = data_utils.rand_name("tempest-manila")
         extra_specs = self.add_required_extra_specs_to_dict()
@@ -58,7 +58,7 @@
             self.assertIn(old_key_name, share_type)
             self.assertNotIn(new_key_name, share_type)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('2.0', '2.6', '2.7')
     def test_share_type_create_get(self, version):
         self.skip_if_microversion_not_supported(version)
@@ -83,7 +83,7 @@
         # Check that backwards compatibility didn't break
         self.assertDictMatch(get["volume_type"], get["share_type"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('2.0', '2.6', '2.7')
     def test_share_type_create_list(self, version):
         self.skip_if_microversion_not_supported(version)
@@ -111,7 +111,7 @@
         for i in range(len(sts)):
             self.assertDictMatch(sts[i], vts[i])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_with_share_type(self):
 
         # Data
@@ -141,6 +141,7 @@
         self.assertEqual(st_create["share_type"]["id"], get["share_type"])
         self.assertEqual(shr_type_name, get["share_type_name"])
 
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_private_share_type_access(self):
         name = data_utils.rand_name("tempest-manila")
         extra_specs = self.add_required_extra_specs_to_dict({"key": "value", })
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
index c387765..7ee3f7b 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
@@ -40,14 +40,14 @@
         cls.shares_client.create_share_type_extra_specs(
             cls.st_id, cls.custom_extra_specs)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_get_one_share_type_extra_spec(self):
         es_get_one = self.shares_client.get_share_type_extra_spec(
             self.st_id, "key1")
 
         self.assertEqual({"key1": self.custom_extra_specs["key1"]}, es_get_one)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_get_all_share_type_extra_specs(self):
         es_get_all = self.shares_client.get_share_type_extra_specs(self.st_id)
 
@@ -72,7 +72,7 @@
         self.shares_client.create_share_type_extra_specs(
             self.st_id, self.custom_extra_specs)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_one_share_type_extra_spec(self):
         self.custom_extra_specs["key1"] = "fake_value1_updated"
 
@@ -86,7 +86,7 @@
         expected_extra_specs.update(self.required_extra_specs)
         self.assertEqual(self.custom_extra_specs, get)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_all_share_type_extra_specs(self):
         self.custom_extra_specs["key2"] = "value2_updated"
 
@@ -100,7 +100,7 @@
         expected_extra_specs.update(self.required_extra_specs)
         self.assertEqual(self.custom_extra_specs, get)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_delete_one_share_type_extra_spec(self):
         # Delete one extra spec for share type
         self.shares_client.delete_share_type_extra_spec(self.st_id, "key1")
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
index 771f240..15184cc 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
@@ -33,7 +33,7 @@
         super(ExtraSpecsAdminNegativeTest, cls).resource_setup()
         cls.member_shares_client = clients.Manager().shares_client
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_extra_specs_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -42,7 +42,7 @@
             st["share_type"]["id"],
             self.add_required_extra_specs_to_dict({"key": "new_value"}))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_extra_specs_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -50,7 +50,7 @@
             self.member_shares_client.get_share_type_extra_specs,
             st["share_type"]["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_spec_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -58,7 +58,7 @@
             self.member_shares_client.get_share_type_extra_spec,
             st["share_type"]["id"], "key")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_specs_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -66,7 +66,7 @@
             self.member_shares_client.get_share_type_extra_specs,
             st["share_type"]["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_read_extra_specs_on_share_type_with_user(self):
         st = self._create_share_type()
         share_type = self.member_shares_client.get_share_type(
@@ -78,7 +78,7 @@
                          'Incorrect extra specs visible to non-admin user; '
                          'expected %s, got %s' % (expected_keys, actual_keys))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_extra_spec_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -86,7 +86,7 @@
             self.member_shares_client.update_share_type_extra_spec,
             st["share_type"]["id"], "key", "new_value")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_extra_specs_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -94,7 +94,7 @@
             self.member_shares_client.update_share_type_extra_specs,
             st["share_type"]["id"], {"key": "new_value"})
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_extra_specs_with_user(self):
         st = self._create_share_type()
         self.assertRaises(
@@ -102,7 +102,7 @@
             self.member_shares_client.delete_share_type_extra_spec,
             st["share_type"]["id"], "key")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_too_long_key(self):
         too_big_key = "k" * 256
         st = self._create_share_type()
@@ -112,7 +112,7 @@
             st["share_type"]["id"],
             self.add_required_extra_specs_to_dict({too_big_key: "value"}))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_too_long_value_with_creation(self):
         too_big_value = "v" * 256
         st = self._create_share_type()
@@ -122,7 +122,7 @@
             st["share_type"]["id"],
             self.add_required_extra_specs_to_dict({"key": too_big_value}))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_too_long_value_with_update(self):
         too_big_value = "v" * 256
         st = self._create_share_type()
@@ -135,7 +135,7 @@
             st["share_type"]["id"],
             self.add_required_extra_specs_to_dict({"key": too_big_value}))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_set_too_long_value_with_update_of_one_key(self):
         too_big_value = "v" * 256
         st = self._create_share_type()
@@ -146,121 +146,121 @@
                           self.shares_client.update_share_type_extra_spec,
                           st["share_type"]["id"], "key", too_big_value)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_es_with_empty_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_specs, "")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_es_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_specs,
                           data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_es_with_empty_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.create_share_type_extra_specs,
                           "", {"key1": "value1", })
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_es_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.create_share_type_extra_specs,
                           data_utils.rand_name("fake"), {"key1": "value1", })
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_es_with_empty_specs(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.create_share_type_extra_specs,
                           st["share_type"]["id"], "")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_es_with_invalid_specs(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.create_share_type_extra_specs,
                           st["share_type"]["id"], {"": "value_with_empty_key"})
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_spec_with_empty_key(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_spec,
                           st["share_type"]["id"], "")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_spec_with_invalid_key(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_spec,
                           st["share_type"]["id"], data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_specs_with_empty_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_specs,
                           "")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_extra_specs_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type_extra_specs,
                           data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_es_key_with_empty_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_type_extra_spec,
                           "", "key", )
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_es_key_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_type_extra_spec,
                           data_utils.rand_name("fake"), "key", )
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_with_invalid_key(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_type_extra_spec,
                           st["share_type"]["id"], data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_spec_with_empty_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_type_extra_spec,
                           "", "key", "new_value")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_spec_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_type_extra_spec,
                           data_utils.rand_name("fake"), "key", "new_value")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_spec_with_empty_key(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_type_extra_spec,
                           st["share_type"]["id"], "", "new_value")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_with_invalid_shr_type_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_type_extra_specs,
                           data_utils.rand_name("fake"), {"key": "new_value"})
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_with_invalid_specs(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.update_share_type_extra_specs,
                           st["share_type"]["id"], {"": "new_value"})
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_spec_driver_handles_share_servers(self):
         st = self._create_share_type()
 
@@ -270,7 +270,7 @@
                           st["share_type"]["id"],
                           "driver_handles_share_servers")
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_spec_snapshot_support(self):
         st = self._create_share_type()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types_negative.py b/manila_tempest_tests/tests/api/admin/test_share_types_negative.py
index 2f41e76..77c2536 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types_negative.py
@@ -33,35 +33,35 @@
         super(ShareTypesAdminNegativeTest, cls).resource_setup()
         cls.member_shares_client = clients.Manager().shares_client
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_create_share_with_nonexistent_share_type(self):
         self.assertRaises(lib_exc.NotFound,
                           self.create_share,
                           share_type_id=data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_create_share_type_with_empty_name(self):
         self.assertRaises(lib_exc.BadRequest, self.create_share_type, '')
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_create_share_type_with_too_big_name(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.create_share_type,
                           "x" * 256)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_share_type_by_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_type,
                           data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_share_type_by_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_type,
                           data_utils.rand_name("fake"))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_duplicate_of_share_type(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.Conflict,
@@ -69,7 +69,7 @@
                           st["share_type"]["name"],
                           extra_specs=self.add_required_extra_specs_to_dict())
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_share_type_allowed_for_public(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.Conflict,
@@ -77,7 +77,7 @@
                           st["share_type"]["id"],
                           self.shares_client.tenant_id)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_remove_share_type_allowed_for_public(self):
         st = self._create_share_type()
         self.assertRaises(lib_exc.Conflict,
@@ -85,14 +85,14 @@
                           st["share_type"]["id"],
                           self.shares_client.tenant_id)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_share_type_by_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.add_access_to_share_type,
                           data_utils.rand_name("fake"),
                           self.shares_client.tenant_id)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_remove_share_type_by_nonexistent_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.remove_access_from_share_type,
diff --git a/manila_tempest_tests/tests/api/admin/test_shares_actions.py b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
index 696eecb..c8966a2 100644
--- a/manila_tempest_tests/tests/api/admin/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
@@ -82,7 +82,7 @@
                 snapshot_id=cls.snap['id'],
             ))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share(self):
 
         # get share
@@ -109,7 +109,7 @@
                                                           share["size"])
         self.assertEqual(self.share_size, int(share["size"]), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares(self):
 
         # list shares
@@ -125,7 +125,7 @@
             msg = "expected id lists %s times in share list" % (len(gen))
             self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail(self):
 
         # list shares
@@ -145,7 +145,7 @@
             msg = "expected id lists %s times in share list" % (len(gen))
             self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_metadata(self):
         filters = {'metadata': self.metadata}
 
@@ -160,7 +160,7 @@
         if CONF.share.run_snapshot_tests:
             self.assertFalse(self.shares[1]['id'] in [s['id'] for s in shares])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_extra_specs(self):
         filters = {
             "extra_specs": {
@@ -193,7 +193,7 @@
             extra_specs = self.shares_client.get_share_type_extra_specs(st_id)
             self.assertDictContainsSubset(filters["extra_specs"], extra_specs)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_share_type_id(self):
         filters = {'share_type_id': self.st['share_type']['id']}
 
@@ -223,7 +223,7 @@
         for share in self.shares:
             self.assertTrue(share['id'] in share_ids)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_host(self):
         base_share = self.shares_client.get_share(self.shares[0]['id'])
         filters = {'host': base_share['host']}
@@ -236,7 +236,7 @@
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_list_shares_with_detail_filter_by_share_network_id(self):
@@ -252,7 +252,7 @@
             self.assertEqual(
                 filters['share_network_id'], share['share_network_id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_shares_with_detail_filter_by_snapshot_id(self):
@@ -267,7 +267,7 @@
             self.assertEqual(filters['snapshot_id'], share['snapshot_id'])
         self.assertFalse(self.shares[0]['id'] in [s['id'] for s in shares])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_with_asc_sorting(self):
         filters = {'sort_key': 'created_at', 'sort_dir': 'asc'}
 
@@ -279,21 +279,21 @@
         sorted_list = [share['created_at'] for share in shares]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_existed_name(self):
         # list shares by name, at least one share is expected
         params = {"name": self.share_name}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(self.share_name, shares[0]["name"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_fake_name(self):
         # list shares by fake name, no shares are expected
         params = {"name": data_utils.rand_name("fake-nonexistent-name")}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(0, len(shares))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_active_status(self):
         # list shares by active status, at least one share is expected
         params = {"status": "available"}
@@ -302,14 +302,14 @@
         for share in shares:
             self.assertEqual(params["status"], share["status"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_fake_status(self):
         # list shares by fake status, no shares are expected
         params = {"status": 'fake'}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(0, len(shares))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_get_snapshot(self):
@@ -337,7 +337,7 @@
               "actual share_id: '%s'" % (self.shares[0]["id"], get["share_id"])
         self.assertEqual(self.shares[0]["id"], get["share_id"], msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots(self):
@@ -354,7 +354,7 @@
         msg = "expected id lists %s times in share list" % (len(gen))
         self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots_with_detail(self):
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 26ff1af..3eed886 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
@@ -125,7 +125,7 @@
                           self.shares_v2_client.get_snapshot,
                           get_snapshot['id'])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_manage(self):
         # Manage snapshot
         self._test_manage(snapshot=self.snapshot)
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
index 2aba07c..8dace66 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
@@ -62,7 +62,7 @@
             share_protocol=cls.protocol
         )
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_manage_not_found(self):
         # Manage snapshot fails
         self.assertRaises(lib_exc.NotFound,
@@ -71,7 +71,7 @@
                           'fake-vol-snap-id',
                           driver_options={})
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_manage_already_exists(self):
         # Manage already existing snapshot fails
 
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 6a75bee..ec64174 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -15,6 +15,7 @@
 
 import copy
 import inspect
+import re
 import traceback
 
 from oslo_concurrency import lockutils
@@ -35,6 +36,37 @@
 CONF = config.CONF
 LOG = log.getLogger(__name__)
 
+# Test tags related to test direction
+TAG_POSITIVE = "positive"
+TAG_NEGATIVE = "negative"
+
+# Test tags related to service involvement
+TAG_API = "api"
+TAG_BACKEND = "backend"
+TAG_API_WITH_BACKEND = "api_with_backend"
+
+TAGS_MAPPER = {
+    "p": TAG_POSITIVE,
+    "n": TAG_NEGATIVE,
+    "a": TAG_API,
+    "b": TAG_BACKEND,
+    "ab": TAG_API_WITH_BACKEND,
+}
+TAGS_PATTERN = re.compile(
+    r"(?=.*\[.*\b(%(p)s|%(n)s)\b.*\])(?=.*\[.*\b(%(a)s|%(b)s|%(ab)s)\b.*\])" %
+    TAGS_MAPPER)
+
+
+def verify_test_has_appropriate_tags(self):
+    if not TAGS_PATTERN.match(self.id()):
+        msg = (
+            "Required attributes either not set or set improperly. "
+            "Two test attributes are expected:\n"
+            " - one of '%(p)s' or '%(n)s' and \n"
+            " - one of '%(a)s', '%(b)s' or '%(ab)s'."
+        ) % TAGS_MAPPER
+        raise self.failureException(msg)
+
 
 class handle_cleanup_exceptions(object):
     """Handle exceptions raised with cleanup operations.
@@ -219,6 +251,7 @@
         super(BaseSharesTest, self).setUp()
         self.addCleanup(self.clear_isolated_creds)
         self.addCleanup(self.clear_resources)
+        verify_test_has_appropriate_tags(self)
 
     @classmethod
     def resource_cleanup(cls):
diff --git a/manila_tempest_tests/tests/api/test_availability_zones.py b/manila_tempest_tests/tests/api/test_availability_zones.py
index 8230157..b531439 100644
--- a/manila_tempest_tests/tests/api/test_availability_zones.py
+++ b/manila_tempest_tests/tests/api/test_availability_zones.py
@@ -28,14 +28,14 @@
             for key in keys:
                 self.assertIn(key, az)
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_availability_zones_legacy_url_api_v1(self):
         # NOTE(vponomaryov): remove this test with removal of availability zone
         # extension url support.
         azs = self.shares_client.list_availability_zones()
         self._list_availability_zones_assertions(azs)
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @base.skip_if_microversion_not_supported("2.6")
     def test_list_availability_zones_legacy_url_api_v2(self):
         # NOTE(vponomaryov): remove this test with removal of availability zone
@@ -44,7 +44,7 @@
             url='os-availability-zone', version='2.6')
         self._list_availability_zones_assertions(azs)
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @base.skip_if_microversion_not_supported("2.7")
     def test_list_availability_zones(self):
         azs = self.shares_v2_client.list_availability_zones(version='2.7')
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 ffe4096..601a644 100644
--- a/manila_tempest_tests/tests/api/test_availability_zones_negative.py
+++ b/manila_tempest_tests/tests/api/test_availability_zones_negative.py
@@ -22,7 +22,7 @@
 @base.skip_if_microversion_not_supported("2.7")
 class AvailabilityZonesNegativeTest(base.BaseSharesTest):
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[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
         # extension url support.
@@ -33,7 +33,7 @@
             version='2.7',
         )
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_availability_zones_api_not_found(self):
         self.assertRaises(
             lib_exc.NotFound,
diff --git a/manila_tempest_tests/tests/api/test_consistency_group_actions.py b/manila_tempest_tests/tests/api/test_consistency_group_actions.py
index 6a80590..4ae8163 100644
--- a/manila_tempest_tests/tests/api/test_consistency_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_consistency_group_actions.py
@@ -79,7 +79,7 @@
         cls.cgsnapshot2 = cls.create_cgsnapshot_wait_for_active(
             cls.cg2['id'], name=cls.cgsnap_name, description=cls.cgsnap_desc)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_consistency_group_v2_4(self):
 
         # Get consistency group
@@ -105,7 +105,7 @@
         self.assertEqual(self.cg_desc, str(consistency_group["description"]),
                          msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_v2_4(self):
 
         # Get share
@@ -141,7 +141,7 @@
             self.cg["id"], share["consistency_group_id"])
         self.assertEqual(self.cg["id"], share["consistency_group_id"], msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_consistency_groups_v2_4(self):
 
         # List consistency groups
@@ -160,7 +160,7 @@
                    cg_id)
             self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_consistency_groups_with_detail_v2_4(self):
 
         # List consistency groups
@@ -179,7 +179,7 @@
                    cg_id)
             self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_filter_shares_by_consistency_group_id_v2_4(self):
 
         shares = self.shares_v2_client.list_shares(
@@ -200,7 +200,7 @@
                       'Share %s expected in returned list, but got %s'
                       % (self.shares[0]['id'], share_ids))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_cgsnapshot_v2_4(self):
 
         # Get consistency group
@@ -226,7 +226,7 @@
         self.assertEqual(self.cg_desc, str(consistency_group["description"]),
                          msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_cgsnapshot_members_v2_4(self):
 
         cgsnapshot_members = self.shares_v2_client.list_cgsnapshot_members(
@@ -251,7 +251,7 @@
                     # self.assertEqual(share['share_type'],
                     #                  member['share_type_id'])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_consistency_group_from_populated_cgsnapshot_v2_4(self):
 
         cgsnapshot_members = self.shares_v2_client.list_cgsnapshot_members(
@@ -319,7 +319,7 @@
             description=cls.cg_desc,
         )
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_update_consistency_group_v2_4(self):
 
         # Get consistency_group
@@ -346,7 +346,7 @@
         self.assertEqual(new_name, consistency_group["name"])
         self.assertEqual(new_desc, consistency_group["description"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_create_update_read_consistency_group_with_unicode_v2_4(self):
         value1 = u'ಠ_ಠ'
         value2 = u'ಠ_ರೃ'
diff --git a/manila_tempest_tests/tests/api/test_consistency_groups.py b/manila_tempest_tests/tests/api/test_consistency_groups.py
index f611107..45a462d 100644
--- a/manila_tempest_tests/tests/api/test_consistency_groups.py
+++ b/manila_tempest_tests/tests/api/test_consistency_groups.py
@@ -32,7 +32,7 @@
 class ConsistencyGroupsTest(base.BaseSharesTest):
     """Covers consistency group functionality."""
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_populate_delete_consistency_group_v2_4(self):
         # Create a consistency group
         consistency_group = self.create_consistency_group(
@@ -65,7 +65,7 @@
                           self.shares_client.get_share,
                           share['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_create_delete_empty_cgsnapshot_v2_4(self):
         # Create base consistency group
         consistency_group = self.create_consistency_group(
@@ -98,7 +98,7 @@
                           cgsnapshot['id'],
                           version='2.4')
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_create_consistency_group_from_empty_cgsnapshot(self):
         # Create base consistency group
         consistency_group = self.create_consistency_group(
diff --git a/manila_tempest_tests/tests/api/test_consistency_groups_negative.py b/manila_tempest_tests/tests/api/test_consistency_groups_negative.py
index 74d583c..bd7a63d 100644
--- a/manila_tempest_tests/tests/api/test_consistency_groups_negative.py
+++ b/manila_tempest_tests/tests/api/test_consistency_groups_negative.py
@@ -26,6 +26,86 @@
 
 @testtools.skipUnless(CONF.share.run_consistency_group_tests,
                       'Consistency Group tests disabled.')
+class ConsistencyGroupsAPIOnlyNegativeTest(base.BaseSharesTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_delete_cg_without_passing_cg_id_v2_4(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.delete_consistency_group,
+                          '',
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_delete_cg_with_wrong_id_v2_4(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.delete_consistency_group,
+                          "wrong_consistency_group_id",
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_update_cg_with_wrong_id_v2_4(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.update_consistency_group,
+                          'wrong_consistency_group_id',
+                          name='new_name',
+                          description='new_description',
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_cg_without_passing_cg_id_v2_4(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.get_consistency_group,
+                          '',
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_filter_shares_on_invalid_cg_id_v2_4(self):
+        shares = self.shares_v2_client.list_shares(
+            detailed=True,
+            params={'consistency_group_id': 'foobar'},
+            version='2.4',
+        )
+
+        self.assertEqual(0, len(shares),
+                         'Incorrect number of shares returned. Expected 0, '
+                         'got %s.' % len(shares))
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_cgsnapshot_with_invalid_cg_id_value_v2_4(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.create_cgsnapshot_wait_for_active,
+                          'foobar',
+                          cleanup_in_class=False,
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_cg_with_invalid_share_type_id_value_v2_4(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.create_consistency_group,
+                          share_type_ids=['foobar'],
+                          cleanup_in_class=False,
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_cg_with_invalid_share_network_id_value_v2_4(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.create_consistency_group,
+                          share_network_id='foobar',
+                          cleanup_in_class=False,
+                          version='2.4')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_cg_with_invalid_source_cgsnapshot_id_value_v2_4(
+            self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.create_consistency_group,
+                          source_cgsnapshot_id='foobar',
+                          cleanup_in_class=False,
+                          version='2.4')
+
+
+@testtools.skipUnless(CONF.share.run_consistency_group_tests,
+                      'Consistency Group tests disabled.')
 class ConsistencyGroupsNegativeTest(base.BaseSharesTest):
 
     @classmethod
@@ -56,16 +136,7 @@
             name=cls.cgsnap_name,
             description=cls.cgsnap_desc)
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_cg_with_invalid_source_cgsnapshot_id_value_v2_4(
-            self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.create_consistency_group,
-                          source_cgsnapshot_id='foobar',
-                          cleanup_in_class=False,
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_nonexistent_source_cgsnapshot_id_value_v2_4(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.create_consistency_group,
@@ -73,15 +144,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_cg_with_invalid_share_network_id_value_v2_4(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.create_consistency_group,
-                          share_network_id='foobar',
-                          cleanup_in_class=False,
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_nonexistent_share_network_id_value_v2_4(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.create_consistency_group,
@@ -89,15 +152,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_cg_with_invalid_share_type_id_value_v2_4(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.create_consistency_group,
-                          share_type_ids=['foobar'],
-                          cleanup_in_class=False,
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cg_with_nonexistent_share_type_id_value_v2_4(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.create_consistency_group,
@@ -105,15 +160,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_cgsnapshot_with_invalid_cg_id_value_v2_4(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.create_cgsnapshot_wait_for_active,
-                          'foobar',
-                          cleanup_in_class=False,
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_cgsnapshot_with_nonexistent_cg_id_value_v2_4(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.create_cgsnapshot_wait_for_active,
@@ -121,44 +168,7 @@
                           cleanup_in_class=False,
                           version='2.4')
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_get_cg_with_wrong_id_v2_4(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.get_consistency_group,
-                          "wrong_consistency_group_id",
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_get_cg_without_passing_cg_id_v2_4(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.get_consistency_group,
-                          '',
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_update_cg_with_wrong_id_v2_4(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.update_consistency_group,
-                          'wrong_consistency_group_id',
-                          name='new_name',
-                          description='new_description',
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_delete_cg_with_wrong_id_v2_4(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.delete_consistency_group,
-                          "wrong_consistency_group_id",
-                          version='2.4')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_delete_cg_without_passing_cg_id_v2_4(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.delete_consistency_group,
-                          '',
-                          version='2.4')
-
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_cg_in_use_by_cgsnapshot_v2_4(self):
         # Attempt delete of share type
         self.assertRaises(lib_exc.Conflict,
@@ -166,7 +176,7 @@
                           self.consistency_group['id'],
                           version='2.4')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_share_in_use_by_cgsnapshot_v2_4(self):
         # Attempt delete of share type
         params = {'consistency_group_id': self.share['consistency_group_id']}
@@ -176,7 +186,7 @@
                           params=params,
                           version='2.4')
 
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_cg_containing_a_share_v2_4(self):
         self.assertRaises(lib_exc.Conflict,
                           self.shares_v2_client.delete_consistency_group,
@@ -187,19 +197,7 @@
             self.consistency_group['id'], version='2.4')
         self.assertEqual('available', cg['status'])
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_filter_shares_on_invalid_cg_id_v2_4(self):
-        shares = self.shares_v2_client.list_shares(
-            detailed=True,
-            params={'consistency_group_id': 'foobar'},
-            version='2.4'
-        )
-
-        self.assertEqual(0, len(shares),
-                         'Incorrect number of shares returned. Expected 0, '
-                         'got %s.' % len(shares))
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_filter_shares_on_nonexistent_cg_id_v2_4(self):
         shares = self.shares_v2_client.list_shares(
             detailed=True,
@@ -211,7 +209,7 @@
                          'Incorrect number of shares returned. Expected 0, '
                          'got %s.' % len(shares))
 
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_filter_shares_on_empty_cg_id_v2_4(self):
         consistency_group = self.create_consistency_group(
             name='tempest_cg',
diff --git a/manila_tempest_tests/tests/api/test_extensions.py b/manila_tempest_tests/tests/api/test_extensions.py
index 1d71d11..b9a6c9e 100644
--- a/manila_tempest_tests/tests/api/test_extensions.py
+++ b/manila_tempest_tests/tests/api/test_extensions.py
@@ -20,7 +20,7 @@
 
 class ExtensionsTest(base.BaseSharesTest):
 
-    @test.attr(type=["smoke", "gate"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_extensions(self):
 
         # get extensions
diff --git a/manila_tempest_tests/tests/api/test_limits.py b/manila_tempest_tests/tests/api/test_limits.py
index 5046b30..8348b26 100644
--- a/manila_tempest_tests/tests/api/test_limits.py
+++ b/manila_tempest_tests/tests/api/test_limits.py
@@ -20,7 +20,7 @@
 
 class ShareLimitsTest(base.BaseSharesTest):
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_limits_keys(self):
 
         # list limits
@@ -44,7 +44,7 @@
         ]
         [self.assertIn(key, limits["absolute"].keys()) for key in abs_keys]
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_limits_values(self):
 
         # list limits
diff --git a/manila_tempest_tests/tests/api/test_metadata.py b/manila_tempest_tests/tests/api/test_metadata.py
index 47d31f9..d075666 100644
--- a/manila_tempest_tests/tests/api/test_metadata.py
+++ b/manila_tempest_tests/tests/api/test_metadata.py
@@ -25,7 +25,7 @@
         super(SharesMetadataTest, cls).resource_setup()
         cls.share = cls.create_share()
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_in_share_creation(self):
 
         md = {u"key1": u"value1", u"key2": u"value2", }
@@ -39,7 +39,7 @@
         # verify metadata
         self.assertEqual(md, metadata)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_get_delete_metadata(self):
 
         md = {u"key3": u"value3", u"key4": u"value4", }
@@ -64,7 +64,7 @@
         get_metadata = self.shares_client.get_metadata(share["id"])
         self.assertEqual({}, get_metadata)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_and_update_metadata_by_key(self):
 
         md1 = {u"key5": u"value5", u"key6": u"value6", }
@@ -85,7 +85,7 @@
         # verify metadata
         self.assertEqual(md2, get_md)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_min_size_key(self):
         data = {"k": "value"}
 
@@ -94,7 +94,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data['k'], body_get.get('k'))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_max_size_key(self):
         max_key = "k" * 255
         data = {max_key: "value"}
@@ -105,7 +105,7 @@
         self.assertIn(max_key, body_get)
         self.assertEqual(data[max_key], body_get.get(max_key))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_min_size_value(self):
         data = {"key": "v"}
 
@@ -114,7 +114,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data['key'], body_get['key'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_max_size_value(self):
         max_value = "v" * 1023
         data = {"key": max_value}
@@ -124,7 +124,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data['key'], body_get['key'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_upd_metadata_min_size_key(self):
         data = {"k": "value"}
 
@@ -133,7 +133,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data, body_get)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_upd_metadata_max_size_key(self):
         max_key = "k" * 255
         data = {max_key: "value"}
@@ -143,7 +143,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data, body_get)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_upd_metadata_min_size_value(self):
         data = {"key": "v"}
 
@@ -152,7 +152,7 @@
         body_get = self.shares_client.get_metadata(self.share["id"])
         self.assertEqual(data, body_get)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_upd_metadata_max_size_value(self):
         max_value = "v" * 1023
         data = {"key": max_value}
diff --git a/manila_tempest_tests/tests/api/test_metadata_negative.py b/manila_tempest_tests/tests/api/test_metadata_negative.py
index 4da60a6..7aec3e5 100644
--- a/manila_tempest_tests/tests/api/test_metadata_negative.py
+++ b/manila_tempest_tests/tests/api/test_metadata_negative.py
@@ -13,12 +13,35 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import ddt
 from tempest.lib import exceptions as lib_exc  # noqa
 from tempest import test  # noqa
 
 from manila_tempest_tests.tests.api import base
 
 
+@ddt.ddt
+class SharesMetadataAPIOnlyNegativeTest(base.BaseSharesTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @ddt.data(True, False)
+    def test_try_set_metadata_to_unexisting_share(self, is_v2_client):
+        md = {u"key1": u"value1", u"key2": u"value2", }
+        client = self.shares_v2_client if is_v2_client else self.shares_client
+        self.assertRaises(lib_exc.NotFound,
+                          client.set_metadata,
+                          "wrong_share_id", md)
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @ddt.data(True, False)
+    def test_try_update_all_metadata_for_unexisting_share(self, is_v2_client):
+        md = {u"key1": u"value1", u"key2": u"value2", }
+        client = self.shares_v2_client if is_v2_client else self.shares_client
+        self.assertRaises(lib_exc.NotFound,
+                          client.update_all_metadata,
+                          "wrong_share_id", md)
+
+
 class SharesMetadataNegativeTest(base.BaseSharesTest):
 
     @classmethod
@@ -26,33 +49,19 @@
         super(SharesMetadataNegativeTest, cls).resource_setup()
         cls.share = cls.create_share()
 
-    @test.attr(type=["gate", "negative", ])
-    def test_try_set_metadata_to_unexisting_share(self):
-        md = {u"key1": u"value1", u"key2": u"value2", }
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.set_metadata,
-                          "wrong_share_id", md)
-
-    @test.attr(type=["gate", "negative", ])
-    def test_try_update_all_metadata_for_unexisting_share(self):
-        md = {u"key1": u"value1", u"key2": u"value2", }
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.update_all_metadata,
-                          "wrong_share_id", md)
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_set_metadata_with_empty_key(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.set_metadata,
                           self.share["id"], {"": "value"})
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_upd_metadata_with_empty_key(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.update_all_metadata,
                           self.share["id"], {"": "value"})
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_set_metadata_with_too_big_key(self):
         too_big_key = "x" * 256
         md = {too_big_key: "value"}
@@ -60,7 +69,7 @@
                           self.shares_client.set_metadata,
                           self.share["id"], md)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_upd_metadata_with_too_big_key(self):
         too_big_key = "x" * 256
         md = {too_big_key: "value"}
@@ -68,7 +77,7 @@
                           self.shares_client.update_all_metadata,
                           self.share["id"], md)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_set_metadata_with_too_big_value(self):
         too_big_value = "x" * 1024
         md = {"key": too_big_value}
@@ -76,7 +85,7 @@
                           self.shares_client.set_metadata,
                           self.share["id"], md)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_upd_metadata_with_too_big_value(self):
         too_big_value = "x" * 1024
         md = {"key": too_big_value}
@@ -84,7 +93,7 @@
                           self.shares_client.update_all_metadata,
                           self.share["id"], md)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_delete_unexisting_metadata(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_metadata,
diff --git a/manila_tempest_tests/tests/api/test_microversions.py b/manila_tempest_tests/tests/api/test_microversions.py
index 1de8b59..965b29b 100644
--- a/manila_tempest_tests/tests/api/test_microversions.py
+++ b/manila_tempest_tests/tests/api/test_microversions.py
@@ -33,7 +33,7 @@
     Sends HTTP GET requests to the version API to validate microversions.
     """
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_root_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request()
@@ -55,7 +55,7 @@
         self.assertEqual(_MIN_API_VERSION, v2.get('min_version'))
         self.assertEqual(_MAX_API_VERSION, v2.get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v1_no_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request(
@@ -72,7 +72,7 @@
         self.assertEqual('', version_list[0].get('min_version'))
         self.assertEqual('', version_list[0].get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v1_with_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request(
@@ -89,7 +89,7 @@
         self.assertEqual('', version_list[0].get('min_version'))
         self.assertEqual('', version_list[0].get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v2_no_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request(
@@ -107,7 +107,7 @@
         self.assertEqual(_MIN_API_VERSION, version_list[0].get('min_version'))
         self.assertEqual(_MAX_API_VERSION, version_list[0].get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v2_min_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request(
@@ -125,7 +125,7 @@
         self.assertEqual(_MIN_API_VERSION, version_list[0].get('min_version'))
         self.assertEqual(_MAX_API_VERSION, version_list[0].get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v2_max_version(self):
 
         resp, resp_body = self.shares_v2_client.send_microversion_request(
@@ -143,7 +143,7 @@
         self.assertEqual(_MIN_API_VERSION, version_list[0].get('min_version'))
         self.assertEqual(_MAX_API_VERSION, version_list[0].get('version'))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v2_invalid_version(self):
 
         resp, _ = self.shares_v2_client.send_microversion_request(
@@ -151,7 +151,7 @@
 
         self.assertEqual(400, resp.status)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_microversions_v2_unacceptable_version(self):
 
         # First get max version from the server
diff --git a/manila_tempest_tests/tests/api/test_quotas.py b/manila_tempest_tests/tests/api/test_quotas.py
index 77eae42..3388393 100644
--- a/manila_tempest_tests/tests/api/test_quotas.py
+++ b/manila_tempest_tests/tests/api/test_quotas.py
@@ -34,7 +34,7 @@
         cls.user_id = cls.shares_v2_client.user_id
         cls.tenant_id = cls.shares_v2_client.tenant_id
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_default_quotas(self, client_name):
         quotas = getattr(self, client_name).default_quotas(self.tenant_id)
@@ -44,7 +44,7 @@
         self.assertGreater(int(quotas["snapshots"]), -2)
         self.assertGreater(int(quotas["share_networks"]), -2)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_show_quotas(self, client_name):
         quotas = getattr(self, client_name).show_quotas(self.tenant_id)
@@ -54,7 +54,7 @@
         self.assertGreater(int(quotas["snapshots"]), -2)
         self.assertGreater(int(quotas["share_networks"]), -2)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_show_quotas_for_user(self, client_name):
         quotas = getattr(self, client_name).show_quotas(
diff --git a/manila_tempest_tests/tests/api/test_quotas_negative.py b/manila_tempest_tests/tests/api/test_quotas_negative.py
index bf64290..6add9ac 100644
--- a/manila_tempest_tests/tests/api/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/test_quotas_negative.py
@@ -33,18 +33,18 @@
             raise cls.skipException(msg)
         super(SharesQuotasNegativeTest, cls).resource_setup()
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_quotas_with_empty_tenant_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_v2_client.show_quotas, "")
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_reset_quotas_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_v2_client.reset_quotas,
                           self.shares_v2_client.tenant_id)
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_quotas_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_v2_client.update_quotas,
@@ -66,7 +66,7 @@
         ('os-services', '2.7', 'update_quotas'),
     )
     @ddt.unpack
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     @base.skip_if_microversion_not_supported("2.7")
     def test_show_quotas_with_wrong_versions(self, url, version, method_name):
         self.assertRaises(
diff --git a/manila_tempest_tests/tests/api/test_replication.py b/manila_tempest_tests/tests/api/test_replication.py
index f45a72e..f09eb98 100644
--- a/manila_tempest_tests/tests/api/test_replication.py
+++ b/manila_tempest_tests/tests/api/test_replication.py
@@ -127,7 +127,7 @@
 
         return access_type, access_to
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_add_delete_share_replica(self):
         # Create the replica
         share_replica = self._verify_create_replica()
@@ -135,7 +135,7 @@
         # Delete the replica
         self.delete_share_replica(share_replica["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_add_access_rule_create_replica_delete_rule(self):
         # Add access rule to the share
         access_type, access_to = self._verify_config_and_set_access_rule_data()
@@ -158,7 +158,7 @@
         self.shares_v2_client.wait_for_resource_deletion(
             rule_id=rule["id"], share_id=self.shares[0]['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_replica_add_access_rule_delete_replica(self):
         access_type, access_to = self._verify_config_and_set_access_rule_data()
         # Create the replica
@@ -175,7 +175,7 @@
         # Delete the replica
         self.delete_share_replica(share_replica["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_add_multiple_share_replicas(self):
         rep_domain, pools = self.get_pools_for_replication_domain()
         if len(pools) < 3:
@@ -204,7 +204,7 @@
         self.assertIn(share_replica1["id"], replica_ids)
         self.assertIn(share_replica2["id"], replica_ids)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_promote_in_sync_share_replica(self):
         # Test promote 'in_sync' share_replica to 'active' state
         if (self.replication_type
@@ -235,7 +235,7 @@
         self.assertEqual(constants.REPLICATION_STATE_ACTIVE,
                          promoted_replica["replica_state"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_promote_and_promote_back(self):
         # Test promote back and forth between 2 share replicas
         if (self.replication_type
@@ -277,7 +277,7 @@
             new_replica['id'], constants.REPLICATION_STATE_IN_SYNC,
             status_attr='replica_state')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_active_replication_state(self):
         # Verify the replica_state of first instance is set to active.
         replica = self.shares_v2_client.get_share_replica(self.instance_id1)
@@ -355,7 +355,7 @@
                 replica['id'], len(replica_id_list))
             self.assertEqual(1, len(replica_id_list), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_show_share_replica(self):
         replica = self.shares_v2_client.get_share_replica(self.replica1["id"])
 
@@ -366,7 +366,7 @@
                          'expected %s, got %s.' % (replica["id"],
                                                    detail_keys, actual_keys))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_detail_list_share_replicas_for_share(self):
         # List replicas for share
         replica_list = self.shares_v2_client.list_share_replicas(
@@ -378,7 +378,7 @@
         # Verify keys
         self._validate_replica_list(replica_list)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_detail_list_share_replicas_for_all_shares(self):
         # List replicas for all available shares
         replica_list = self.shares_v2_client.list_share_replicas()
@@ -390,7 +390,7 @@
         # Verify keys
         self._validate_replica_list(replica_list)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_summary_list_share_replicas_for_all_shares(self):
         # List replicas
         replica_list = self.shares_v2_client.list_share_replicas_summary()
diff --git a/manila_tempest_tests/tests/api/test_replication_negative.py b/manila_tempest_tests/tests/api/test_replication_negative.py
index 2587dc0..5258e2b 100644
--- a/manila_tempest_tests/tests/api/test_replication_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_negative.py
@@ -76,7 +76,7 @@
             raise self.skipException(
                 msg % ','.join(constants.REPLICATION_PROMOTION_CHOICES))
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_add_replica_to_share_with_no_replication_share_type(self):
         # Create share without replication type
         share = self.create_share()
@@ -85,7 +85,7 @@
                           share['id'],
                           self.replica_zone)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_add_replica_to_share_with_error_state(self):
         # Set "error" state
         self.admin_client.reset_state(
@@ -98,25 +98,13 @@
                           self.share1['id'],
                           self.replica_zone)
 
-    @test.attr(type=["gate", "negative", ])
-    def test_get_replica_by_nonexistent_id(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.get_share_replica,
-                          data_utils.rand_uuid())
-
-    @test.attr(type=["gate", "negative", ])
-    def test_try_delete_replica_by_nonexistent_id(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.delete_share_replica,
-                          data_utils.rand_uuid())
-
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_delete_last_active_replica(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_v2_client.delete_share_replica,
                           self.instance_id1)
 
-    @test.attr(type=["gate", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_try_delete_share_having_replica(self):
         self.create_share_replica(self.share1["id"], self.replica_zone,
                                   cleanup_in_class=False)
@@ -124,7 +112,7 @@
                           self.shares_v2_client.delete_share,
                           self.share1["id"])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_promote_out_of_sync_share_replica(self):
         # Test promoting an out_of_sync share_replica to active state
         self._is_replication_type_promotable()
@@ -142,7 +130,7 @@
                           self.shares_v2_client.promote_share_replica,
                           replica['id'])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_promote_active_share_replica(self):
         # Test promote active share_replica
         self._is_replication_type_promotable()
@@ -151,7 +139,7 @@
         self.shares_v2_client.promote_share_replica(self.instance_id1,
                                                     expected_status=200)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_promote_share_replica_for_writable_share_type(self):
         # Test promote active share_replica for writable share
         if self.replication_type != "writable":
@@ -167,3 +155,21 @@
 
         # Try promoting the replica
         self.shares_v2_client.promote_share_replica(replica['id'])
+
+
+@testtools.skipUnless(CONF.share.run_replication_tests,
+                      'Replication tests are disabled.')
+@base.skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+class ReplicationAPIOnlyNegativeTest(base.BaseSharesTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_replica_by_nonexistent_id(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.get_share_replica,
+                          data_utils.rand_uuid())
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_try_delete_replica_by_nonexistent_id(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.delete_share_replica,
+                          data_utils.rand_uuid())
diff --git a/manila_tempest_tests/tests/api/test_replication_snapshots.py b/manila_tempest_tests/tests/api/test_replication_snapshots.py
index 72121f1..73b1fdd 100644
--- a/manila_tempest_tests/tests/api/test_replication_snapshots.py
+++ b/manila_tempest_tests/tests/api/test_replication_snapshots.py
@@ -63,7 +63,7 @@
             'availability_zone': cls.share_zone,
         }}
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_snapshot_after_share_replica(self):
         """Test the snapshot for replicated share.
 
@@ -89,7 +89,7 @@
         self.delete_share_replica(original_replica['id'])
         self.create_share(snapshot_id=snapshot['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_snapshot_before_share_replica(self):
         """Test the snapshot for replicated share.
 
@@ -119,7 +119,7 @@
         self.delete_share_replica(original_replica['id'])
         self.create_share(snapshot_id=snapshot['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_snapshot_before_and_after_share_replica(self):
         """Test the snapshot for replicated share.
 
@@ -156,7 +156,7 @@
         self.create_share(snapshot_id=snapshot1['id'])
         self.create_share(snapshot_id=snapshot2['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_delete_snapshot_after_adding_replica(self):
         """Verify the snapshot delete.
 
@@ -176,7 +176,7 @@
         self.shares_v2_client.wait_for_resource_deletion(
             snapshot_id=snapshot["id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_replica_from_snapshot_share(self):
         """Test replica for a share that was created from snapshot."""
 
diff --git a/manila_tempest_tests/tests/api/test_rules.py b/manila_tempest_tests/tests/api/test_rules.py
index fce3e44..09ad7a4 100644
--- a/manila_tempest_tests/tests/api/test_rules.py
+++ b/manila_tempest_tests/tests/api/test_rules.py
@@ -78,7 +78,7 @@
         cls.access_type = "ip"
         cls.access_to = "2.2.2.2"
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_create_delete_access_rules_with_one_ip(self, version):
 
@@ -120,7 +120,7 @@
             self.shares_v2_client.wait_for_resource_deletion(
                 rule_id=rule["id"], share_id=self.share['id'], version=version)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_create_delete_access_rule_with_cidr(self, version):
 
@@ -162,7 +162,7 @@
             self.shares_v2_client.wait_for_resource_deletion(
                 rule_id=rule["id"], share_id=self.share['id'], version=version)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(
         "nfs" not in CONF.share.enable_ro_access_level_for_protocols,
         "RO access rule tests are disabled for NFS protocol.")
@@ -175,7 +175,7 @@
 class ShareIpRulesForCIFSTest(ShareIpRulesForNFSTest):
     protocol = "cifs"
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(
         "cifs" not in CONF.share.enable_ro_access_level_for_protocols,
         "RO access rule tests are disabled for CIFS protocol.")
@@ -200,7 +200,7 @@
         cls.access_type = "user"
         cls.access_to = CONF.share.username_for_user_rules
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_create_delete_user_rule(self, version):
 
@@ -239,7 +239,7 @@
             self.shares_v2_client.wait_for_resource_deletion(
                 rule_id=rule["id"], share_id=self.share['id'], version=version)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(
         "nfs" not in CONF.share.enable_ro_access_level_for_protocols,
         "RO access rule tests are disabled for NFS protocol.")
@@ -252,7 +252,7 @@
 class ShareUserRulesForCIFSTest(ShareUserRulesForNFSTest):
     protocol = "cifs"
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(
         "cifs" not in CONF.share.enable_ro_access_level_for_protocols,
         "RO access rule tests are disabled for CIFS protocol.")
@@ -279,7 +279,7 @@
         # certificate that it possesses.
         cls.access_to = "client1.com"
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_create_delete_cert_rule(self, version):
 
@@ -318,7 +318,7 @@
             self.shares_v2_client.wait_for_resource_deletion(
                 rule_id=rule["id"], share_id=self.share['id'], version=version)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(
         "glusterfs" not in CONF.share.enable_ro_access_level_for_protocols,
         "RO access rule tests are disabled for GLUSTERFS protocol.")
@@ -376,7 +376,7 @@
         # Provide access to a client identified by a cephx auth id.
         cls.access_to = "bob"
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @ddt.data("alice", "alice_bob", "alice bob")
     def test_create_delete_cephx_rule(self, access_to):
         rule = self.shares_v2_client.create_access_rule(
@@ -428,7 +428,7 @@
         cls.shares_v2_client.share_protocol = cls.protocol
         cls.share = cls.create_share()
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_list_access_rules(self, version):
         if (utils.is_microversion_lt(version, '2.13') and
@@ -490,7 +490,7 @@
             self.shares_v2_client.wait_for_resource_deletion(
                 rule_id=rule["id"], share_id=self.share['id'], version=version)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_access_rules_deleted_if_share_deleted(self, version):
         if (utils.is_microversion_lt(version, '2.13') and
diff --git a/manila_tempest_tests/tests/api/test_rules_negative.py b/manila_tempest_tests/tests/api/test_rules_negative.py
index a35c18a..376ba85 100644
--- a/manila_tempest_tests/tests/api/test_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_rules_negative.py
@@ -44,63 +44,63 @@
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_1(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.256")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_2(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.1.1.-")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_3(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.4/33")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_4(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.*")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_5(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.*/23")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_6(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.1|23")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_7(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.1/-1")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_target_8(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "ip", "1.2.3.1/")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_with_wrong_level(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
@@ -110,7 +110,7 @@
                           '2.2.2.2',
                           'su')
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('1.0', '2.9', LATEST_MICROVERSION)
     def test_create_duplicate_of_ip_rule(self, version):
         # test data
@@ -182,7 +182,7 @@
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_wrong_input_2(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
@@ -190,28 +190,28 @@
                           self.share["id"], "user",
                           "try+")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_empty_key(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "user", "")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_too_little_key(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "user", "abc")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_too_big_key(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "user", "a" * 33)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_wrong_input_1(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
@@ -219,7 +219,7 @@
                           self.share["id"], "user",
                           "try+")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
@@ -230,7 +230,7 @@
                           access_type="user",
                           access_to="fakeuser")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_user_with_wrong_share_id(self, client_name):
         self.assertRaises(lib_exc.NotFound,
@@ -239,7 +239,7 @@
                           access_type="user",
                           access_to="fakeuser")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_with_wrong_level(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
@@ -272,14 +272,14 @@
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_cert_with_empty_common_name(self, client_name):
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "cert", "")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_cert_with_whitespace_common_name(self,
                                                                  client_name):
@@ -287,7 +287,7 @@
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "cert", " ")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_cert_with_too_big_common_name(self,
                                                               client_name):
@@ -296,7 +296,7 @@
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "cert", "a" * 65)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     @ddt.data('shares_client', 'shares_v2_client')
@@ -307,7 +307,7 @@
                           access_type="cert",
                           access_to="fakeclient1.com")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_cert_with_wrong_share_id(self, client_name):
         self.assertRaises(lib_exc.NotFound,
@@ -334,21 +334,21 @@
         cls.access_type = "cephx"
         cls.access_to = "david"
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('jane.doe', u"bj\u00F6rn")
     def test_create_access_rule_cephx_with_invalid_cephx_id(self, access_to):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_v2_client.create_access_rule,
                           self.share["id"], self.access_type, access_to)
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_access_rule_cephx_with_wrong_level(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_v2_client.create_access_rule,
                           self.share["id"], self.access_type, self.access_to,
                           access_level="su")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_create_access_rule_cephx_with_unsupported_access_level_ro(self):
         rule = self.shares_v2_client.create_access_rule(
             self.share["id"], self.access_type, self.access_to,
@@ -359,6 +359,18 @@
             self.share['id'], rule['id'], "active")
 
 
+def skip_if_cephx_access_type_not_supported_by_client(self, client):
+    if client == 'shares_client':
+        version = '1.0'
+    else:
+        version = LATEST_MICROVERSION
+    if (CONF.share.enable_cephx_rules_for_protocols and
+            utils.is_microversion_lt(version, '2.13')):
+        msg = ("API version %s does not support cephx access type, "
+               "need version greater than 2.13." % version)
+        raise self.skipException(msg)
+
+
 @ddt.ddt
 class ShareRulesNegativeTest(base.BaseSharesTest):
     # Tests independent from rule type and share protocol
@@ -382,47 +394,40 @@
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
 
-    def skip_if_cephx_access_type_not_supported_by_client(self, client):
-        if client == 'shares_client':
-            version = '1.0'
-        else:
-            version = LATEST_MICROVERSION
-        if (CONF.share.enable_cephx_rules_for_protocols and
-                utils.is_microversion_lt(version, '2.13')):
-            msg = ("API version %s does not support cephx access type, "
-                   "need version greater than 2.13." % version)
-            raise self.skipException(msg)
-
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_delete_access_rule_with_wrong_id(self, client_name):
-        self.skip_if_cephx_access_type_not_supported_by_client(client_name)
+        skip_if_cephx_access_type_not_supported_by_client(self, client_name)
         self.assertRaises(lib_exc.NotFound,
                           getattr(self, client_name).delete_access_rule,
                           self.share["id"], "wrong_rule_id")
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     def test_create_access_rule_ip_with_wrong_type(self, client_name):
-        self.skip_if_cephx_access_type_not_supported_by_client(client_name)
+        skip_if_cephx_access_type_not_supported_by_client(self, client_name)
         self.assertRaises(lib_exc.BadRequest,
                           getattr(self, client_name).create_access_rule,
                           self.share["id"], "wrong_type", "1.2.3.4")
 
-    @test.attr(type=["negative", "gate", ])
-    @ddt.data('shares_client', 'shares_v2_client')
-    def test_create_access_rule_ip_with_wrong_share_id(self, client_name):
-        self.skip_if_cephx_access_type_not_supported_by_client(client_name)
-        self.assertRaises(lib_exc.NotFound,
-                          getattr(self, client_name).create_access_rule,
-                          "wrong_share_id")
-
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @ddt.data('shares_client', 'shares_v2_client')
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_create_access_rule_ip_to_snapshot(self, client_name):
-        self.skip_if_cephx_access_type_not_supported_by_client(client_name)
+        skip_if_cephx_access_type_not_supported_by_client(self, client_name)
         self.assertRaises(lib_exc.NotFound,
                           getattr(self, client_name).create_access_rule,
                           self.snap["id"])
+
+
+@ddt.ddt
+class ShareRulesAPIOnlyNegativeTest(base.BaseSharesTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @ddt.data('shares_client', 'shares_v2_client')
+    def test_create_access_rule_ip_with_wrong_share_id(self, client_name):
+        skip_if_cephx_access_type_not_supported_by_client(self, client_name)
+        self.assertRaises(lib_exc.NotFound,
+                          getattr(self, client_name).create_access_rule,
+                          "wrong_share_id")
diff --git a/manila_tempest_tests/tests/api/test_scheduler_stats_negative.py b/manila_tempest_tests/tests/api/test_scheduler_stats_negative.py
index dd7a498..c9aac84 100644
--- a/manila_tempest_tests/tests/api/test_scheduler_stats_negative.py
+++ b/manila_tempest_tests/tests/api/test_scheduler_stats_negative.py
@@ -21,12 +21,12 @@
 
 class SchedulerStatsNegativeTest(base.BaseSharesTest):
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_pools_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.list_pools)
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_pools_detailed_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.list_pools,
diff --git a/manila_tempest_tests/tests/api/test_security_services.py b/manila_tempest_tests/tests/api/test_security_services.py
index c0d67ec..a156cac 100644
--- a/manila_tempest_tests/tests/api/test_security_services.py
+++ b/manila_tempest_tests/tests/api/test_security_services.py
@@ -27,7 +27,7 @@
 
 class SecurityServiceListMixin(object):
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_security_services(self):
         listed = self.shares_client.list_security_services()
         self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
@@ -38,7 +38,7 @@
         keys = ["name", "id", "status", "type", ]
         [self.assertIn(key, s_s.keys()) for s_s in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_security_services_with_detail(self):
         listed = self.shares_client.list_security_services(detailed=True)
         self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
@@ -53,7 +53,7 @@
         ]
         [self.assertIn(key, s_s.keys()) for s_s in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_list_security_services_filter_by_share_network(self):
@@ -79,7 +79,7 @@
         keys = ["name", "id", "status", "type", ]
         [self.assertIn(key, s_s.keys()) for s_s in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_security_services_detailed_filter_by_ss_attributes(self):
         search_opts = {
             'name': 'ss_ldap',
@@ -122,7 +122,7 @@
         self.ss_kerberos = self.create_security_service(
             'kerberos', **ss_kerberos_data)
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_create_delete_security_service(self):
         data = self.generate_security_service_data()
         self.service_names = ["ldap", "kerberos", "active_directory"]
@@ -132,7 +132,7 @@
             self.assertEqual(ss_name, ss["type"])
             self.shares_client.delete_security_service(ss["id"])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_get_security_service(self):
         data = self.generate_security_service_data()
         ss = self.create_security_service(**data)
@@ -141,7 +141,7 @@
         get = self.shares_client.get_security_service(ss["id"])
         self.assertDictContainsSubset(data, get)
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_security_service(self):
         data = self.generate_security_service_data()
         ss = self.create_security_service(**data)
@@ -155,7 +155,7 @@
         self.assertDictContainsSubset(upd_data, updated)
         self.assertDictContainsSubset(upd_data, get)
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_try_update_valid_keys_sh_server_exists(self):
@@ -193,7 +193,7 @@
             ss["id"], **update_data)
         self.assertDictContainsSubset(update_data, updated)
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_security_services_filter_by_invalid_opt(self):
         listed = self.shares_client.list_security_services(
             params={'fake_opt': 'some_value'})
diff --git a/manila_tempest_tests/tests/api/test_security_services_mapping.py b/manila_tempest_tests/tests/api/test_security_services_mapping.py
index 7173e22..33d8ccb 100644
--- a/manila_tempest_tests/tests/api/test_security_services_mapping.py
+++ b/manila_tempest_tests/tests/api/test_security_services_mapping.py
@@ -43,7 +43,7 @@
         # Add security service to share network
         self.cl.add_sec_service_to_share_network(self.sn["id"], self.ss["id"])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_map_ss_to_sn_and_list(self):
 
         # List security services for share network
@@ -52,14 +52,14 @@
         for key in ["status", "id", "name"]:
             self.assertIn(self.ss[key], ls[0][key])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_map_ss_to_sn_and_delete(self):
 
         # Remove security service from share network
         self.cl.remove_sec_service_from_share_network(
             self.sn["id"], self.ss["id"])
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_remap_ss_to_sn(self):
 
         # Remove security service from share network
diff --git a/manila_tempest_tests/tests/api/test_security_services_mapping_negative.py b/manila_tempest_tests/tests/api/test_security_services_mapping_negative.py
index 6a5f18f..15010da 100644
--- a/manila_tempest_tests/tests/api/test_security_services_mapping_negative.py
+++ b/manila_tempest_tests/tests/api/test_security_services_mapping_negative.py
@@ -35,62 +35,62 @@
         cls.ss = cls.create_security_service(cleanup_in_class=True)
         cls.cl = cls.shares_client
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_sec_service_twice_to_share_network(self):
         self.cl.add_sec_service_to_share_network(self.sn["id"], self.ss["id"])
         self.assertRaises(lib_exc.Conflict,
                           self.cl.add_sec_service_to_share_network,
                           self.sn["id"], self.ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_nonexistant_sec_service_to_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.add_sec_service_to_share_network,
                           self.sn["id"], "wrong_ss_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_empty_sec_service_id_to_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.add_sec_service_to_share_network,
                           self.sn["id"], "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_sec_service_to_nonexistant_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.add_sec_service_to_share_network,
                           "wrong_sn_id", self.ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_add_sec_service_to_share_network_with_empty_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.add_sec_service_to_share_network,
                           "", self.ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_list_sec_services_for_nonexistant_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.list_sec_services_for_share_network,
                           "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_delete_nonexistant_sec_service_from_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.remove_sec_service_from_share_network,
                           self.sn["id"], "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_delete_sec_service_from_nonexistant_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.remove_sec_service_from_share_network,
                           "wrong_id", self.ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_delete_nonexistant_ss_from_nonexistant_sn(self):
         self.assertRaises(lib_exc.NotFound,
                           self.cl.remove_sec_service_from_share_network,
                           "wrong_id", "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_delete_ss_from_sn_used_by_share_server(self):
@@ -122,7 +122,7 @@
                           fresh_sn["id"],
                           self.ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_map_two_ss_with_same_type_to_sn(self):
         # create share network
         data = self.generate_share_network_data()
@@ -147,7 +147,7 @@
                           self.cl.add_sec_service_to_share_network,
                           sn["id"], security_services[1]["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_ss_that_assigned_to_sn(self):
         # create share network
         data = self.generate_share_network_data()
diff --git a/manila_tempest_tests/tests/api/test_security_services_negative.py b/manila_tempest_tests/tests/api/test_security_services_negative.py
index 80139b8..f7966f5 100644
--- a/manila_tempest_tests/tests/api/test_security_services_negative.py
+++ b/manila_tempest_tests/tests/api/test_security_services_negative.py
@@ -28,52 +28,52 @@
 
 class SecurityServicesNegativeTest(base.BaseSharesTest):
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_security_service_with_empty_type(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.create_security_service, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_security_service_with_wrong_type(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.create_security_service,
                           "wrong_type")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_security_service_without_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_security_service, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_security_service_with_wrong_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_security_service,
                           "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_security_service_without_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_security_service, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_security_service_with_wrong_type(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_security_service,
                           "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_nonexistant_security_service(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_security_service,
                           "wrong_id", name="name")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_security_service_with_empty_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_security_service,
                           "", name="name")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_try_update_invalid_keys_sh_server_exists(self):
@@ -108,7 +108,7 @@
                           ss["id"],
                           user="new_user")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_get_deleted_security_service(self):
         data = self.generate_security_service_data()
         ss = self.create_security_service(**data)
@@ -121,7 +121,7 @@
                           self.shares_client.get_security_service,
                           ss["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_security_services_all_tenants(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.list_security_services,
diff --git a/manila_tempest_tests/tests/api/test_share_networks.py b/manila_tempest_tests/tests/api/test_share_networks.py
index 83c4dd5..bd3698b 100644
--- a/manila_tempest_tests/tests/api/test_share_networks.py
+++ b/manila_tempest_tests/tests/api/test_share_networks.py
@@ -26,6 +26,7 @@
 class ShareNetworkListMixin(object):
 
     @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks(self):
         listed = self.shares_client.list_share_networks()
         any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
@@ -34,7 +35,7 @@
         keys = ["name", "id"]
         [self.assertIn(key, sn.keys()) for sn in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks_with_detail(self):
         listed = self.shares_client.list_share_networks_with_detail()
         any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
@@ -48,7 +49,7 @@
         ]
         [self.assertIn(key, sn.keys()) for sn in listed for key in keys]
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks_filter_by_ss(self):
         listed = self.shares_client.list_share_networks_with_detail(
             {'security_service_id': self.ss_ldap['id']})
@@ -60,7 +61,7 @@
             self.assertTrue(any(ss['id'] == self.ss_ldap['id']
                                 for ss in ss_list))
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_list_share_networks_all_filter_opts(self):
         valid_filter_opts = {
             'created_before': '2002-10-10',
@@ -140,7 +141,7 @@
             cls.sn_with_kerberos_ss["id"],
             cls.ss_kerberos["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_create_delete_share_network(self):
         # generate data for share network
         data = self.generate_share_network_data()
@@ -152,7 +153,7 @@
         # Delete share_network
         self.shares_client.delete_share_network(created["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_get_share_network(self):
         get = self.shares_client.get_share_network(self.sn_with_ldap_ss["id"])
         self.assertEqual('2002-02-02T00:00:00.000000', get['created_at'])
@@ -160,7 +161,7 @@
         del data['created_at']
         self.assertDictContainsSubset(data, get)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_update_share_network(self):
         update_data = self.generate_share_network_data()
         updated = self.shares_client.update_share_network(
@@ -168,7 +169,7 @@
             **update_data)
         self.assertDictContainsSubset(update_data, updated)
 
-    @test.attr(type=["gate", "smoke"])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_update_valid_keys_sh_server_exists(self):
@@ -181,7 +182,7 @@
             self.shares_client.share_network_id, **update_dict)
         self.assertDictContainsSubset(update_dict, updated)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_recreate_share_network(self):
         # generate data for share network
         data = self.generate_share_network_data()
@@ -200,7 +201,7 @@
         # Delete second share network
         self.shares_client.delete_share_network(sn2["id"])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API])
     def test_create_two_share_networks_with_same_net_and_subnet(self):
         # generate data for share network
         data = self.generate_share_network_data()
diff --git a/manila_tempest_tests/tests/api/test_share_networks_negative.py b/manila_tempest_tests/tests/api/test_share_networks_negative.py
index d337d4a..f9b341c 100644
--- a/manila_tempest_tests/tests/api/test_share_networks_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_networks_negative.py
@@ -25,39 +25,39 @@
 
 class ShareNetworksNegativeTest(base.BaseSharesTest):
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_share_network_without_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_network, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_share_network_with_wrong_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_share_network, "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_share_network_without_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_network, "")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_share_network_with_wrong_type(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share_network, "wrong_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_nonexistant_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_network,
                           "wrong_id", name="name")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_update_share_network_with_empty_id(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.update_share_network,
                           "", name="name")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_try_update_invalid_keys_sh_server_exists(self):
@@ -68,7 +68,7 @@
                           self.shares_client.share_network_id,
                           neutron_net_id="new_net_id")
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_get_deleted_share_network(self):
         data = self.generate_share_network_data()
         sn = self.create_share_network(**data)
@@ -81,33 +81,33 @@
                           self.shares_client.get_security_service,
                           sn["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_share_networks_all_tenants(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.list_share_networks_with_detail,
                           params={'all_tenants': 1})
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_share_networks_project_id(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.list_share_networks_with_detail,
                           params={'project_id': 'some_project'})
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_share_networks_wrong_created_since_value(self):
         self.assertRaises(
             lib_exc.BadRequest,
             self.shares_client.list_share_networks_with_detail,
             params={'created_since': '2014-10-23T08:31:58.000000'})
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_list_share_networks_wrong_created_before_value(self):
         self.assertRaises(
             lib_exc.BadRequest,
             self.shares_client.list_share_networks_with_detail,
             params={'created_before': '2014-10-23T08:31:58.000000'})
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(not CONF.share.multitenancy_enabled,
                       'Can run only with drivers that do handle share servers '
                       'creation. Skipping.')
diff --git a/manila_tempest_tests/tests/api/test_share_types_negative.py b/manila_tempest_tests/tests/api/test_share_types_negative.py
index 9be479b..5273d65 100644
--- a/manila_tempest_tests/tests/api/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_types_negative.py
@@ -36,27 +36,27 @@
         super(ShareTypesNegativeTest, cls).resource_setup()
         cls.st = cls._create_share_type()
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_create_share_type_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.create_share_type,
                           data_utils.rand_name("used_user_creds"),
                           client=self.shares_client)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_delete_share_type_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.delete_share_type,
                           self.st["share_type"]["id"])
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_add_access_to_share_type_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.add_access_to_share_type,
                           self.st['share_type']['id'],
                           self.shares_client.tenant_id)
 
-    @test.attr(type=["gate", "smoke", "negative"])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_try_remove_access_from_share_type_with_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.remove_access_from_share_type,
diff --git a/manila_tempest_tests/tests/api/test_shares.py b/manila_tempest_tests/tests/api/test_shares.py
index 760f2f0..1da57e4 100644
--- a/manila_tempest_tests/tests/api/test_shares.py
+++ b/manila_tempest_tests/tests/api/test_shares.py
@@ -36,7 +36,7 @@
             raise cls.skipException(message)
         cls.share = cls.create_share(cls.protocol)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_create_get_delete_share(self):
 
         share = self.create_share(self.protocol)
@@ -97,7 +97,7 @@
                           self.shares_v2_client.get_share,
                           share['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_create_delete_snapshot(self):
@@ -119,7 +119,7 @@
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.get_snapshot, snap['id'])
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_create_share_from_snapshot(self):
@@ -143,7 +143,7 @@
               "source of share %s" % (snap["id"], get["snapshot_id"])
         self.assertEqual(get["snapshot_id"], snap["id"], msg)
 
-    @test.attr(type=["gate", "smoke", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipIf(not CONF.share.multitenancy_enabled,
                       "Only for multitenancy.")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
diff --git a/manila_tempest_tests/tests/api/test_shares_actions.py b/manila_tempest_tests/tests/api/test_shares_actions.py
index b00cef4..16b8b58 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions.py
@@ -119,45 +119,45 @@
                                                           share["size"])
         self.assertEqual(self.share_size, int(share["size"]), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_v2_1(self):
         self._get_share('2.1')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_get_share_with_snapshot_support_key(self):
         self._get_share('2.2')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.4')
     def test_get_share_with_consistency_groups_keys(self):
         self._get_share('2.4')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.6')
     def test_get_share_with_share_type_name_key(self):
         self._get_share('2.6')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.9')
     def test_get_share_export_locations_removed(self):
         self._get_share('2.9')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.10')
     def test_get_share_with_access_rules_status(self):
         self._get_share('2.10')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.11')
     def test_get_share_with_replication_type_key(self):
         self._get_share('2.11')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.16')
     def test_get_share_with_user_id(self):
         self._get_share('2.16')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares(self):
 
         # list shares
@@ -209,45 +209,45 @@
             msg = "expected id lists %s times in share list" % (len(gen))
             self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_v2_1(self):
         self._list_shares_with_detail('2.1')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_and_snapshot_support_key(self):
         self._list_shares_with_detail('2.2')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.4')
     def test_list_shares_with_detail_consistency_groups_keys(self):
         self._list_shares_with_detail('2.4')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.6')
     def test_list_shares_with_detail_share_type_name_key(self):
         self._list_shares_with_detail('2.6')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.9')
     def test_list_shares_with_detail_export_locations_removed(self):
         self._list_shares_with_detail('2.9')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.10')
     def test_list_shares_with_detail_with_access_rules_status(self):
         self._list_shares_with_detail('2.10')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.11')
     def test_list_shares_with_detail_replication_type_key(self):
         self._list_shares_with_detail('2.11')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @utils.skip_if_microversion_not_supported('2.16')
     def test_list_shares_with_user_id(self):
         self._list_shares_with_detail('2.16')
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_metadata(self):
         filters = {'metadata': self.metadata}
 
@@ -262,7 +262,7 @@
         if CONF.share.run_snapshot_tests:
             self.assertFalse(self.shares[1]['id'] in [s['id'] for s in shares])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_host(self):
         base_share = self.shares_client.get_share(self.shares[0]['id'])
         filters = {'host': base_share['host']}
@@ -275,7 +275,7 @@
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_list_shares_with_detail_filter_by_share_network_id(self):
@@ -291,7 +291,7 @@
             self.assertEqual(
                 filters['share_network_id'], share['share_network_id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_shares_with_detail_filter_by_snapshot_id(self):
@@ -306,7 +306,7 @@
             self.assertEqual(filters['snapshot_id'], share['snapshot_id'])
         self.assertFalse(self.shares[0]['id'] in [s['id'] for s in shares])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_with_asc_sorting(self):
         filters = {'sort_key': 'created_at', 'sort_dir': 'asc'}
 
@@ -318,21 +318,21 @@
         sorted_list = [share['created_at'] for share in shares]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_existed_name(self):
         # list shares by name, at least one share is expected
         params = {"name": self.share_name}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(self.share_name, shares[0]["name"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_fake_name(self):
         # list shares by fake name, no shares are expected
         params = {"name": data_utils.rand_name("fake-nonexistent-name")}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(0, len(shares))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_active_status(self):
         # list shares by active status, at least one share is expected
         params = {"status": "available"}
@@ -341,14 +341,14 @@
         for share in shares:
             self.assertEqual(params["status"], share["status"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_fake_status(self):
         # list shares by fake status, no shares are expected
         params = {"status": 'fake'}
         shares = self.shares_client.list_shares_with_detail(params)
         self.assertEqual(0, len(shares))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_all_tenants(self):
         # non-admin user can get shares only from his project
         params = {"all_tenants": 1}
@@ -361,7 +361,7 @@
         for share in shares:
             self.assertEqual(project_id, share["project_id"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_public_with_detail(self):
         public_share = self.create_share(
             name='public_share',
@@ -396,7 +396,7 @@
 
         self.assertFalse(any([s["id"] == private_share["id"] for s in shares]))
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_get_snapshot(self):
@@ -424,7 +424,7 @@
               "actual share_id: '%s'" % (self.shares[0]["id"], get["share_id"])
         self.assertEqual(self.shares[0]["id"], get["share_id"], msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots(self):
@@ -441,7 +441,7 @@
         msg = "expected id lists %s times in share list" % (len(gen))
         self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots_with_detail(self):
@@ -460,7 +460,7 @@
         msg = "expected id lists %s times in share list" % (len(gen))
         self.assertEqual(1, len(gen), msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots_with_detail_use_limit(self):
@@ -486,7 +486,7 @@
         self.assertEqual(1, len(snaps['snapshots']))
         self.assertEqual(self.snap['id'], snaps['snapshots'][0]['id'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots_with_detail_filter_by_status_and_name(self):
@@ -502,7 +502,7 @@
             self.assertEqual(filters['status'], snap['status'])
             self.assertEqual(filters['name'], snap['name'])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_list_snapshots_with_detail_and_asc_sorting(self):
@@ -517,7 +517,7 @@
         sorted_list = [snap['share_id'] for snap in snaps]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
@@ -540,7 +540,7 @@
         )
         self.assertEqual(new_size, share_get['size'], msg)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_shrink_tests,
         "Share shrink tests are disabled.")
@@ -586,7 +586,7 @@
             cls.snap = cls.create_snapshot_wait_for_active(
                 cls.share["id"], cls.snap_name, cls.snap_desc)
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_update_share(self):
 
         # get share
@@ -610,7 +610,7 @@
         self.assertEqual(new_desc, share["description"])
         self.assertTrue(share["is_public"])
 
-    @test.attr(type=["gate", ])
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_rename_snapshot(self):
diff --git a/manila_tempest_tests/tests/api/test_shares_actions_negative.py b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
index 891c491..919b6e5 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
@@ -32,7 +32,7 @@
             size=1,
         )
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
@@ -50,7 +50,7 @@
                           self.share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
@@ -63,7 +63,7 @@
                           self.share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
@@ -76,7 +76,7 @@
                           self.share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
@@ -94,7 +94,7 @@
                           share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_shrink_tests,
         "Share shrink tests are disabled.")
@@ -107,7 +107,7 @@
                           self.share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_shrink_tests,
         "Share shrink tests are disabled.")
@@ -120,7 +120,7 @@
                           self.share['id'],
                           new_size)
 
-    @test.attr(type=["negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(
         CONF.share.run_shrink_tests,
         "Share shrink tests are disabled.")
diff --git a/manila_tempest_tests/tests/api/test_shares_negative.py b/manila_tempest_tests/tests/api/test_shares_negative.py
index 0e91302..a8a4a6b 100644
--- a/manila_tempest_tests/tests/api/test_shares_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_negative.py
@@ -36,90 +36,13 @@
             metadata={'key': 'value'}
         )
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_share_with_invalid_protocol(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.shares_client.create_share,
-                          share_protocol="nonexistent_protocol")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_share_with_wrong_public_value(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.shares_client.create_share, is_public='truebar')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_update_share_with_wrong_public_value(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.update_share, self.share["id"],
                           is_public="truebar")
 
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_get_share_with_wrong_id(self):
-        self.assertRaises(lib_exc.NotFound, self.shares_client.get_share,
-                          "wrong_share_id")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_get_share_without_passing_share_id(self):
-        # Should not be able to get share when empty ID is passed
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.get_share, '')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_list_shares_nonadmin_with_nonexistent_share_server_filter(self):
-        # filtering by share server allowed only for admins by default
-        self.assertRaises(lib_exc.Forbidden,
-                          self.shares_client.list_shares_with_detail,
-                          {'share_server_id': 'fake_share_server_id'})
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_delete_share_with_wrong_id(self):
-        self.assertRaises(lib_exc.NotFound, self.shares_client.delete_share,
-                          "wrong_share_id")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_delete_share_without_passing_share_id(self):
-        # Should not be able to delete share when empty ID is passed
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.delete_share, '')
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    @testtools.skipUnless(CONF.share.run_snapshot_tests,
-                          "Snapshot tests are disabled.")
-    def test_create_snapshot_with_wrong_id(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.create_snapshot,
-                          "wrong_share_id")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    @testtools.skipUnless(CONF.share.run_snapshot_tests,
-                          "Snapshot tests are disabled.")
-    def test_delete_snapshot_with_wrong_id(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_client.delete_snapshot,
-                          "wrong_share_id")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_share_with_invalid_size(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.shares_client.create_share, size="#$%")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_share_with_out_passing_size(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.shares_client.create_share, size="")
-
-    @test.attr(type=["negative", "smoke", "gate", ])
-    def test_create_share_with_zero_size(self):
-        self.assertRaises(lib_exc.BadRequest,
-                          self.shares_client.create_share, size=0)
-
-    @test.attr(type=["negative", "gate", ])
-    def test_create_share_non_existent_az(self):
-        self.assertRaises(lib_exc.NotFound,
-                          self.shares_v2_client.create_share,
-                          availability_zone='fake_az')
-
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_try_delete_share_with_existing_snapshot(self):
@@ -135,7 +58,7 @@
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.delete_share, share["id"])
 
-    @test.attr(type=["negative", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_create_share_from_snap_with_less_size(self):
@@ -160,7 +83,7 @@
                           size=1, snapshot_id=snap["id"],
                           cleanup_in_class=False)
 
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(not CONF.share.multitenancy_enabled,
                       "Only for multitenancy.")
     def test_create_share_with_nonexistant_share_network(self):
@@ -168,7 +91,7 @@
                           self.shares_client.create_share,
                           share_network_id="wrong_sn_id")
 
-    @test.attr(type=["negative", "smoke", "gate", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     @testtools.skipIf(not CONF.share.multitenancy_enabled,
                       "Only for multitenancy.")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
@@ -203,14 +126,14 @@
             snapshot_id=snap["id"],
         )
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_update_other_tenants_public_share(self):
         isolated_client = self.get_client_with_isolated_creds(
             type_of_creds='alt')
         self.assertRaises(lib_exc.Forbidden, isolated_client.update_share,
                           self.share["id"], name="new_name")
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_other_tenants_public_share(self):
         isolated_client = self.get_client_with_isolated_creds(
             type_of_creds='alt')
@@ -218,7 +141,7 @@
                           isolated_client.delete_share,
                           self.share['id'])
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_set_metadata_of_other_tenants_public_share(self):
         isolated_client = self.get_client_with_isolated_creds(
             type_of_creds='alt')
@@ -227,7 +150,7 @@
                           self.share['id'],
                           {'key': 'value'})
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_update_metadata_of_other_tenants_public_share(self):
         isolated_client = self.get_client_with_isolated_creds(
             type_of_creds='alt')
@@ -236,7 +159,7 @@
                           self.share['id'],
                           {'key': 'value'})
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
     def test_delete_metadata_of_other_tenants_public_share(self):
         isolated_client = self.get_client_with_isolated_creds(
             type_of_creds='alt')
@@ -245,21 +168,101 @@
                           self.share['id'],
                           'key')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
-    def test_list_by_share_server_by_user(self):
-        self.assertRaises(lib_exc.Forbidden,
-                          self.shares_client.list_shares,
-                          params={'share_server_id': 12345})
 
-    @test.attr(type=["gate", "smoke", "negative", ])
+class SharesAPIOnlyNegativeTest(base.BaseSharesTest):
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_unmanage_share_by_user(self):
+        self.assertRaises(lib_exc.Forbidden,
+                          self.shares_client.unmanage_share,
+                          'fake-id')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
     def test_manage_share_by_user(self):
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.manage_share,
                           'fake-host', 'nfs', '/export/path',
                           'fake-type')
 
-    @test.attr(type=["gate", "smoke", "negative", ])
-    def test_unmanage_share_by_user(self):
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_list_by_share_server_by_user(self):
         self.assertRaises(lib_exc.Forbidden,
-                          self.shares_client.unmanage_share,
-                          'fake-id')
+                          self.shares_client.list_shares,
+                          params={'share_server_id': 12345})
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_non_existent_az(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.create_share,
+                          availability_zone='fake_az')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_with_zero_size(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.shares_client.create_share, size=0)
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_with_invalid_size(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.shares_client.create_share, size="#$%")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_with_out_passing_size(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.shares_client.create_share, size="")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    def test_delete_snapshot_with_wrong_id(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.delete_snapshot,
+                          "wrong_share_id")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    def test_create_snapshot_with_wrong_id(self):
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.create_snapshot,
+                          "wrong_share_id")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_with_invalid_protocol(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.shares_client.create_share,
+                          share_protocol="nonexistent_protocol")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_create_share_with_wrong_public_value(self):
+        self.assertRaises(lib_exc.BadRequest,
+                          self.shares_client.create_share, is_public='truebar')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_share_with_wrong_id(self):
+        self.assertRaises(lib_exc.NotFound, self.shares_client.get_share,
+                          "wrong_share_id")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_get_share_without_passing_share_id(self):
+        # Should not be able to get share when empty ID is passed
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.get_share, '')
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_list_shares_nonadmin_with_nonexistent_share_server_filter(self):
+        # filtering by share server allowed only for admins by default
+        self.assertRaises(lib_exc.Forbidden,
+                          self.shares_client.list_shares_with_detail,
+                          {'share_server_id': 'fake_share_server_id'})
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_delete_share_with_wrong_id(self):
+        self.assertRaises(lib_exc.NotFound, self.shares_client.delete_share,
+                          "wrong_share_id")
+
+    @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
+    def test_delete_share_without_passing_share_id(self):
+        # Should not be able to delete share when empty ID is passed
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_client.delete_share, '')
diff --git a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
index 7dde3ad..ef6fc24 100644
--- a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
+++ b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
@@ -19,6 +19,7 @@
 from tempest.lib import exceptions
 from tempest import test  # noqa
 
+from manila_tempest_tests.tests.api import base
 from manila_tempest_tests.tests.scenario import manager_share as manager
 from manila_tempest_tests import utils
 
@@ -43,6 +44,7 @@
 
     def setUp(self):
         super(ShareBasicOpsBase, self).setUp()
+        base.verify_test_has_appropriate_tags(self)
         # Setup image and flavor the test instance
         # Support both configured and injected values
         if not hasattr(self, 'flavor_ref'):
@@ -169,6 +171,7 @@
                            cleanup=cleanup)
 
     @test.services('compute', 'network')
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_mount_share_one_vm(self):
         self.security_group = self._create_security_group()
         self.create_share()
@@ -190,6 +193,7 @@
         self.servers_client.delete_server(instance['id'])
 
     @test.services('compute', 'network')
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_read_write_two_vms(self):
         """Boots two vms and writes/reads data on it."""
         test_data = "Some test data to write"
@@ -225,6 +229,7 @@
         self.assertEqual(test_data, data)
 
     @test.services('compute', 'network')
+    @test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
     def test_migration_files(self):
 
         if self.protocol == "CIFS":
