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 3df0ae4..99f64fa 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -32,7 +32,11 @@
         cls.task_states = ["migration_starting", "data_copying_in_progress",
                            "migration_success", None]
         cls.bad_status = "error_deleting"
-        cls.sh = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.sh = cls.create_share(share_type_id=cls.share_type_id)
         cls.sh_instance = (
             cls.shares_v2_client.get_instances_of_share(cls.sh["id"])[0]
         )
@@ -65,7 +69,7 @@
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_force_delete_share(self):
-        share = self.create_share()
+        share = self.create_share(share_type_id=self.share_type_id)
 
         # Change status from 'available' to 'error_deleting'
         self.shares_v2_client.reset_state(share["id"], status=self.bad_status)
@@ -80,7 +84,8 @@
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_force_delete_share_instance(self):
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
         instances = self.shares_v2_client.get_instances_of_share(share["id"])
         # Check that instance was created
         self.assertEqual(1, len(instances))
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 ea05327..c74bd4e 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
@@ -31,7 +31,12 @@
         super(AdminActionsNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
-        cls.sh = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.sh = cls.create_share(share_type_id=cls.share_type_id,
+                                  client=cls.admin_client)
         cls.sh_instance = (
             cls.admin_client.get_instances_of_share(cls.sh["id"])[0]
         )
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 3817178..1be9d87 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations.py
@@ -36,7 +36,12 @@
         super(ExportLocationsTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
-        cls.share = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
+                                     client=cls.admin_client)
         cls.share = cls.admin_client.get_share(cls.share['id'])
         cls.share_instances = cls.admin_client.get_instances_of_share(
             cls.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 4ad4721..5fffff2 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
@@ -30,7 +30,12 @@
         super(ExportLocationsNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
-        cls.share = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(client=cls.admin_client,
+                                     share_type_id=cls.share_type_id)
         cls.share = cls.admin_client.get_share(cls.share['id'])
         cls.share_instances = cls.admin_client.get_instances_of_share(
             cls.share['id'])
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index b324904..e979dcf 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration.py
@@ -69,6 +69,10 @@
             raise cls.skipException("At least two different pool entries are "
                                     "needed to run share migration tests.")
 
+        # create share type (generic)
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
         cls.new_type = cls.create_share_type(
             name=data_utils.rand_name('new_share_type_for_migration'),
             cleanup_in_class=True,
@@ -202,7 +206,9 @@
     def _test_resize_post_migration(self, force_host_assisted, resize):
         self._check_migration_enabled(force_host_assisted)
         new_size = CONF.share.share_size + 1
-        share = self.create_share(self.protocol, size=new_size)
+        share = self.create_share(self.protocol,
+                                  size=new_size,
+                                  share_type_id=self.share_type_id)
         share = self.shares_v2_client.get_share(share['id'])
 
         share, dest_pool = self._setup_migration(share)
@@ -259,12 +265,14 @@
         self.assertNotEmpty(snapshot_list, msg)
         snapshot_id_list = [snap['id'] for snap in snapshot_list]
 
-        # verify that after migration original snapshots are retained
+        # Verify that after migration original snapshots are retained
         self.assertIn(snapshot1['id'], snapshot_id_list)
         self.assertIn(snapshot2['id'], snapshot_id_list)
         # Verify that a share can be created from a snapshot after migration
         snapshot1_share = self.create_share(
-            self.protocol, size=share['size'], snapshot_id=snapshot1['id'],
+            self.protocol,
+            size=share['size'],
+            snapshot_id=snapshot1['id'],
             share_network_id=share['share_network_id'])
         self.assertEqual(snapshot1['id'], snapshot1_share['snapshot_id'])
         self._cleanup_share(share)
@@ -351,7 +359,8 @@
     def test_migration_cancel(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
 
-        share = self.create_share(self.protocol)
+        share = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id)
         share = self.shares_v2_client.get_share(share['id'])
         share, dest_pool = self._setup_migration(share)
         task_state = (constants.TASK_STATE_DATA_COPYING_COMPLETED
@@ -392,7 +401,8 @@
         CONF.share.run_migration_with_preserve_snapshots_tests,
         'Migration with preserve snapshots tests are disabled.')
     def test_migration_cancel_share_with_snapshot(self):
-        share = self.create_share(self.protocol)
+        share = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id)
         share = self.shares_v2_client.get_share(share['id'])
 
         share, dest_pool = self._setup_migration(share)
@@ -421,7 +431,8 @@
     def test_migration_opposite_driver_modes(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
 
-        share = self.create_share(self.protocol)
+        share = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id)
         share = self.shares_v2_client.get_share(share['id'])
         share, dest_pool = self._setup_migration(share, opposite=True)
 
@@ -487,7 +498,8 @@
     def test_migration_2phase(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
 
-        share = self.create_share(self.protocol)
+        share = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id)
         share = self.shares_v2_client.get_share(share['id'])
         share, dest_pool = self._setup_migration(share)
 
@@ -570,7 +582,9 @@
     def test_migrating_share_with_snapshot(self):
         ss_type, __ = self._create_share_type_for_snapshot_capability()
 
-        share = self.create_share(self.protocol, cleanup_in_class=False)
+        share = self.create_share(self.protocol,
+                                  share_type_id=ss_type['share_type']['id'],
+                                  cleanup_in_class=False)
         share = self.shares_v2_client.get_share(share['id'])
 
         share, dest_pool = self._setup_migration(share)
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 a78b33c..c91148b 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
@@ -54,15 +54,18 @@
             raise cls.skipException("At least two different pool entries "
                                     "are needed to run share migration tests.")
 
+        # create share type (generic)
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
         cls.share = cls.create_share(cls.protocol,
-                                     size=CONF.share.share_size + 1)
+                                     size=CONF.share.share_size + 1,
+                                     share_type_id=cls.share_type_id)
         cls.share = cls.shares_client.get_share(cls.share['id'])
 
-        cls.default_type = cls.shares_v2_client.list_share_types(
-            default=True)['share_type']
-
         dest_pool = utils.choose_matching_backend(
-            cls.share, pools, cls.default_type)
+            cls.share, pools, cls.share_type)
 
         if not dest_pool or dest_pool.get('name') is None:
             raise share_exceptions.ShareMigrationException(
@@ -142,7 +145,7 @@
         new_share_type_id = None
         new_share_network_id = None
         if specified:
-            new_share_type_id = self.default_type['id']
+            new_share_type_id = self.share_type_id
             new_share_network_id = self.share['share_network_id']
         self.migrate_share(
             self.share['id'], self.share['host'],
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas.py b/manila_tempest_tests/tests/api/admin/test_quotas.py
index 05a548f..ab0d665 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas.py
@@ -39,6 +39,9 @@
         super(SharesAdminQuotasTest, cls).resource_setup()
         cls.user_id = cls.shares_v2_client.user_id
         cls.tenant_id = cls.shares_v2_client.tenant_id
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     def test_default_quotas(self):
@@ -142,6 +145,12 @@
             msg = "Quota tests are disabled."
             raise cls.skipException(msg)
         super(SharesAdminQuotasUpdateTest, cls).resource_setup()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share group type
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
 
     def setUp(self):
         super(self.__class__, self).setUp()
@@ -206,17 +215,6 @@
             self.tenant_id, self.user_id, **{quota_key: new_quota})
         self.assertEqual(new_quota, int(updated[quota_key]))
 
-    def _create_share_type(self):
-        share_type = self.create_share_type(
-            data_utils.rand_name("tempest-manila"),
-            cleanup_in_class=False,
-            client=self.shares_v2_client,
-            extra_specs=self.add_extra_specs_to_dict(),
-        )
-        if 'share_type' in share_type:
-            share_type = share_type['share_type']
-        return share_type
-
     @ddt.data(
         ('id', True),
         ('name', False),
@@ -600,7 +598,8 @@
     @base.skip_if_microversion_lt("2.39")
     def test_quotas_usages(self):
         # Create share types
-        st_1, st_2 = (self._create_share_type() for i in (1, 2))
+        st_1, st_2 = (self._create_share_type()
+                      for i in (1, 2))
 
         # Set quotas for project, user and both share types
         self.client.update_quotas(self.tenant_id, shares=3, gigabytes=10)
@@ -695,7 +694,10 @@
 
         # Create SG1 and check usages
         share_group1 = self.create_share_group(
-            cleanup_in_class=False, client=self.client)
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
+            cleanup_in_class=False,
+            client=self.client)
         self._check_usages(1, 0)
 
         # Create SGS1 and check usages
@@ -705,7 +707,9 @@
 
         # Create SG2 from SGS1 and check usages
         share_group2 = self.create_share_group(
-            cleanup_in_class=False, client=self.client,
+            share_group_type_id=self.share_group_type_id,
+            cleanup_in_class=False,
+            client=self.client,
             source_share_group_snapshot_id=sg_snapshot['id'])
         self._check_usages(2, 1)
 
@@ -713,6 +717,8 @@
         self.assertRaises(
             lib_exc.OverLimit,
             self.create_share_group,
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             client=self.client, cleanup_in_class=False)
         self._check_usages(2, 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 91b2507..ae87791 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
@@ -15,7 +15,6 @@
 
 import ddt
 from tempest import config
-from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
 import testtools
 from testtools import testcase as tc
@@ -41,6 +40,12 @@
         super(SharesAdminQuotasNegativeTest, cls).resource_setup()
         cls.user_id = cls.shares_client.user_id
         cls.tenant_id = cls.shares_client.tenant_id
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share group type
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_get_quotas_with_empty_tenant_id(self):
@@ -106,6 +111,8 @@
         self.assertRaises(
             lib_exc.OverLimit,
             self.create_share_group,
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             client=client,
             cleanup_in_class=False)
 
@@ -243,17 +250,6 @@
             client.tenant_id,
             **kwargs)
 
-    def _create_share_type(self):
-        share_type = self.create_share_type(
-            data_utils.rand_name("tempest-manila"),
-            cleanup_in_class=False,
-            client=self.shares_v2_client,
-            extra_specs=self.add_extra_specs_to_dict(),
-        )
-        if 'share_type' in share_type:
-            share_type = share_type['share_type']
-        return share_type
-
     @ddt.data('id', 'name')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @base.skip_if_microversion_lt("2.39")
diff --git a/manila_tempest_tests/tests/api/admin/test_replication.py b/manila_tempest_tests/tests/api/admin/test_replication.py
index e41c92b..2837dad 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication.py
@@ -14,7 +14,6 @@
 #    under the License.
 
 from tempest import config
-from tempest.lib.common.utils import data_utils
 import testtools
 from testtools import testcase as tc
 
@@ -34,8 +33,6 @@
     @classmethod
     def resource_setup(cls):
         super(ReplicationAdminTest, cls).resource_setup()
-        # Create share_type
-        name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
         cls.replication_type = CONF.share.backend_replication_type
@@ -48,15 +45,12 @@
         cls.share_zone = cls.zones[0]
         cls.replica_zone = cls.zones[-1]
 
-        cls.extra_specs = cls.add_extra_specs_to_dict(
-            {"replication_type": cls.replication_type})
-        share_type = cls.create_share_type(
-            name,
-            extra_specs=cls.extra_specs,
-            client=cls.admin_client)
-        cls.share_type = share_type["share_type"]
+        extra_specs = {"replication_type": cls.replication_type}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
+
         # Create share with above share_type
-        cls.share = cls.create_share(share_type_id=cls.share_type["id"],
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
                                      availability_zone=cls.share_zone,
                                      client=cls.admin_client)
         cls.replica = cls.admin_client.list_share_replicas(
@@ -77,7 +71,7 @@
             raise self.skipException(
                 msg % ','.join(constants.REPLICATION_PROMOTION_CHOICES))
         share = self.create_share(
-            share_type_id=self.share_type['id'], client=self.admin_client)
+            share_type_id=self.share_type_id, client=self.admin_client)
         original_replica = self.admin_client.list_share_replicas(
             share_id=share['id'])[0]
 
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 57d90d0..069f400 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
@@ -11,7 +11,6 @@
 #    under the License.
 
 from tempest import config
-from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions as lib_exc
 import testtools
 from testtools import testcase as tc
@@ -35,8 +34,6 @@
     @classmethod
     def resource_setup(cls):
         super(ReplicationAdminTest, cls).resource_setup()
-        # Create share_type
-        name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
         cls.replication_type = CONF.share.backend_replication_type
@@ -49,17 +46,13 @@
         cls.share_zone = cls.zones[0]
         cls.replica_zone = cls.zones[-1]
 
-        cls.extra_specs = cls.add_extra_specs_to_dict(
-            {"replication_type": cls.replication_type})
-        share_type = cls.create_share_type(
-            name,
-            cleanup_in_class=True,
-            extra_specs=cls.extra_specs,
-            client=cls.admin_client)
-        cls.share_type = share_type["share_type"]
-        # Create share with above share_type
+        # create share type
+        extra_specs = {"replication_type": cls.replication_type}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
+        # create share
         cls.share = cls.create_share(size=CONF.share.share_size + 1,
-                                     share_type_id=cls.share_type["id"],
+                                     share_type_id=cls.share_type_id,
                                      availability_zone=cls.share_zone,
                                      client=cls.admin_client)
         cls.replica = cls.admin_client.list_share_replicas(
@@ -95,7 +88,7 @@
         """Manage a share with replication share type."""
         # Create a share and unmanage it
         share = self.create_share(size=2,
-                                  share_type_id=self.share_type["id"],
+                                  share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone,
                                   cleanup_in_class=True,
                                   client=self.admin_client)
@@ -110,7 +103,7 @@
         # Manage the previously unmanaged share
         managed_share = self.admin_client.manage_share(
             share['host'], share['share_proto'],
-            export_path, self.share_type['id'])
+            export_path, self.share_type_id)
         self.admin_client.wait_for_share_status(
             managed_share['id'], 'available')
 
@@ -142,7 +135,7 @@
     def test_unmanage_replicated_share_with_no_replica(self):
         """Unmanage a replication type share that does not have replica."""
         share = self.create_share(size=2,
-                                  share_type_id=self.share_type["id"],
+                                  share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone,
                                   client=self.admin_client)
         self.admin_client.unmanage_share(share['id'])
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 aa29828..6adf9c8 100644
--- a/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
+++ b/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
@@ -38,7 +38,7 @@
         extra_specs = cls.add_extra_specs_to_dict(extra_specs=extra_specs)
         return cls.create_share_type(
             name, extra_specs=extra_specs,
-            client=cls.admin_client)
+            client=cls.admin_client)["share_type"]
 
     @classmethod
     def resource_setup(cls):
@@ -168,7 +168,7 @@
     def test_pool_list_with_share_type_filter_with_detail(
             self, detail, share_type_key):
         st = self._create_share_type()
-        search_opts = {"share_type": st["share_type"][share_type_key]}
+        search_opts = {"share_type": st[share_type_key]}
         kwargs = {'search_opts': search_opts}
 
         if detail:
@@ -193,7 +193,7 @@
     def test_pool_list_with_share_type_filter_with_detail_negative(
             self, detail, share_type_key):
         st_negative = self._create_share_type(negative=True)
-        search_opts = {"share_type": st_negative["share_type"][share_type_key]}
+        search_opts = {"share_type": st_negative[share_type_key]}
 
         pools = self.admin_client.list_pools(
             detail=detail, search_opts=search_opts)['pools']
diff --git a/manila_tempest_tests/tests/api/admin/test_share_groups.py b/manila_tempest_tests/tests/api/admin/test_share_groups.py
index dc1f2ae..966a80a 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -33,27 +33,27 @@
     def resource_setup(cls):
         super(ShareGroupsTest, cls).resource_setup()
         # Create 2 share_types
-        name = data_utils.rand_name("tempest-manila")
-        extra_specs = cls.add_extra_specs_to_dict()
-        share_type = cls.create_share_type(name, extra_specs=extra_specs)
-        cls.share_type = share_type['share_type']
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
-        name = data_utils.rand_name("tempest-manila")
-        share_type = cls.create_share_type(name, extra_specs=extra_specs)
-        cls.share_type2 = share_type['share_type']
+        cls.share_type2 = cls._create_share_type()
+        cls.share_type_id2 = cls.share_type2['id']
 
+        # Create a share group type
+        name = data_utils.rand_name("unique_sgt_name")
         cls.sg_type = cls.create_share_group_type(
             name=name,
-            share_types=[cls.share_type['id'], cls.share_type2['id']],
+            share_types=[cls.share_type_id, cls.share_type_id2],
             cleanup_in_class=True,
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
+        cls.sg_type_id = cls.sg_type['id']
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_single_share_type_min(self):
         share_group = self.create_share_group(
-            share_group_type_id=self.sg_type['id'],
+            share_group_type_id=self.sg_type_id,
             cleanup_in_class=False,
-            share_type_ids=[self.share_type['id']],
+            share_type_ids=[self.share_type_id],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
         keys = set(share_group.keys())
@@ -65,7 +65,7 @@
                 "actual": keys})
 
         actual_sg_type = share_group['share_group_type_id']
-        expected_sg_type = self.sg_type['id']
+        expected_sg_type = self.sg_type_id
         self.assertEqual(
             expected_sg_type, actual_sg_type,
             'Incorrect share group type applied to share group '
@@ -73,7 +73,7 @@
                 share_group['id'], expected_sg_type, actual_sg_type))
 
         actual_share_types = share_group['share_types']
