diff --git a/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py b/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
index d5142b6..c057c36 100644
--- a/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_consistency_group_actions.py
@@ -70,31 +70,16 @@
     def test_create_cg_from_multi_typed_populated_cgsnapshot_v2_4(self):
         share_name = data_utils.rand_name("tempest-share-name")
         share_desc = data_utils.rand_name("tempest-share-description")
-        share_size = 1
-        share = self.create_share(
-            cleanup_in_class=False,
-            name=share_name,
-            description=share_desc,
-            size=share_size,
-            consistency_group_id=self.consistency_group['id'],
-            share_type_id=self.share_type['id'],
-            client=self.shares_v2_client,
-            version='2.4',
-        )
 
-        share_name2 = data_utils.rand_name("tempest-share-name")
-        share_desc2 = data_utils.rand_name("tempest-share-description")
-        share_size2 = 1
-        share2 = self.create_share(
-            cleanup_in_class=False,
-            name=share_name2,
-            description=share_desc2,
-            size=share_size2,
-            consistency_group_id=self.consistency_group['id'],
-            share_type_id=self.share_type2['id'],
-            client=self.shares_v2_client,
-            version='2.4',
-        )
+        shares = self.create_shares([
+            {'kwargs': {
+                'cleanup_in_class': False,
+                'name': share_name,
+                'description': share_desc,
+                'consistency_group_id': self.consistency_group['id'],
+                'share_type_id': st_id,
+            }} for st_id in (self.share_type['id'], self.share_type2['id'])
+        ])
 
         cg_shares = self.shares_v2_client.list_shares(
             detailed=True,
@@ -103,7 +88,7 @@
         )
 
         cg_share_ids = [s['id'] for s in cg_shares]
-        for share_id in [share['id'], share2['id']]:
+        for share_id in (shares[0]['id'], shares[1]['id']):
             self.assertIn(share_id, cg_share_ids, 'Share %s not in '
                                                   'consistency group %s.' %
                           (share_id, self.consistency_group['id']))
diff --git a/manila_tempest_tests/tests/api/test_consistency_group_actions.py b/manila_tempest_tests/tests/api/test_consistency_group_actions.py
index 0bf6e58..a932fdf 100644
--- a/manila_tempest_tests/tests/api/test_consistency_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_consistency_group_actions.py
@@ -39,78 +39,52 @@
     @classmethod
     def resource_setup(cls):
         super(ConsistencyGroupActionsTest, cls).resource_setup()
-        # Create consistency group
+
+        # Create first consistency group
         cls.cg_name = data_utils.rand_name("tempest-cg-name")
         cls.cg_desc = data_utils.rand_name("tempest-cg-description")
-        cls.consistency_group = cls.create_consistency_group(
-            name=cls.cg_name,
-            description=cls.cg_desc,
-        )
-
-        # Create 2 shares inside consistency group
-        cls.share_name = data_utils.rand_name("tempest-share-name")
-        cls.share_desc = data_utils.rand_name("tempest-share-description")
-        cls.share_size = 1
-        cls.share = cls.create_share(
-            name=cls.share_name,
-            description=cls.share_desc,
-            size=cls.share_size,
-            consistency_group_id=cls.consistency_group['id'],
-            metadata={'key': 'value'},
-            client=cls.shares_v2_client,
-        )
-
-        cls.share_name2 = data_utils.rand_name("tempest-share-name")
-        cls.share_desc2 = data_utils.rand_name("tempest-share-description")
-        cls.share_size2 = 2
-        cls.share2 = cls.create_share(
-            name=cls.share_name2,
-            description=cls.share_desc2,
-            size=cls.share_size2,
-            consistency_group_id=cls.consistency_group['id'],
-            client=cls.shares_v2_client,
-        )
-
-        cls.cgsnap_name = data_utils.rand_name("tempest-cgsnap-name")
-        cls.cgsnap_desc = data_utils.rand_name("tempest-cgsnap-description")
-        cls.cgsnapshot = cls.create_cgsnapshot_wait_for_active(
-            cls.consistency_group["id"],
-            name=cls.cgsnap_name,
-            description=cls.cgsnap_desc)
+        cls.cg = cls.create_consistency_group(
+            name=cls.cg_name, description=cls.cg_desc)
 
         # Create second consistency group for purposes of sorting and snapshot
         # filtering
-        cls.cg_name2 = data_utils.rand_name("tempest-cg-name")
-        cls.cg_desc2 = data_utils.rand_name("tempest-cg-description")
-        cls.consistency_group2 = cls.create_consistency_group(
-            name=cls.cg_name2,
-            description=cls.cg_desc2,
-        )
+        cls.cg2 = cls.create_consistency_group(
+            name=cls.cg_name, description=cls.cg_desc)
 
-        # Create 1 share in second consistency group
-        cls.share_name3 = data_utils.rand_name("tempest-share-name")
-        cls.share_desc3 = data_utils.rand_name("tempest-share-description")
-        cls.share3 = cls.create_share(
-            name=cls.share_name3,
-            description=cls.share_desc3,
-            size=cls.share_size,
-            consistency_group_id=cls.consistency_group2['id'],
-            client=cls.shares_v2_client,
-        )
+        # Create 2 shares inside first CG and 1 inside second CG
+        cls.share_name = data_utils.rand_name("tempest-share-name")
+        cls.share_desc = data_utils.rand_name("tempest-share-description")
+        cls.share_size = 1
+        cls.share_size2 = 2
+        cls.shares = cls.create_shares([
+            {'kwargs': {
+                'name': cls.share_name,
+                'description': cls.share_desc,
+                'size': size,
+                'consistency_group_id': cg_id,
+            }} for size, cg_id in ((cls.share_size, cls.cg['id']),
+                                   (cls.share_size2, cls.cg['id']),
+                                   (cls.share_size, cls.cg2['id']))
+        ])
 
