diff --git a/cinder_tempest_plugin/api/volume/base.py b/cinder_tempest_plugin/api/volume/base.py
index 1fd82bf..c0f53bd 100644
--- a/cinder_tempest_plugin/api/volume/base.py
+++ b/cinder_tempest_plugin/api/volume/base.py
@@ -13,6 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import io
+
 from tempest.common import compute
 from tempest.common import waiters
 from tempest import config
@@ -158,6 +160,29 @@
                         body['id'])
         return body
 
+    @classmethod
+    def create_image_with_data(cls, **kwargs):
+        # we do this as a class method so we can use the
+        # addClassResourceCleanup functionality of tempest.test.BaseTestCase
+        images_client = cls.os_primary.image_client_v2
+        if 'min_disk' not in kwargs:
+            kwargs['min_disk'] = 1
+        response = images_client.create_image(**kwargs)
+        image_id = response['id']
+        cls.addClassResourceCleanup(
+            images_client.wait_for_resource_deletion, image_id)
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            images_client.delete_image, image_id)
+
+        # upload "data" to image
+        image_file = io.BytesIO(data_utils.random_bytes(size=1024))
+        images_client.store_image_file(image_id, image_file)
+
+        waiters.wait_for_image_status(images_client, image_id, 'active')
+        image = images_client.show_image(image_id)
+        return image
+
 
 class BaseVolumeAdminTest(BaseVolumeTest):
     """Base test case class for all Volume Admin API tests."""
diff --git a/cinder_tempest_plugin/api/volume/test_create_from_image.py b/cinder_tempest_plugin/api/volume/test_create_from_image.py
index acb1943..f44f630 100644
--- a/cinder_tempest_plugin/api/volume/test_create_from_image.py
+++ b/cinder_tempest_plugin/api/volume/test_create_from_image.py
@@ -10,12 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import io
-
-from tempest.common import waiters
 from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
 from cinder_tempest_plugin.api.volume import base
@@ -32,29 +27,6 @@
         if not CONF.service_available.glance:
             raise cls.skipException("Glance service is disabled")
 
-    @classmethod
-    def create_image_with_data(cls, **kwargs):
-        # we do this as a class method so we can use the
-        # addClassResourceCleanup functionality of tempest.test.BaseTestCase
-        images_client = cls.os_primary.image_client_v2
-        if 'min_disk' not in kwargs:
-            kwargs['min_disk'] = 1
-        response = images_client.create_image(**kwargs)
-        image_id = response['id']
-        cls.addClassResourceCleanup(
-            images_client.wait_for_resource_deletion, image_id)
-        cls.addClassResourceCleanup(
-            test_utils.call_and_ignore_notfound_exc,
-            images_client.delete_image, image_id)
-
-        # upload "data" to image
-        image_file = io.BytesIO(data_utils.random_bytes(size=1024))
-        images_client.store_image_file(image_id, image_file)
-
-        waiters.wait_for_image_status(images_client, image_id, 'active')
-        image = images_client.show_image(image_id)
-        return image
-
     @decorators.idempotent_id('6e9266ff-a917-4dd5-aa4a-c36e59e7a2a6')
     def test_create_from_image_with_volume_type_image_property(self):
         """Verify that the cinder_img_volume_type image property works.