-        expected_share_types = [self.share_type['id']]
+        expected_share_types = [self.share_type_id]
         self.assertEqual(
             sorted(expected_share_types),
             sorted(actual_share_types),
@@ -84,9 +84,9 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_multiple_share_types_min(self):
         share_group = self.create_share_group(
-            share_group_type_id=self.sg_type['id'],
+            share_group_type_id=self.sg_type_id,
             cleanup_in_class=False,
-            share_type_ids=[self.share_type['id'], self.share_type2['id']],
+            share_type_ids=[self.share_type_id, self.share_type_id2],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
         keys = set(share_group.keys())
@@ -98,7 +98,7 @@
                 "actual": keys})
 
         actual_sg_type = share_group['share_group_type_id']
-        expected_sg_type = self.sg_type['id']
+        expected_sg_type = self.sg_type_id
         self.assertEqual(
             expected_sg_type, actual_sg_type,
             'Incorrect share group type applied to share group %s. '
@@ -106,7 +106,7 @@
                 share_group['id'], expected_sg_type, actual_sg_type))
 
         actual_share_types = share_group['share_types']
-        expected_share_types = [self.share_type['id'], self.share_type2['id']]
+        expected_share_types = [self.share_type_id, self.share_type_id2]
         self.assertEqual(
             sorted(expected_share_types),
             sorted(actual_share_types),
@@ -114,6 +114,8 @@
             'Expected %s, got %s' % (
                 share_group['id'], expected_share_types, actual_share_types))
 