-        cls.cgsnap_name2 = data_utils.rand_name("tempest-cgsnap-name")
-        cls.cgsnap_desc2 = data_utils.rand_name("tempest-cgsnap-description")
+        # Create CG snapshots
+        cls.cgsnap_name = data_utils.rand_name("tempest-cgsnap-name")
+        cls.cgsnap_desc = data_utils.rand_name("tempest-cgsnap-description")
+
+        cls.cgsnapshot = cls.create_cgsnapshot_wait_for_active(
+            cls.cg["id"],
+            name=cls.cgsnap_name,
+            description=cls.cgsnap_desc)
+
         cls.cgsnapshot2 = cls.create_cgsnapshot_wait_for_active(
-            cls.consistency_group2['id'],
-            name=cls.cgsnap_name2,
-            description=cls.cgsnap_desc2)
+            cls.cg2['id'], name=cls.cgsnap_name, description=cls.cgsnap_desc)
 
     @test.attr(type=["gate", ])
     def test_get_consistency_group_v2_4(self):
 
         # Get consistency group
         consistency_group = self.shares_v2_client.get_consistency_group(
-            self.consistency_group['id'], version='2.4')
+            self.cg['id'], version='2.4')
 
         # Verify keys
         actual_keys = set(consistency_group.keys())
@@ -135,7 +109,7 @@
     def test_get_share_v2_4(self):
 
         # Get share
-        share = self.shares_v2_client.get_share(self.share['id'],
+        share = self.shares_v2_client.get_share(self.shares[0]['id'],
                                                 version='2.4')
 
         # Verify keys
@@ -164,9 +138,8 @@
         self.assertEqual(self.share_size, int(share["size"]), msg)
 
         msg = "Expected consistency_group_id: '%s', actual value: '%s'" % (
-            self.consistency_group["id"], share["consistency_group_id"])
-        self.assertEqual(
-            self.consistency_group["id"], share["consistency_group_id"], msg)
+            self.cg["id"], share["consistency_group_id"])
+        self.assertEqual(self.cg["id"], share["consistency_group_id"], msg)
 
     @test.attr(type=["gate", ])
     def test_list_consistency_groups_v2_4(self):
@@ -180,8 +153,7 @@
          consistency_groups]
 
         # Consistency group ids are in list exactly once
-        for cg_id in [self.consistency_group["id"],
-                      self.consistency_group2["id"]]:
+        for cg_id in (self.cg["id"], self.cg2["id"]):
             gen = [cgid["id"] for cgid in consistency_groups
                    if cgid["id"] == cg_id]
             msg = ("Expected id %s exactly once in consistency group list" %
@@ -200,8 +172,7 @@
          for cg in consistency_groups]
 
         # Consistency group ids are in list exactly once
-        for cg_id in [self.consistency_group["id"],
-                      self.consistency_group2["id"]]:
+        for cg_id in (self.cg["id"], self.cg2["id"]):
             gen = [cgid["id"] for cgid in consistency_groups
                    if cgid["id"] == cg_id]
             msg = ("Expected id %s exactly once in consistency group list" %
@@ -213,7 +184,7 @@
 
         shares = self.shares_v2_client.list_shares(
             detailed=True,
-            params={'consistency_group_id': self.consistency_group['id']},
+            params={'consistency_group_id': self.cg['id']},
             version='2.4'
         )
 
@@ -222,18 +193,19 @@
         self.assertEqual(2, len(shares),
                          'Incorrect number of shares returned. Expected 2, '
                          'got %s' % len(shares))
-        self.assertIn(self.share['id'], share_ids,
+        self.assertIn(self.shares[0]['id'], share_ids,
                       'Share %s expected in returned list, but got %s'
-                      % (self.share['id'], share_ids))
-        self.assertIn(self.share2['id'], share_ids,
+                      % (self.shares[0]['id'], share_ids))
+        self.assertIn(self.shares[1]['id'], share_ids,
                       'Share %s expected in returned list, but got %s'
-                      % (self.share['id'], share_ids))
+                      % (self.shares[0]['id'], share_ids))
 
     @test.attr(type=["gate", ])
     def test_get_cgsnapshot_v2_4(self):
+
         # Get consistency group
         consistency_group = self.shares_v2_client.get_consistency_group(
-            self.consistency_group['id'], version='2.4')
+            self.cg['id'], version='2.4')
 
         # Verify keys
         actual_keys = set(consistency_group.keys())
@@ -265,11 +237,11 @@
                          'Unexpected number of cgsnapshot members. Expected '
                          '2, got %s.' % len(cgsnapshot_members))
         # Verify each share is represented in the cgsnapshot appropriately
-        for share_id in [self.share['id'], self.share2['id']]:
+        for share_id in (self.shares[0]['id'], self.shares[1]['id']):
             self.assertIn(share_id, member_share_ids,
                           'Share missing %s missing from cgsnapshot. Found %s.'
                           % (share_id, member_share_ids))
-        for share in [self.share, self.share2]:
+        for share in (self.shares[0], self.shares[1]):
             for member in cgsnapshot_members:
                 if share['id'] == member['share_id']:
                     self.assertEqual(share['size'], member['size'])