+    @testtools.skipUnless(
+        CONF.share.default_share_type_name, "Only if defaults are defined.")
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_default_share_group_type_applied(self):
         default_type = self.shares_v2_client.get_default_share_group_type()
@@ -146,9 +148,9 @@
     def test_create_sg_from_snapshot_verify_share_server_information_min(self):
         # Create a share group
         orig_sg = self.create_share_group(
-            share_group_type_id=self.sg_type['id'],
+            share_group_type_id=self.sg_type_id,
             cleanup_in_class=False,
-            share_type_ids=[self.share_type['id']],
+            share_type_ids=[self.share_type_id],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
         # Get latest share group information
@@ -163,7 +165,7 @@
             orig_sg['id'], cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
         new_sg = self.create_share_group(
-            share_group_type_id=self.sg_type['id'],
+            share_group_type_id=self.sg_type_id,
             cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION,
             source_share_group_snapshot_id=sg_snapshot['id'])
@@ -179,13 +181,13 @@
         # Create share group type not specifying any group specs
         sg_type = self.create_share_group_type(
             name=data_utils.rand_name("tempest-manila"),
-            share_types=[self.share_type['id']],
+            share_types=[self.share_type_id],
             group_specs={},
             cleanup_in_class=False)
 
         # Create share group, it should be created always, because we do not
         # restrict choice anyhow.
         self.create_share_group(
-            share_type_ids=[self.share_type['id']],
+            share_type_ids=[self.share_type_id],
             share_group_type_id=sg_type['id'],
             cleanup_in_class=False)
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 479850c..89f0124 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_instances.py
@@ -26,7 +26,11 @@
     @classmethod
     def resource_setup(cls):
         super(ShareInstancesTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_get_instances_of_share_v2_3(self):
diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
index b52a8a1..36f9558 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
@@ -22,7 +22,11 @@
     @classmethod
     def resource_setup(cls):
         super(ShareInstancesNegativeTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     @base.skip_if_microversion_not_supported("2.34")
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 c387ed2..b9376fc 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers.py
@@ -36,7 +36,11 @@
     @classmethod
     def resource_setup(cls):
         super(ShareServersAdminTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
         cls.share_network = cls.shares_v2_client.get_share_network(
             cls.shares_v2_client.share_network_id)
         if not cls.share_network["name"]:
@@ -208,7 +212,8 @@
             neutron_subnet_id=self.share_network['neutron_subnet_id'])
 
         # Create server with share
-        self.create_share(share_network_id=new_sn['id'])
+        self.create_share(share_type_id=self.share_type_id,
+                          share_network_id=new_sn['id'])
 
         # List share servers, filtered by share_network_id
         servers = self.shares_v2_client.list_share_servers(
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
index 33a27fb..7167766 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
@@ -32,7 +32,11 @@
     @classmethod
     def resource_setup(cls):
         super(ShareSnapshotInstancesTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
         snap = cls.create_snapshot_wait_for_active(cls.share["id"])
         cls.snapshot = cls.shares_v2_client.get_snapshot(snap['id'])
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
index fa5672f..c1ffd11 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
@@ -33,7 +33,12 @@
         super(SnapshotInstancesNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
-        cls.share = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
+                                     client=cls.admin_client)
         cls.snapshot = cls.create_snapshot_wait_for_active(
             cls.share["id"], client=cls.admin_client)
 
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 f888969..262e387 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,9 @@
         name = data_utils.rand_name("unique_st_name")
         extra_specs = self.add_extra_specs_to_dict({"key": "value"})
         return self.create_share_type(
-            name, extra_specs=extra_specs, client=self.admin_shares_v2_client)
+            name,
+            extra_specs=extra_specs,
+            client=self.admin_shares_v2_client)["share_type"]
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_create_extra_specs_with_user(self):
@@ -41,7 +43,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.create_share_type_extra_specs,
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({"key": "new_value"}))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -50,7 +52,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.get_share_type_extra_specs,
-            st["share_type"]["id"])
+            st["id"])
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_extra_spec_with_user(self):
@@ -58,7 +60,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.get_share_type_extra_spec,
-            st["share_type"]["id"], "key")
+            st["id"], "key")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_extra_specs_with_user(self):
@@ -66,13 +68,12 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.get_share_type_extra_specs,
-            st["share_type"]["id"])
+            st["id"])
 
     @tc.attr(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.shares_v2_client.get_share_type(
-            st['share_type']['id'])
+        share_type = self.shares_v2_client.get_share_type(st['id'])
         # Verify a non-admin can only read the required extra-specs
         expected_keys = ['driver_handles_share_servers', 'snapshot_support']
         if utils.is_microversion_ge(CONF.share.max_api_microversion, '2.24'):
@@ -93,7 +94,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.update_share_type_extra_spec,
-            st["share_type"]["id"], "key", "new_value")
+            st["id"], "key", "new_value")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_update_extra_specs_with_user(self):
@@ -101,7 +102,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.update_share_type_extra_specs,
-            st["share_type"]["id"], {"key": "new_value"})
+            st["id"], {"key": "new_value"})
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_delete_extra_specs_with_user(self):
@@ -109,7 +110,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.shares_v2_client.delete_share_type_extra_spec,
-            st["share_type"]["id"], "key")
+            st["id"], "key")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_set_too_long_key(self):
@@ -118,7 +119,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.create_share_type_extra_specs,
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({too_big_key: "value"}))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -128,7 +129,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.create_share_type_extra_specs,
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({"key": too_big_value}))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -136,12 +137,12 @@
         too_big_value = "v" * 256
         st = self._create_share_type()
         self.admin_shares_v2_client.create_share_type_extra_specs(
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({"key": "value"}))
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.update_share_type_extra_specs,
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({"key": too_big_value}))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -149,12 +150,12 @@
         too_big_value = "v" * 256
         st = self._create_share_type()
         self.admin_shares_v2_client.create_share_type_extra_specs(
-            st["share_type"]["id"],
+            st["id"],
             self.add_extra_specs_to_dict({"key": "value"}))
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.update_share_type_extra_spec,
-            st["share_type"]["id"], "key", too_big_value)
+            st["id"], "key", too_big_value)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_list_es_with_empty_shr_type_id(self):
@@ -189,7 +190,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.create_share_type_extra_specs,
-            st["share_type"]["id"], "")
+            st["id"], "")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_create_es_with_invalid_specs(self):
@@ -197,7 +198,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.create_share_type_extra_specs,
-            st["share_type"]["id"], {"": "value_with_empty_key"})
+            st["id"], {"": "value_with_empty_key"})
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_extra_spec_with_empty_key(self):
@@ -205,7 +206,7 @@
         self.assertRaises(
             lib_exc.NotFound,
             self.admin_shares_v2_client.get_share_type_extra_spec,
-            st["share_type"]["id"], "")
+            st["id"], "")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_extra_spec_with_invalid_key(self):
@@ -213,7 +214,7 @@
         self.assertRaises(
             lib_exc.NotFound,
             self.admin_shares_v2_client.get_share_type_extra_spec,
-            st["share_type"]["id"], data_utils.rand_name("fake"))
+            st["id"], data_utils.rand_name("fake"))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_extra_specs_with_empty_shr_type_id(self):
@@ -249,7 +250,7 @@
         self.assertRaises(
             lib_exc.NotFound,
             self.admin_shares_v2_client.delete_share_type_extra_spec,
-            st["share_type"]["id"], data_utils.rand_name("fake"))
+            st["id"], data_utils.rand_name("fake"))
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_update_spec_with_empty_shr_type_id(self):
@@ -271,7 +272,7 @@
         self.assertRaises(
             lib_exc.NotFound,
             self.admin_shares_v2_client.update_share_type_extra_spec,
-            st["share_type"]["id"], "", "new_value")
+            st["id"], "", "new_value")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_update_with_invalid_shr_type_id(self):
@@ -286,7 +287,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.admin_shares_v2_client.update_share_type_extra_specs,
-            st["share_type"]["id"], {"": "new_value"})
+            st["id"], {"": "new_value"})
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_delete_spec_driver_handles_share_servers(self):
@@ -296,7 +297,7 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.admin_shares_v2_client.delete_share_type_extra_spec,
-            st["share_type"]["id"],
+            st["id"],
             "driver_handles_share_servers")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -308,4 +309,4 @@
         self.assertRaises(
             lib_exc.Forbidden,
             self.admin_shares_v2_client.delete_share_type_extra_spec,
-            st["share_type"]["id"], "snapshot_support", version=version)
+            st["id"], "snapshot_support", version=version)
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 62d38cc..c828d37 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
@@ -28,7 +28,9 @@
         name = data_utils.rand_name("unique_st_name")
         extra_specs = self.add_extra_specs_to_dict({"key": "value"})
         return self.create_share_type(
-            name, extra_specs=extra_specs, client=self.admin_shares_v2_client)
+            name,
+            extra_specs=extra_specs,
+            client=self.admin_shares_v2_client)["share_type"]
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_create_share_with_nonexistent_share_type(self):
@@ -79,7 +81,7 @@
         st = self._create_share_type()
         self.assertRaises(lib_exc.Conflict,
                           self.create_share_type,
-                          st["share_type"]["name"],
+                          st["name"],
                           extra_specs=self.add_extra_specs_to_dict(),
                           client=self.admin_shares_v2_client)
 
@@ -88,7 +90,7 @@
         st = self._create_share_type()
         self.assertRaises(lib_exc.Conflict,
                           self.admin_shares_v2_client.add_access_to_share_type,
-                          st["share_type"]["id"],
+                          st["id"],
                           self.admin_shares_v2_client.tenant_id)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -97,7 +99,7 @@
         self.assertRaises(
             lib_exc.Conflict,
             self.admin_shares_v2_client.remove_access_from_share_type,
-            st["share_type"]["id"],
+            st["id"],
             self.admin_shares_v2_client.tenant_id)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
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 3e8dda0..dfadd7a 100644
--- a/manila_tempest_tests/tests/api/admin/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
@@ -35,14 +35,9 @@
         cls.shares = []
 
         # create share type for share filtering purposes
-        cls.st_name = data_utils.rand_name("tempest-st-name")
-        cls.extra_specs = cls.add_extra_specs_to_dict(
-            {'storage_protocol': CONF.share.capability_storage_protocol})
-        cls.st = cls.create_share_type(
-            name=cls.st_name,
-            cleanup_in_class=True,
-            extra_specs=cls.extra_specs,
-        )
+        specs = {"storage_protocol": CONF.share.capability_storage_protocol}
+        cls.share_type = cls._create_share_type(specs)
+        cls.share_type_id = cls.share_type['id']
 
         # create share
         cls.share_name = data_utils.rand_name("tempest-share-name")
@@ -55,7 +50,7 @@
             name=cls.share_name,
             description=cls.share_desc,
             metadata=cls.metadata,
-            share_type_id=cls.st['share_type']['id'],
+            share_type_id=cls.share_type_id,
         ))
 
         if CONF.share.run_snapshot_tests:
@@ -82,6 +77,7 @@
                     description=cls.share_desc2,
                     metadata=cls.metadata2,
                     snapshot_id=cls.snap['id'],
+                    share_type_id=cls.share_type_id,
                 ))
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@@ -197,7 +193,7 @@
 
     @tc.attr(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']}
+        filters = {'share_type_id': self.share_type_id}
 
         # list shares
         shares = self.shares_client.list_shares_with_detail(params=filters)
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
index dd48df4..8e37636 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
@@ -41,7 +41,12 @@
     @classmethod
     def resource_setup(cls):
         super(SnapshotExportLocationsTest, cls).resource_setup()
-        cls.share = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
+                                     client=cls.admin_client)
         cls.snapshot = cls.create_snapshot_wait_for_active(
             cls.share['id'], client=cls.admin_client)
         cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
index 6fccc4d..c886398 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
@@ -38,7 +38,12 @@
     @classmethod
     def resource_setup(cls):
         super(SnapshotExportLocationsNegativeTest, cls).resource_setup()
-        cls.share = cls.create_share(client=cls.admin_client)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
+                                     client=cls.admin_client)
         cls.snapshot = cls.create_snapshot_wait_for_active(
             cls.share['id'], client=cls.admin_client)
         cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 759b723..a4892a8 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -1056,6 +1056,27 @@
     """Base test case class for all Shares Admin API tests."""
     credentials = ('admin', )
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseSharesAdminTest, cls).setup_clients()
+        # Initialise share clients
+        cls.admin_shares_v2_client = cls.os_admin.share_v2.SharesV2Client()
+
+    @classmethod
+    def _create_share_type(cls, specs=None):
+        name = data_utils.rand_name("unique_st_name")
+        extra_specs = cls.add_extra_specs_to_dict(specs)
+        return cls.create_share_type(
+            name, extra_specs=extra_specs,
+            client=cls.admin_shares_v2_client)['share_type']
+
+    @classmethod
+    def _create_share_group_type(cls):
+        share_group_type_name = data_utils.rand_name("unique_sgtype_name")
+        return cls.create_share_group_type(
+            name=share_group_type_name, share_types=[cls.share_type_id],
+            client=cls.admin_shares_v2_client)
+
 
 class BaseSharesMixedTest(BaseSharesTest):
     """Base test case class for all Shares API tests with all user roles."""
@@ -1090,3 +1111,18 @@
                 "client": cls.alt_shares_v2_client,
             }
             cls.class_resources.insert(0, resource)
+
+    @classmethod
+    def _create_share_type(cls, specs=None):
+        name = data_utils.rand_name("unique_st_name")
+        extra_specs = cls.add_extra_specs_to_dict(specs)
+        return cls.create_share_type(
+            name, extra_specs=extra_specs,
+            client=cls.admin_shares_v2_client)['share_type']
+
+    @classmethod
+    def _create_share_group_type(cls):
+        share_group_type_name = data_utils.rand_name("unique_sgtype_name")
+        return cls.create_share_group_type(
+            name=share_group_type_name, share_types=[cls.share_type_id],
+            client=cls.admin_shares_v2_client)
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata.py b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
index d3f25d7..db435d3 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
@@ -27,7 +27,7 @@
 @base.skip_if_microversion_lt(
     constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 @ddt.ddt
-class AccessRulesMetadataTest(base.BaseSharesTest):
+class AccessRulesMetadataTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
@@ -69,7 +69,11 @@
             'cert': ['tenant_%d.example.com' % i for i in int_range],
             'cephx': ['eve%d' % i for i in int_range],
         }
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
         cls.md1 = {"key1": "value1", "key2": "value2"}
         cls.access = cls.shares_v2_client.create_access_rule(
             cls.share["id"], cls.access_type,
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
index 692159b..df69ba3 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
@@ -28,7 +28,7 @@
 @base.skip_if_microversion_lt(
     constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 @ddt.ddt
-class AccessesMetadataNegativeTest(base.BaseSharesTest):
+class AccessesMetadataNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
@@ -60,7 +60,11 @@
             cls.access_type = "cephx"
             cls.access_to = "eve"
         cls.shares_v2_client.share_protocol = cls.protocol
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
         cls.access = cls.shares_v2_client.create_access_rule(
             cls.share["id"], cls.access_type, cls.access_to,
             'rw', metadata={u"key1": u"value1"})
diff --git a/manila_tempest_tests/tests/api/test_metadata.py b/manila_tempest_tests/tests/api/test_metadata.py
index ff9953b..bcea697 100644
--- a/manila_tempest_tests/tests/api/test_metadata.py
+++ b/manila_tempest_tests/tests/api/test_metadata.py
@@ -18,12 +18,17 @@
 from manila_tempest_tests.tests.api import base
 
 
-class SharesMetadataTest(base.BaseSharesTest):
+class SharesMetadataTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
         super(SharesMetadataTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_set_metadata_in_share_creation(self):
@@ -31,7 +36,9 @@
         md = {u"key1": u"value1", u"key2": u"value2", }
 
         # create share with metadata
-        share = self.create_share(metadata=md, cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  metadata=md,
+                                  cleanup_in_class=False)
 
         # get metadata of share
         metadata = self.shares_client.get_metadata(share["id"])
@@ -45,7 +52,8 @@
         md = {u"key3": u"value3", u"key4": u"value4", u"key.5.1": u"value.5"}
 
         # create share
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
 
         # set metadata
         self.shares_client.set_metadata(share["id"], md)
@@ -71,7 +79,8 @@
         md2 = {u"key7": u"value7", u"key8": u"value8", }
 
         # create share
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
 
         # set metadata
         self.shares_client.set_metadata(share["id"], md1)
diff --git a/manila_tempest_tests/tests/api/test_metadata_negative.py b/manila_tempest_tests/tests/api/test_metadata_negative.py
index 4e37424..dd3b330 100644
--- a/manila_tempest_tests/tests/api/test_metadata_negative.py
+++ b/manila_tempest_tests/tests/api/test_metadata_negative.py
@@ -43,12 +43,16 @@
 
 
 @ddt.ddt
-class SharesMetadataNegativeTest(base.BaseSharesTest):
-
+class SharesMetadataNegativeTest(base.BaseSharesMixedTest):
     @classmethod
     def resource_setup(cls):
         super(SharesMetadataNegativeTest, cls).resource_setup()
-        cls.share = cls.create_share()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_try_set_metadata_with_empty_key(self):
diff --git a/manila_tempest_tests/tests/api/test_replication_negative.py b/manila_tempest_tests/tests/api/test_replication_negative.py
index 21a5ef2..7b596fb 100644
--- a/manila_tempest_tests/tests/api/test_replication_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_negative.py
@@ -35,8 +35,6 @@
     @classmethod
     def resource_setup(cls):
         super(ReplicationNegativeTest, cls).resource_setup()
-        # Create share_type
-        name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
         cls.admin_client = cls.admin_shares_v2_client
         cls.replication_type = CONF.share.backend_replication_type
 
@@ -48,20 +46,18 @@
         cls.share_zone = cls.zones[0]
         cls.replica_zone = cls.zones[-1]
 
-        cls.extra_specs = cls.add_extra_specs_to_dict(
-            {"replication_type": cls.replication_type})
-        share_type = cls.create_share_type(
-            name,
-            extra_specs=cls.extra_specs,
-            client=cls.admin_client)
-        cls.share_type = share_type["share_type"]
-        # Create share with above share_type
+        # create share type
+        extra_specs = {"replication_type": cls.replication_type}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
+
+        # create share with above share_type
         cls.share1, cls.instance_id1 = cls._create_share_get_instance()
 
     @classmethod
     def _create_share_get_instance(cls):
-        share = cls.create_share(share_type_id=cls.share_type["id"],
-                                 availability_zone=cls.share_zone,)
+        share = cls.create_share(share_type_id=cls.share_type_id,
+                                 availability_zone=cls.share_zone)
         share_instances = cls.admin_client.get_instances_of_share(
             share["id"], version=_MIN_SUPPORTED_MICROVERSION
         )
diff --git a/manila_tempest_tests/tests/api/test_replication_snapshots.py b/manila_tempest_tests/tests/api/test_replication_snapshots.py
index 331437c..773f74a 100644
--- a/manila_tempest_tests/tests/api/test_replication_snapshots.py
+++ b/manila_tempest_tests/tests/api/test_replication_snapshots.py
@@ -14,7 +14,6 @@
 #    under the License.
 
 from tempest import config
-from tempest.lib.common.utils import data_utils
 import testtools
 from testtools import testcase as tc
 
@@ -36,8 +35,6 @@
     @classmethod
     def resource_setup(cls):
         super(ReplicationSnapshotTest, cls).resource_setup()
-        # Create share_type
-        name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
         cls.admin_client = cls.admin_shares_v2_client
         cls.replication_type = CONF.share.backend_replication_type
 
@@ -49,16 +46,13 @@
         cls.share_zone = cls.zones[0]
         cls.replica_zone = cls.zones[-1]
 
-        cls.extra_specs = cls.add_extra_specs_to_dict(
-            {"replication_type": cls.replication_type})
-        share_type = cls.create_share_type(
-            name,
-            extra_specs=cls.extra_specs,
-            client=cls.admin_client)
-        cls.share_type = share_type["share_type"]
+        # create share type
+        extra_specs = {"replication_type": cls.replication_type}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
         # Create share with above share_type
         cls.creation_data = {'kwargs': {
-            'share_type_id': cls.share_type['id'],
+            'share_type_id': cls.share_type_id,
             'availability_zone': cls.share_zone,
         }}
 
@@ -70,7 +64,7 @@
         Verify that the snapshot is properly created under replica by
         creating a share from that snapshot.
         """
-        share = self.create_share(share_type_id=self.share_type['id'],
+        share = self.create_share(share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone)
         original_replica = self.shares_v2_client.list_share_replicas(
             share["id"])[0]
@@ -91,7 +85,8 @@
         self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
 
         if CONF.share.capability_create_share_from_snapshot_support:
-            self.create_share(snapshot_id=snapshot['id'])
+            self.create_share(share_type_id=self.share_type_id,
+                              snapshot_id=snapshot['id'])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_snapshot_before_share_replica(self):
@@ -101,7 +96,7 @@
         share.
         Verify snapshot by creating share from the snapshot.
         """
-        share = self.create_share(share_type_id=self.share_type['id'],
+        share = self.create_share(share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone)
         snapshot = self.create_snapshot_wait_for_active(share["id"])
 
@@ -126,7 +121,8 @@
         self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
 
         if CONF.share.capability_create_share_from_snapshot_support:
-            self.create_share(snapshot_id=snapshot['id'])
+            self.create_share(share_type_id=self.share_type_id,
+                              snapshot_id=snapshot['id'])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_snapshot_before_and_after_share_replica(self):
@@ -136,7 +132,7 @@
         being created.
         Verify snapshots by creating share from the snapshots.
         """
-        share = self.create_share(share_type_id=self.share_type['id'],
+        share = self.create_share(share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone)
         snapshot1 = self.create_snapshot_wait_for_active(share["id"])
 
@@ -169,8 +165,10 @@
         self.assertEqual(constants.STATUS_AVAILABLE, snapshot2['status'])
 
         if CONF.share.capability_create_share_from_snapshot_support:
-            self.create_share(snapshot_id=snapshot1['id'])
-            self.create_share(snapshot_id=snapshot2['id'])
+            self.create_share(share_type_id=self.share_type_id,
+                              snapshot_id=snapshot1['id'])
+            self.create_share(share_type_id=self.share_type_id,
+                              snapshot_id=snapshot2['id'])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_delete_snapshot_after_adding_replica(self):
@@ -180,7 +178,7 @@
         snapshot from replica.
         """
 
-        share = self.create_share(share_type_id=self.share_type['id'],
+        share = self.create_share(share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone)
         share_replica = self.create_share_replica(share["id"],
                                                   self.replica_zone)
@@ -199,10 +197,11 @@
     def test_create_replica_from_snapshot_share(self):
         """Test replica for a share that was created from snapshot."""
 
-        share = self.create_share(share_type_id=self.share_type['id'],
+        share = self.create_share(share_type_id=self.share_type_id,
                                   availability_zone=self.share_zone)
         orig_snapshot = self.create_snapshot_wait_for_active(share["id"])
-        snap_share = self.create_share(snapshot_id=orig_snapshot['id'])
+        snap_share = self.create_share(share_type_id=self.share_type_id,
+                                       snapshot_id=orig_snapshot['id'])
         original_replica = self.shares_v2_client.list_share_replicas(
             snap_share["id"])[0]
         share_replica = self.create_share_replica(snap_share["id"],
diff --git a/manila_tempest_tests/tests/api/test_rules.py b/manila_tempest_tests/tests/api/test_rules.py
index d16eaf1..dc63429 100644
--- a/manila_tempest_tests/tests/api/test_rules.py
+++ b/manila_tempest_tests/tests/api/test_rules.py
@@ -77,7 +77,7 @@
 
 
 @ddt.ddt
-class ShareIpRulesForNFSTest(base.BaseSharesTest):
+class ShareIpRulesForNFSTest(base.BaseSharesMixedTest):
     protocol = "nfs"
 
     @classmethod
@@ -87,7 +87,13 @@
                 cls.protocol not in CONF.share.enable_ip_rules_for_protocols):
             msg = "IP rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
-        cls.share = cls.create_share(cls.protocol)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         cls.access_type = "ip"
         cls.access_to = "2.2.2.2"
 
@@ -220,7 +226,7 @@
 
 
 @ddt.ddt
-class ShareUserRulesForNFSTest(base.BaseSharesTest):
+class ShareUserRulesForNFSTest(base.BaseSharesMixedTest):
     protocol = "nfs"
 
     @classmethod
@@ -231,7 +237,14 @@
                 CONF.share.enable_user_rules_for_protocols):
             msg = "USER rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
-        cls.share = cls.create_share(cls.protocol)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
+
         cls.access_type = "user"
         cls.access_to = CONF.share.username_for_user_rules
 
@@ -303,7 +316,7 @@
 
 
 @ddt.ddt
-class ShareCertRulesForGLUSTERFSTest(base.BaseSharesTest):
+class ShareCertRulesForGLUSTERFSTest(base.BaseSharesMixedTest):
     protocol = "glusterfs"
 
     @classmethod
@@ -314,7 +327,14 @@
                 CONF.share.enable_cert_rules_for_protocols):
             msg = "Cert rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
-        cls.share = cls.create_share(cls.protocol)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
+
         cls.access_type = "cert"
         # Provide access to a client identified by a common name (CN) of the
         # certificate that it possesses.
@@ -412,7 +432,7 @@
 
 
 @ddt.ddt
-class ShareCephxRulesForCephFSTest(base.BaseSharesTest):
+class ShareCephxRulesForCephFSTest(base.BaseSharesMixedTest):
     protocol = "cephfs"
 
     @classmethod
@@ -424,7 +444,14 @@
             msg = ("Cephx rule tests for %s protocol are disabled." %
                    cls.protocol)
             raise cls.skipException(msg)
-        cls.share = cls.create_share(cls.protocol)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
+
         cls.access_type = "cephx"
         # Provide access to a client identified by a cephx auth id.
         cls.access_to = "bob"
@@ -453,7 +480,7 @@
 
 
 @ddt.ddt
-class ShareRulesTest(base.BaseSharesTest):
+class ShareRulesTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
@@ -485,7 +512,9 @@
             cls.access_type = "cephx"
             cls.access_to = "eve"
         cls.shares_v2_client.share_protocol = cls.protocol
-        cls.share = cls.create_share()
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @ddt.data(*set(
@@ -590,7 +619,7 @@
             raise self.skipException(msg)
 
         # create share
-        share = self.create_share()
+        share = self.create_share(share_type_id=self.share_type_id)
 
         # create rule
         if utils.is_microversion_eq(version, '1.0'):
diff --git a/manila_tempest_tests/tests/api/test_rules_negative.py b/manila_tempest_tests/tests/api/test_rules_negative.py
index 19db6bb..785256f 100644
--- a/manila_tempest_tests/tests/api/test_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_rules_negative.py
@@ -39,8 +39,12 @@
                 cls.protocol in CONF.share.enable_ip_rules_for_protocols):
             msg = "IP rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share(cls.protocol)
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         if CONF.share.run_snapshot_tests:
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@@ -182,7 +186,7 @@
 
 
 @ddt.ddt
-class ShareUserRulesForNFSNegativeTest(base.BaseSharesTest):
+class ShareUserRulesForNFSNegativeTest(base.BaseSharesMixedTest):
     protocol = "nfs"
 
     @classmethod
@@ -192,8 +196,12 @@
                 cls.protocol in CONF.share.enable_user_rules_for_protocols):
             msg = "USER rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share(cls.protocol)
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         if CONF.share.run_snapshot_tests:
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@@ -272,7 +280,7 @@
 
 
 @ddt.ddt
-class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesTest):
+class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesMixedTest):
     protocol = "glusterfs"
 
     @classmethod
@@ -282,8 +290,12 @@
                 cls.protocol in CONF.share.enable_cert_rules_for_protocols):
             msg = "CERT rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share(cls.protocol)
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         if CONF.share.run_snapshot_tests:
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@@ -334,7 +346,7 @@
 
 
 @ddt.ddt
-class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesTest):
+class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesMixedTest):
     protocol = "cephfs"
 
     @classmethod
@@ -345,8 +357,12 @@
             msg = ("CEPHX rule tests for %s protocol are disabled" %
                    cls.protocol)
             raise cls.skipException(msg)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share(cls.protocol)
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         cls.access_type = "cephx"
         cls.access_to = "david"
 
@@ -378,7 +394,7 @@
 
 
 @ddt.ddt
-class ShareRulesNegativeTest(base.BaseSharesTest):
+class ShareRulesNegativeTest(base.BaseSharesMixedTest):
     # Tests independent from rule type and share protocol
 
     @classmethod
@@ -394,8 +410,11 @@
                     for p in cls.protocols)):
             cls.message = "Rule tests are disabled"
             raise cls.skipException(cls.message)
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share()
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
         if CONF.share.run_snapshot_tests:
             # create snapshot
             cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
diff --git a/manila_tempest_tests/tests/api/test_security_services.py b/manila_tempest_tests/tests/api/test_security_services.py
index a0e50dc..3bc0eeb 100644
--- a/manila_tempest_tests/tests/api/test_security_services.py
+++ b/manila_tempest_tests/tests/api/test_security_services.py
@@ -114,8 +114,16 @@
 
 
 @ddt.ddt
-class SecurityServicesTest(base.BaseSharesTest,
+class SecurityServicesTest(base.BaseSharesMixedTest,
                            SecurityServiceListMixin):
+
+    @classmethod
+    def resource_setup(cls):
+        super(SecurityServicesTest, cls).resource_setup()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
     def setUp(self):
         super(SecurityServicesTest, self).setUp()
         ss_ldap_data = {
@@ -217,8 +225,9 @@
         # that fails on wrong data, we expect error here.
         # We require any share that uses our share-network.
         try:
-            self.create_share(
-                share_network_id=fresh_sn["id"], cleanup_in_class=False)
+            self.create_share(share_type_id=self.share_type_id,
+                              share_network_id=fresh_sn["id"],
+                              cleanup_in_class=False)
         except Exception as e:
             # we do wait for either 'error' or 'available' status because
             # it is the only available statuses for proper deletion.
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 4b4912d..fe59d6e 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
@@ -26,7 +26,7 @@
 LOG = log.getLogger(__name__)
 
 
-class SecServicesMappingNegativeTest(base.BaseSharesTest):
+class SecServicesMappingNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
@@ -34,6 +34,9 @@
         cls.sn = cls.create_share_network(cleanup_in_class=True)
         cls.ss = cls.create_security_service(cleanup_in_class=True)
         cls.cl = cls.shares_client
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_add_sec_service_twice_to_share_network(self):
@@ -107,8 +110,9 @@
         # that fails on wrong data, we expect error here.
         # We require any share that uses our share-network.
         try:
-            self.create_share(
-                share_network_id=fresh_sn["id"], cleanup_in_class=False)
+            self.create_share(share_type_id=self.share_type_id,
+                              share_network_id=fresh_sn["id"],
+                              cleanup_in_class=False)
         except Exception as e:
             # we do wait for either 'error' or 'available' status because
             # it is the only available statuses for proper deletion.
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 0814b6d..fe06416 100644
--- a/manila_tempest_tests/tests/api/test_security_services_negative.py
+++ b/manila_tempest_tests/tests/api/test_security_services_negative.py
@@ -26,7 +26,14 @@
 LOG = log.getLogger(__name__)
 
 
-class SecurityServicesNegativeTest(base.BaseSharesTest):
+class SecurityServicesNegativeTest(base.BaseSharesMixedTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(SecurityServicesNegativeTest, cls).resource_setup()
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_create_security_service_with_empty_type(self):
@@ -93,8 +100,9 @@
         # that fails on wrong data, we expect error here.
         # We require any share that uses our share-network.
         try:
-            self.create_share(
-                share_network_id=fresh_sn["id"], cleanup_in_class=False)
+            self.create_share(share_type_id=self.share_type_id,
+                              share_network_id=fresh_sn["id"],
+                              cleanup_in_class=False)
         except Exception as e:
             # we do wait for either 'error' or 'available' status because
             # it is the only available statuses for proper deletion.
diff --git a/manila_tempest_tests/tests/api/test_share_group_actions.py b/manila_tempest_tests/tests/api/test_share_group_actions.py
index 7196be8..6b2d442 100644
--- a/manila_tempest_tests/tests/api/test_share_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_share_group_actions.py
@@ -31,23 +31,38 @@
     CONF.share.run_share_group_tests, 'Share Group tests disabled.')
 @base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 @ddt.ddt
-class ShareGroupActionsTest(base.BaseSharesTest):
+class ShareGroupActionsTest(base.BaseSharesMixedTest):
     """Covers share group functionality."""
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupActionsTest, cls).resource_setup()
 
+        # Create a share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
+
         # Create first share group
         cls.share_group_name = data_utils.rand_name("tempest-sg-name")
         cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
         cls.share_group = cls.create_share_group(
-            name=cls.share_group_name, description=cls.share_group_desc)
+            name=cls.share_group_name,
+            description=cls.share_group_desc,
+            share_group_type_id=cls.share_group_type_id,
+            share_type_ids=[cls.share_type_id],
+        )
 
         # Create second share group for purposes of sorting and snapshot
         # filtering
         cls.share_group2 = cls.create_share_group(
-            name=cls.share_group_name, description=cls.share_group_desc)
+            name=cls.share_group_name,
+            description=cls.share_group_desc,
+            share_group_type_id=cls.share_group_type_id,
+            share_type_ids=[cls.share_type_id],
+        )
 
         # Create 2 shares - inside first and second share groups
         cls.share_name = data_utils.rand_name("tempest-share-name")
@@ -59,6 +74,7 @@
                 'name': cls.share_name,
                 'description': cls.share_desc,
                 'size': size,
+                'share_type_id': cls.share_type_id,
                 'share_group_id': sg_id,
                 'experimental': True,
             }} for size, sg_id in ((cls.share_size, cls.share_group['id']),
@@ -277,6 +293,7 @@
             cleanup_in_class=False,
             source_share_group_snapshot_id=self.sg_snapshot['id'],
             version=constants.MIN_SHARE_GROUP_MICROVERSION,
+            share_group_type_id=self.share_group_type_id,
         )
 
         new_share_group = self.shares_v2_client.get_share_group(
@@ -324,18 +341,28 @@
 @testtools.skipUnless(
     CONF.share.run_share_group_tests, 'Share Group tests disabled.')
 @base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
-class ShareGroupRenameTest(base.BaseSharesTest):
+class ShareGroupRenameTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupRenameTest, cls).resource_setup()
 
+        # Create a share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # Create a share group type
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
+
         # Create share group
         cls.share_group_name = data_utils.rand_name("tempest-sg-name")
         cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
         cls.share_group = cls.create_share_group(
             name=cls.share_group_name,
             description=cls.share_group_desc,
+            share_group_type_id=cls.share_group_type_id,
+            share_type_ids=[cls.share_type_id]
         )
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@@ -380,6 +407,8 @@
             name=value1,
             description=value1,
             version=constants.MIN_SHARE_GROUP_MICROVERSION,
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id]
         )
         self.assertEqual(value1, share_group["name"])
         self.assertEqual(value1, share_group["description"])
diff --git a/manila_tempest_tests/tests/api/test_share_groups.py b/manila_tempest_tests/tests/api/test_share_groups.py
index 68ff647..f438732 100644
--- a/manila_tempest_tests/tests/api/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/test_share_groups.py
@@ -29,15 +29,30 @@
     CONF.share.run_share_group_tests, 'Share Group tests disabled.')
 @base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
 @ddt.ddt
-class ShareGroupsTest(base.BaseSharesTest):
+class ShareGroupsTest(base.BaseSharesMixedTest):
     """Covers share group functionality."""
 
+    @classmethod
+    def resource_setup(cls):
+        super(ShareGroupsTest, cls).resource_setup()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share group type
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
+
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_populate_delete_share_group_min(self):
         # Create a share group
         share_group = self.create_share_group(
             cleanup_in_class=False,
-            version=constants.MIN_SHARE_GROUP_MICROVERSION)
+            version=constants.MIN_SHARE_GROUP_MICROVERSION,
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
+        )
+
         keys = set(share_group.keys())
         self.assertTrue(
             constants.SHARE_GROUP_DETAIL_REQUIRED_KEYS.issubset(keys),
@@ -48,6 +63,7 @@
         )
         # Populate
         share = self.create_share(
+            share_type_id=self.share_type_id,
             share_group_id=share_group['id'],
             cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION,
@@ -76,6 +92,8 @@
     def test_create_delete_empty_share_group_snapshot_min(self):
         # Create base share group
         share_group = self.create_share_group(
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
@@ -114,6 +132,8 @@
     def test_create_share_group_from_empty_share_group_snapshot_min(self):
         # Create base share group
         share_group = self.create_share_group(
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
@@ -130,6 +150,7 @@
             len(snapshot_members))
 
         new_share_group = self.create_share_group(
+            share_group_type_id=self.share_group_type_id,
             cleanup_in_class=False,
             source_share_group_snapshot_id=sg_snapshot['id'],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
@@ -177,6 +198,8 @@
         azs = self.shares_v2_client.list_availability_zones()
 
         sg_kwargs = {
+            'share_group_type_id': self.share_group_type_id,
+            'share_type_ids': [self.share_type_id],
             'version': '2.34',
             'cleanup_in_class': False,
         }
@@ -203,6 +226,7 @@
             share_group['consistent_snapshot_support'], ('host', 'pool', None))
 
         s_kwargs = {
+            'share_type_id': self.share_type_id,
             'share_group_id': share_group['id'],
             'version': '2.33',
             'cleanup_in_class': False,
diff --git a/manila_tempest_tests/tests/api/test_share_groups_negative.py b/manila_tempest_tests/tests/api/test_share_groups_negative.py
index af29879..b605632 100644
--- a/manila_tempest_tests/tests/api/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_groups_negative.py
@@ -28,17 +28,27 @@
 @testtools.skipUnless(
     CONF.share.run_share_group_tests, 'Share Group tests disabled.')
 @base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
-class ShareGroupsNegativeTest(base.BaseSharesTest):
+class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupsNegativeTest, cls).resource_setup()
+        # Create a share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # Create a share group type
+        cls.share_group_type = cls._create_share_group_type()
+        cls.share_group_type_id = cls.share_group_type['id']
+
         # Create a share group
         cls.share_group_name = data_utils.rand_name("tempest-sg-name")
         cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
         cls.share_group = cls.create_share_group(
             name=cls.share_group_name,
-            description=cls.share_group_desc
+            description=cls.share_group_desc,
+            share_group_type_id=cls.share_group_type_id,
+            share_type_ids=[cls.share_type_id],
         )
         # Create a share in the share group
         cls.share_name = data_utils.rand_name("tempest-share-name")
@@ -48,6 +58,7 @@
             name=cls.share_name,
             description=cls.share_desc,
             size=cls.share_size,
+            share_type_id=cls.share_type_id,
             share_group_id=cls.share_group['id'],
             experimental=True,
         )
@@ -56,7 +67,7 @@
         cls.sg_snap_desc = data_utils.rand_name(
             "tempest-group-snap-description")
         cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
-            cls.share_group["id"],
+            cls.share_group['id'],
             name=cls.sg_snap_name,
             description=cls.sg_snap_desc
         )
@@ -228,6 +239,8 @@
         share_group = self.create_share_group(
             name='tempest_sg',
             description='tempest_sg_desc',
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             cleanup_in_class=False,
             version=constants.MIN_SHARE_GROUP_MICROVERSION,
         )
@@ -246,6 +259,8 @@
             name='tempest_sg',
             description='tempest_sg_desc',
             availability_zone='fake_nonexistent_az',
+            share_group_type_id=self.share_group_type_id,
+            share_type_ids=[self.share_type_id],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @base.skip_if_microversion_lt("2.34")
@@ -268,6 +283,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.create_share,
+            share_type_id=self.share_type_id,
             share_group_id=self.share_group['id'],
             availability_zone=different_az,
             version='2.34')
diff --git a/manila_tempest_tests/tests/api/test_share_networks.py b/manila_tempest_tests/tests/api/test_share_networks.py
index 4a44c12..975d261 100644
--- a/manila_tempest_tests/tests/api/test_share_networks.py
+++ b/manila_tempest_tests/tests/api/test_share_networks.py
@@ -133,11 +133,16 @@
             self.assertGreaterEqual(sn['created_at'], created_since)
 
 
-class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
+class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
 
     @classmethod
     def resource_setup(cls):
         super(ShareNetworksTest, cls).resource_setup()
+
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
         ss_data = cls.generate_security_service_data()
         cls.ss_ldap = cls.create_security_service(**ss_data)
 
@@ -218,7 +223,8 @@
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_update_valid_keys_sh_server_exists(self):
-        self.create_share(cleanup_in_class=False)
+        self.create_share(share_type_id=self.share_type_id,
+                          cleanup_in_class=False)
         update_dict = {
             "name": "new_name",
             "description": "new_description",
@@ -269,7 +275,8 @@
     def test_gateway_with_neutron(self):
         subnet_client = self.subnets_client
 
-        self.create_share(cleanup_in_class=False)
+        self.create_share(share_type_id=self.share_type_id,
+                          cleanup_in_class=False)
         share_net_details = self.shares_v2_client.get_share_network(
             self.shares_v2_client.share_network_id)
         subnet_details = subnet_client.show_subnet(
@@ -288,7 +295,8 @@
     def test_mtu_with_neutron(self):
         network_client = self.networks_client
 
-        self.create_share(cleanup_in_class=False)
+        self.create_share(share_type_id=self.share_type_id,
+                          cleanup_in_class=False)
         share_net_details = self.shares_v2_client.get_share_network(
             self.shares_v2_client.share_network_id)
         network_details = network_client.show_network(
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 02bbdb9..ce04ef9 100644
--- a/manila_tempest_tests/tests/api/test_share_networks_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_networks_negative.py
@@ -23,7 +23,14 @@
 CONF = config.CONF
 
 
-class ShareNetworksNegativeTest(base.BaseSharesTest):
+class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(ShareNetworksNegativeTest, cls).resource_setup()
+        # create share type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_try_get_share_network_without_id(self):
@@ -61,7 +68,8 @@
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
     def test_try_update_invalid_keys_sh_server_exists(self):
-        self.create_share(cleanup_in_class=False)
+        self.create_share(share_type_id=self.share_type_id,
+                          cleanup_in_class=False)
 
         self.assertRaises(lib_exc.Forbidden,
                           self.shares_client.update_share_network,
@@ -112,8 +120,9 @@
             cleanup_in_class=False)
 
         # Create share with share network
-        self.create_share(
-            share_network_id=new_sn['id'], cleanup_in_class=False)
+        self.create_share(share_type_id=self.share_type_id,
+                          share_network_id=new_sn['id'],
+                          cleanup_in_class=False)
 
         # Try delete share network
         self.assertRaises(
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 8a24325..63b11d1 100644
--- a/manila_tempest_tests/tests/api/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_types_negative.py
@@ -23,17 +23,8 @@
 class ShareTypesNegativeTest(base.BaseSharesMixedTest):
 
     @classmethod
-    def _create_share_type(cls):
-        name = data_utils.rand_name("unique_st_name")
-        extra_specs = cls.add_extra_specs_to_dict()
-        return cls.create_share_type(
-            name, extra_specs=extra_specs,
-            client=cls.admin_client)
-
-    @classmethod
     def resource_setup(cls):
         super(ShareTypesNegativeTest, cls).resource_setup()
-        cls.admin_client = cls.admin_shares_v2_client
         cls.st = cls._create_share_type()
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@@ -47,18 +38,18 @@
     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"])
+                          self.st["id"])
 
     @tc.attr(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.st['id'],
                           self.shares_client.tenant_id)
 
     @tc.attr(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,
-                          self.st['share_type']['id'],
+                          self.st['id'],
                           self.shares_client.tenant_id)
diff --git a/manila_tempest_tests/tests/api/test_shares.py b/manila_tempest_tests/tests/api/test_shares.py
index 2543cf5..786648e 100644
--- a/manila_tempest_tests/tests/api/test_shares.py
+++ b/manila_tempest_tests/tests/api/test_shares.py
@@ -24,7 +24,7 @@
 CONF = config.CONF
 
 
-class SharesNFSTest(base.BaseSharesTest):
+class SharesNFSTest(base.BaseSharesMixedTest):
     """Covers share functionality, that is related to NFS share type."""
     protocol = "nfs"
 
@@ -34,12 +34,18 @@
         if cls.protocol not in CONF.share.enable_protocols:
             message = "%s tests are disabled" % cls.protocol
             raise cls.skipException(message)
-        cls.share = cls.create_share(cls.protocol)
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_create_get_delete_share(self):
 
-        share = self.create_share(self.protocol)
+        share = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id)
         detailed_elements = {'name', 'id', 'availability_zone',
                              'description', 'project_id',
                              'created_at', 'share_proto', 'metadata',
@@ -153,8 +159,10 @@
             self.share["id"], cleanup_in_class=False)
 
         # create share from snapshot
-        s2 = self.create_share(
-            self.protocol, snapshot_id=snap["id"], cleanup_in_class=False)
+        s2 = self.create_share(self.protocol,
+                               share_type_id=self.share_type_id,
+                               snapshot_id=snap["id"],
+                               cleanup_in_class=False)
 
         # The 'status' of the share returned by the create API must be
         # set and have value either 'creating' or
@@ -189,8 +197,10 @@
             self.share["id"], cleanup_in_class=False)
 
         # create share from snapshot
-        child = self.create_share(
-            self.protocol, snapshot_id=snap["id"], cleanup_in_class=False)
+        child = self.create_share(self.protocol,
+                                  share_type_id=self.share_type_id,
+                                  snapshot_id=snap["id"],
+                                  cleanup_in_class=False)
 
         # The 'status' of the share returned by the create API must be
         # set and have value either 'creating' or
diff --git a/manila_tempest_tests/tests/api/test_shares_actions.py b/manila_tempest_tests/tests/api/test_shares_actions.py
index ae83c85..7cedb6c 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions.py
@@ -29,7 +29,7 @@
 
 
 @ddt.ddt
-class SharesActionsTest(base.BaseSharesTest):
+class SharesActionsTest(base.BaseSharesMixedTest):
     """Covers share functionality, that doesn't related to share type."""
 
     @classmethod
@@ -38,6 +38,10 @@
 
         cls.shares = []
 
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
         # create share
         cls.share_name = data_utils.rand_name("tempest-share-name")
         cls.share_desc = data_utils.rand_name("tempest-share-description")
@@ -49,6 +53,7 @@
             name=cls.share_name,
             description=cls.share_desc,
             metadata=cls.metadata,
+            share_type_id=cls.share_type_id,
         ))
 
         if CONF.share.run_snapshot_tests:
@@ -402,12 +407,14 @@
         public_share = self.create_share(
             name='public_share',
             description='public_share_desc',
+            share_type_id=self.share_type_id,
             is_public=True,
             cleanup_in_class=False
         )
         private_share = self.create_share(
             name='private_share',
             description='private_share_desc',
+            share_type_id=self.share_type_id,
             is_public=False,
             cleanup_in_class=False
         )
@@ -612,7 +619,8 @@
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
     def test_extend_share(self):
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
         new_size = int(share['size']) + 1
 
         # extend share and wait for active status
@@ -636,7 +644,9 @@
         "Share shrink tests are disabled.")
     def test_shrink_share(self):
         size = CONF.share.share_size + 1
-        share = self.create_share(size=size, cleanup_in_class=False)
+        share = self.create_share(size=size,
+                                  share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
         new_size = int(share['size']) - 1
 
         # shrink share and wait for active status
@@ -655,17 +665,23 @@
         self.assertEqual(new_size, share_get['size'], msg)
 
 
-class SharesRenameTest(base.BaseSharesTest):
+class SharesRenameTest(base.BaseSharesMixedTest):
 
     @classmethod
     def resource_setup(cls):
         super(SharesRenameTest, cls).resource_setup()
 
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
         # create share
         cls.share_name = data_utils.rand_name("tempest-share-name")
         cls.share_desc = data_utils.rand_name("tempest-share-description")
         cls.share = cls.create_share(
-            name=cls.share_name, description=cls.share_desc)
+            name=cls.share_name,
+            description=cls.share_desc,
+            share_type_id=cls.share_type_id)
 
         if CONF.share.run_snapshot_tests:
             # create snapshot
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 6d1fa6c..d427294 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
@@ -27,15 +27,21 @@
 
 @ddt.ddt
 class SharesActionsNegativeTest(base.BaseSharesMixedTest):
+
     @classmethod
     def resource_setup(cls):
         super(SharesActionsNegativeTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
         cls.share_name = data_utils.rand_name("tempest-share-name")
         cls.share_desc = data_utils.rand_name("tempest-share-description")
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+        # create share
         cls.share = cls.create_share(
             name=cls.share_name,
-            description=cls.share_desc)
+            description=cls.share_desc,
+            share_type_id=cls.share_type_id)
         if CONF.share.run_snapshot_tests:
             # create snapshot
             cls.snap_name = data_utils.rand_name("tempest-snapshot-name")
@@ -93,7 +99,8 @@
         CONF.share.run_extend_tests,
         "Share extend tests are disabled.")
     def test_share_extend_with_invalid_share_state(self):
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
         new_size = int(share['size']) + 1
 
         # set "error" state
@@ -137,7 +144,9 @@
         "Share shrink tests are disabled.")
     def test_share_shrink_with_invalid_share_state(self):
         size = CONF.share.share_size + 1
-        share = self.create_share(size=size, cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  size=size,
+                                  cleanup_in_class=False)
         new_size = int(share['size']) - 1
 
         # set "error" state
diff --git a/manila_tempest_tests/tests/api/test_shares_negative.py b/manila_tempest_tests/tests/api/test_shares_negative.py
index 3229f2f..a0a1a47 100644
--- a/manila_tempest_tests/tests/api/test_shares_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_negative.py
@@ -24,13 +24,20 @@
 CONF = config.CONF
 
 
-class SharesNegativeTest(base.BaseSharesTest):
+class SharesNegativeTest(base.BaseSharesMixedTest):
+
     @classmethod
     def resource_setup(cls):
         super(SharesNegativeTest, cls).resource_setup()
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
         cls.share = cls.create_share(
             name='public_share',
             description='public_share_desc',
+            share_type_id=cls.share_type_id,
             is_public=True,
             metadata={'key': 'value'}
         )
@@ -48,7 +55,7 @@
         # share can not be deleted while snapshot exists
 
         # create share
-        share = self.create_share()
+        share = self.create_share(share_type_id=self.share_type_id)
 
         # create snapshot
         self.create_snapshot_wait_for_active(share["id"])
@@ -70,7 +77,9 @@
 
         try:  # create share
             size = CONF.share.share_size + 1
-            share = self.create_share(size=size, cleanup_in_class=False)
+            share = self.create_share(size=size,
+                                      share_type_id=self.share_type_id,
+                                      cleanup_in_class=False)
         except share_exceptions.ShareBuildErrorException:
             self.skip(skip_msg)
 
@@ -83,6 +92,7 @@
         # try create share from snapshot with less size
         self.assertRaises(lib_exc.BadRequest,
                           self.create_share,
+                          share_type_id=self.share_type_id,
                           snapshot_id=snap["id"],
                           cleanup_in_class=False)
 
@@ -92,6 +102,7 @@
     def test_create_share_with_nonexistant_share_network(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
                           share_network_id="wrong_sn_id")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -107,7 +118,8 @@
         # have 'create_share_from_snapshot_support'.
 
         # create share
-        share = self.create_share(cleanup_in_class=False)
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
 
         # get parent's share network
         parent_share = self.shares_client.get_share(share["id"])
@@ -130,6 +142,7 @@
         self.assertRaises(
             lib_exc.BadRequest,
             self.create_share,
+            share_type_id=self.share_type_id,
             cleanup_in_class=False,
             share_network_id=new_duplicated_sn["id"],
             snapshot_id=snap["id"],
@@ -178,7 +191,14 @@
                           'key')
 
 
-class SharesAPIOnlyNegativeTest(base.BaseSharesTest):
+class SharesAPIOnlyNegativeTest(base.BaseSharesMixedTest):
+
+    @classmethod
+    def resource_setup(cls):
+        super(SharesAPIOnlyNegativeTest, cls).resource_setup()
+        # create share_type
+        cls.share_type = cls._create_share_type()
+        cls.share_type_id = cls.share_type['id']
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_unmanage_share_by_user(self):
@@ -209,22 +229,29 @@
     def test_create_share_non_existent_az(self):
         self.assertRaises(lib_exc.NotFound,
                           self.shares_v2_client.create_share,
+                          share_type_id=self.share_type_id,
                           availability_zone='fake_az')
 
     @tc.attr(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)
+                          self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
+                          size=0)
 
     @tc.attr(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="#$%")
+                          self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
+                          size="#$%")
 
     @tc.attr(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="")
+                          self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
+                          size="")
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
@@ -246,12 +273,15 @@
     def test_create_share_with_invalid_protocol(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
                           share_protocol="nonexistent_protocol")
 
     @tc.attr(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')
+                          self.shares_client.create_share,
+                          share_type_id=self.share_type_id,
+                          is_public='truebar')
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_get_share_with_wrong_id(self):
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules.py b/manila_tempest_tests/tests/api/test_snapshot_rules.py
index af80f4d..354e549 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules.py
@@ -25,14 +25,21 @@
 CONF = config.CONF
 
 
-class BaseShareSnapshotRulesTest(base.BaseSharesTest):
+class BaseShareSnapshotRulesTest(base.BaseSharesMixedTest):
 
     protocol = ""
 
     @classmethod
     def resource_setup(cls):
         super(BaseShareSnapshotRulesTest, cls).resource_setup()
-        cls.share = cls.create_share(cls.protocol)
+        # create share_type
+        extra_specs = {'mount_snapshot_support': 'True'}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
+
+        # create share
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         cls.snapshot = cls.create_snapshot_wait_for_active(cls.share['id'])
 
     def _test_create_delete_access_rules(self, access_to):
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
index 2f3f193..2e3e89c 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
@@ -42,9 +42,13 @@
             msg = "IP rule tests for %s protocol are disabled." % cls.protocol
             raise cls.skipException(msg)
         super(SnapshotIpRulesForNFSNegativeTest, cls).resource_setup()
-
+        # create share type
+        extra_specs = {'mount_snapshot_support': 'True'}
+        cls.share_type = cls._create_share_type(extra_specs)
+        cls.share_type_id = cls.share_type['id']
         # create share
-        cls.share = cls.create_share(cls.protocol)
+        cls.share = cls.create_share(cls.protocol,
+                                     share_type_id=cls.share_type_id)
         cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
 
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
diff --git a/manila_tempest_tests/utils.py b/manila_tempest_tests/utils.py
index 3598ec7..9f08cac 100644
--- a/manila_tempest_tests/utils.py
+++ b/manila_tempest_tests/utils.py
@@ -164,5 +164,7 @@
             CONF.share.multitenancy_enabled)
         extra_specs['snapshot_support'] = (
             CONF.share.capability_snapshot_support)
+        extra_specs['create_share_from_snapshot_support'] = (
+            CONF.share.capability_create_share_from_snapshot_support)
 
     return extra_specs
