From 686fabef31ee36ec25574ddb086d6e9e3f170045 Mon Sep 17 00:00:00 2001
From: Stephen Finucane <sfinucan@redhat.com>
Date: Tue, 8 Nov 2022 10:49:24 +0000
Subject: [PATCH] tests: Convert volume tests to use 'parse_output'

Change-Id: Iec8ca873f6bc3993e0ba557f68895d9aefb6f9c6
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
---
 .../tests/functional/volume/base.py           |  11 +-
 .../tests/functional/volume/v1/test_qos.py    |  53 ++++---
 .../functional/volume/v1/test_service.py      |  35 +++--
 .../functional/volume/v1/test_snapshot.py     | 109 +++++++------
 .../volume/v1/test_transfer_request.py        |  57 ++++---
 .../tests/functional/volume/v1/test_volume.py | 145 ++++++++++--------
 .../functional/volume/v1/test_volume_type.py  | 106 +++++++------
 .../tests/functional/volume/v2/test_qos.py    | 116 +++++++-------
 .../functional/volume/v2/test_service.py      |  44 +++---
 .../volume/v2/test_transfer_request.py        |  62 ++++----
 .../tests/functional/volume/v2/test_volume.py | 136 ++++++++--------
 .../volume/v2/test_volume_backup.py           |  29 ++--
 .../volume/v2/test_volume_snapshot.py         | 118 +++++++-------
 .../functional/volume/v2/test_volume_type.py  | 120 +++++++++------
 .../tests/functional/volume/v3/test_qos.py    | 116 +++++++-------
 .../volume/v3/test_transfer_request.py        |  66 ++++----
 .../tests/functional/volume/v3/test_volume.py | 130 ++++++++--------
 .../volume/v3/test_volume_snapshot.py         | 109 +++++++------
 .../functional/volume/v3/test_volume_type.py  | 120 +++++++++------
 19 files changed, 923 insertions(+), 759 deletions(-)

diff --git a/openstackclient/tests/functional/volume/base.py b/openstackclient/tests/functional/volume/base.py
index 53032606c6..041d8d070c 100644
--- a/openstackclient/tests/functional/volume/base.py
+++ b/openstackclient/tests/functional/volume/base.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import time
 
 from openstackclient.tests.functional import base
@@ -27,10 +26,12 @@ class BaseVolumeTests(base.TestCase):
             failures = ['error']
         total_sleep = 0
         while total_sleep < wait:
-            output = json.loads(cls.openstack(
-                check_type + ' show -f json ' + check_name))
+            output = cls.openstack(
+                check_type + ' show ' + check_name,
+                parse_output=True,
+            )
             current_status = output['status']
-            if (current_status == desired_status):
+            if current_status == desired_status:
                 print('{} {} now has status {}'
                       .format(check_type, check_name, current_status))
                 return
@@ -51,7 +52,7 @@ class BaseVolumeTests(base.TestCase):
         total_sleep = 0
         name_field = name_field or 'Name'
         while total_sleep < wait:
-            result = json.loads(cls.openstack(check_type + ' list -f json'))
+            result = cls.openstack(check_type + ' list', parse_output=True)
             names = [x[name_field] for x in result]
             if check_name not in names:
                 print('{} {} is now deleted'.format(check_type, check_name))
diff --git a/openstackclient/tests/functional/volume/v1/test_qos.py b/openstackclient/tests/functional/volume/v1/test_qos.py
index d8277dfc81..c449938e37 100644
--- a/openstackclient/tests/functional/volume/v1/test_qos.py
+++ b/openstackclient/tests/functional/volume/v1/test_qos.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v1 import common
@@ -22,29 +21,32 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_create_list(self):
         """Test create, list, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name1,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output['name']
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name2
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name2,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output['name']
         )
 
         # Test list
-        cmd_output = json.loads(self.openstack(
-            'volume qos list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume qos list',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
@@ -57,12 +59,13 @@ class QosTests(common.BaseVolumeTests):
         """Tests create volume qos, set, unset, show, delete"""
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
+        cmd_output = self.openstack(
+            'volume qos create ' +
             '--consumer front-end '
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume qos delete ' + name)
         self.assertEqual(
             name,
@@ -84,10 +87,11 @@ class QosTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test volume qos show
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -105,10 +109,11 @@ class QosTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
diff --git a/openstackclient/tests/functional/volume/v1/test_service.py b/openstackclient/tests/functional/volume/v1/test_service.py
index fee73f189c..7de2de5541 100644
--- a/openstackclient/tests/functional/volume/v1/test_service.py
+++ b/openstackclient/tests/functional/volume/v1/test_service.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from openstackclient.tests.functional.volume.v1 import common
 
 
@@ -19,18 +17,18 @@ class VolumeServiceTests(common.BaseVolumeTests):
     """Functional tests for volume service."""
 
     def test_volume_service_list(self):
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json'))
+        cmd_output = self.openstack('volume service list', parse_output=True)
 
         # Get the nonredundant services and hosts
         services = list(set([x['Binary'] for x in cmd_output]))
 
         # Test volume service list --service
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json ' +
+        cmd_output = self.openstack(
+            'volume service list ' +
             '--service ' +
-            services[0]
-        ))
+            services[0],
+            parse_output=True,
+        )
         for x in cmd_output:
             self.assertEqual(
                 services[0],
@@ -43,9 +41,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
     def test_volume_service_set(self):
 
         # Get a service and host
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume service list',
+            parse_output=True,
+        )
         service_1 = cmd_output[0]['Binary']
         host_1 = cmd_output[0]['Host']
 
@@ -57,9 +56,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json --long'
-        ))
+        cmd_output = self.openstack(
+            'volume service list --long',
+            parse_output=True,
+        )
         self.assertEqual(
             'enabled',
             cmd_output[0]['Status']
@@ -77,9 +77,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json --long'
-        ))
+        cmd_output = self.openstack(
+            'volume service list --long',
+            parse_output=True,
+        )
         self.assertEqual(
             'disabled',
             cmd_output[0]['Status']
diff --git a/openstackclient/tests/functional/volume/v1/test_snapshot.py b/openstackclient/tests/functional/volume/v1/test_snapshot.py
index 5a76a2e950..c8c956d1e7 100644
--- a/openstackclient/tests/functional/volume/v1/test_snapshot.py
+++ b/openstackclient/tests/functional/volume/v1/test_snapshot.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v1 import common
@@ -25,11 +24,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def setUpClass(cls):
         super(VolumeSnapshotTests, cls).setUpClass()
         # create a volume for all tests to create snapshot
-        cmd_output = json.loads(cls.openstack(
-            'volume create -f json ' +
+        cmd_output = cls.openstack(
+            'volume create ' +
             '--size 1 ' +
-            cls.VOLLY
-        ))
+            cls.VOLLY,
+            parse_output=True,
+        )
         cls.wait_for_status('volume', cls.VOLLY, 'available')
         cls.VOLUME_ID = cmd_output['id']
 
@@ -45,22 +45,24 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output["display_name"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output["display_name"],
@@ -78,11 +80,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name1)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name1)
         self.assertEqual(
@@ -100,11 +103,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.wait_for_status('volume snapshot', name1, 'available')
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name2)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name2)
         self.assertEqual(
@@ -122,29 +126,32 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.wait_for_status('volume snapshot', name2, 'available')
 
         # Test list --long, --status
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
             '--long ' +
-            '--status error'
-        ))
+            '--status error',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertNotIn(name2, names)
 
         # Test list --volume
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--volume ' + self.VOLLY
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--volume ' + self.VOLLY,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --name
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--name ' + name1
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--name ' + name1,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertNotIn(name2, names)
@@ -153,12 +160,13 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         """Test create, set, unset, show, delete volume snapshot"""
         name = uuid.uuid4().hex
         new_name = name + "_"
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             '--volume ' + self.VOLLY +
             ' --description aaaa ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', new_name)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + new_name)
         self.assertEqual(
@@ -187,10 +195,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Show snapshot set result
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["display_name"],
@@ -216,10 +225,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Beta': 'b'},
             cmd_output["properties"],
@@ -232,8 +242,9 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
             new_name,
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output["properties"])
diff --git a/openstackclient/tests/functional/volume/v1/test_transfer_request.py b/openstackclient/tests/functional/volume/v1/test_transfer_request.py
index 0399e6cc99..0ee73d8a42 100644
--- a/openstackclient/tests/functional/volume/v1/test_transfer_request.py
+++ b/openstackclient/tests/functional/volume/v1/test_transfer_request.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v1 import common
@@ -25,8 +24,10 @@ class TransferRequestTests(common.BaseVolumeTests):
     @classmethod
     def setUpClass(cls):
         super(TransferRequestTests, cls).setUpClass()
-        cmd_output = json.loads(cls.openstack(
-            'volume create -f json --size 1 ' + cls.VOLUME_NAME))
+        cmd_output = cls.openstack(
+            'volume create --size 1 ' + cls.VOLUME_NAME,
+            parse_output=True,
+        )
         cls.assertOutput(cls.VOLUME_NAME, cmd_output['name'])
 
         cls.wait_for_status("volume", cls.VOLUME_NAME, "available")
@@ -45,26 +46,31 @@ class TransferRequestTests(common.BaseVolumeTests):
         name = uuid.uuid4().hex
 
         # create a volume
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json --size 1 ' + volume_name))
+        cmd_output = self.openstack(
+            'volume create --size 1 ' + volume_name,
+            parse_output=True,
+        )
         self.assertEqual(volume_name, cmd_output['name'])
 
         # create volume transfer request for the volume
         # and get the auth_key of the new transfer request
-        cmd_output = json.loads(self.openstack(
-            'volume transfer request create -f json ' +
+        cmd_output = self.openstack(
+            'volume transfer request create ' +
             volume_name +
-            ' --name ' + name))
+            ' --name ' + name,
+            parse_output=True,
+        )
         auth_key = cmd_output['auth_key']
         self.assertTrue(auth_key)
 
         # accept the volume transfer request
-        json_output = json.loads(self.openstack(
-            'volume transfer request accept -f json ' +
+        output = self.openstack(
+            'volume transfer request accept ' +
             name + ' ' +
-            '--auth-key ' + auth_key
-        ))
-        self.assertEqual(name, json_output.get('name'))
+            '--auth-key ' + auth_key,
+            parse_output=True,
+        )
+        self.assertEqual(name, output.get('name'))
 
         # the volume transfer will be removed by default after accepted
         # so just need to delete the volume here
@@ -74,11 +80,12 @@ class TransferRequestTests(common.BaseVolumeTests):
 
     def test_volume_transfer_request_list_show(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume transfer request create -f json ' +
+        cmd_output = self.openstack(
+            'volume transfer request create ' +
             ' --name ' + name + ' ' +
-            self.VOLUME_NAME
-        ))
+            self.VOLUME_NAME,
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume transfer request delete ' + name
@@ -87,13 +94,15 @@ class TransferRequestTests(common.BaseVolumeTests):
         auth_key = cmd_output['auth_key']
         self.assertTrue(auth_key)
 
-        cmd_output = json.loads(self.openstack(
-            'volume transfer request list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume transfer request list',
+            parse_output=True,
+        )
         self.assertIn(name, [req['Name'] for req in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
-            'volume transfer request show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume transfer request show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(name, cmd_output['name'])
diff --git a/openstackclient/tests/functional/volume/v1/test_volume.py b/openstackclient/tests/functional/volume/v1/test_volume.py
index 013bc6a4a8..727ee73b7e 100644
--- a/openstackclient/tests/functional/volume/v1/test_volume.py
+++ b/openstackclient/tests/functional/volume/v1/test_volume.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v1 import common
@@ -22,22 +21,24 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_create_and_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            name1
-        ))
+            name1,
+            parse_output=True,
+        )
         self.assertEqual(
             1,
             cmd_output["size"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 2 ' +
-            name2
-        ))
+            name2,
+            parse_output=True,
+        )
         self.assertEqual(
             2,
             cmd_output["size"],
@@ -51,11 +52,12 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            name1
-        ))
+            name1,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name1)
         self.assertEqual(
             1,
@@ -64,11 +66,12 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name1, "available")
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 2 ' +
-            name2
-        ))
+            name2,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name2)
         self.assertEqual(
             2,
@@ -77,25 +80,28 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name2, "available")
 
         # Test list
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json '
-        ))
+        cmd_output = self.openstack(
+            'volume list ',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --long
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json --long'
-        ))
+        cmd_output = self.openstack(
+            'volume list --long',
+            parse_output=True,
+        )
         bootable = [x["Bootable"] for x in cmd_output]
         self.assertIn('false', bootable)
 
         # Test list --name
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '--name ' + name1
-        ))
+        cmd_output = self.openstack(
+            'volume list ' +
+            '--name ' + name1,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertNotIn(name2, names)
@@ -103,13 +109,14 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_set_and_unset(self):
         """Tests create volume, set, unset, show, delete"""
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
             '--description aaaa ' +
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output["name"],
@@ -148,10 +155,11 @@ class VolumeTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["name"],
@@ -181,10 +189,11 @@ class VolumeTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Gamma': 'c'},
             cmd_output["properties"],
@@ -193,42 +202,46 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_create_and_list_and_show_backward_compatibility(self):
         """Test backward compatibility of create, list, show"""
         name1 = uuid.uuid4().hex
-        json_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        output = self.openstack(
+            'volume create ' +
             '-c display_name -c id ' +
             '--size 1 ' +
-            name1
-        ))
-        self.assertIn('display_name', json_output)
-        self.assertEqual(name1, json_output['display_name'])
-        self.assertIn('id', json_output)
-        volume_id = json_output['id']
+            name1,
+            parse_output=True,
+        )
+        self.assertIn('display_name', output)
+        self.assertEqual(name1, output['display_name'])
+        self.assertIn('id', output)
+        volume_id = output['id']
         self.assertIsNotNone(volume_id)
-        self.assertNotIn('name', json_output)
+        self.assertNotIn('name', output)
         self.addCleanup(self.openstack, 'volume delete ' + volume_id)
 
         self.wait_for_status("volume", name1, "available")
 
-        json_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Display Name"'
-        ))
-        for each_volume in json_output:
+        output = self.openstack(
+            'volume list ' +
+            '-c "Display Name"',
+            parse_output=True,
+        )
+        for each_volume in output:
             self.assertIn('Display Name', each_volume)
 
-        json_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Name"'
-        ))
-        for each_volume in json_output:
+        output = self.openstack(
+            'volume list ' +
+            '-c "Name"',
+            parse_output=True,
+        )
+        for each_volume in output:
             self.assertIn('Name', each_volume)
 
-        json_output = json.loads(self.openstack(
-            'volume show -f json ' +
+        output = self.openstack(
+            'volume show ' +
             '-c display_name -c id ' +
-            name1
-        ))
-        self.assertIn('display_name', json_output)
-        self.assertEqual(name1, json_output['display_name'])
-        self.assertIn('id', json_output)
-        self.assertNotIn('name', json_output)
+            name1,
+            parse_output=True,
+        )
+        self.assertIn('display_name', output)
+        self.assertEqual(name1, output['display_name'])
+        self.assertIn('id', output)
+        self.assertNotIn('name', output)
diff --git a/openstackclient/tests/functional/volume/v1/test_volume_type.py b/openstackclient/tests/functional/volume/v1/test_volume_type.py
index 7434b5b36b..037d45f0d5 100644
--- a/openstackclient/tests/functional/volume/v1/test_volume_type.py
+++ b/openstackclient/tests/functional/volume/v1/test_volume_type.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import time
 import uuid
 
@@ -22,10 +21,11 @@ class VolumeTypeTests(common.BaseVolumeTests):
 
     def test_volume_type_create_list(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' +
@@ -33,26 +33,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
         )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual(self.NAME, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack('volume type list -f json'))
+        cmd_output = self.openstack('volume type list', parse_output=True)
         self.assertIn(self.NAME, [t['Name'] for t in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --default'
-        ))
+        cmd_output = self.openstack(
+            'volume type list --default',
+            parse_output=True,
+        )
         self.assertEqual(1, len(cmd_output))
         self.assertEqual('lvmdriver-1', cmd_output[0]['Name'])
 
     def test_volume_type_set_unset_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -63,26 +66,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'c': 'd'}, cmd_output['properties'])
 
     def test_volume_type_set_unset_multiple_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -93,18 +99,20 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a --property c %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['properties'])
 
     def test_multi_delete(self):
@@ -125,13 +133,13 @@ class VolumeTypeTests(common.BaseVolumeTests):
     def test_encryption_type(self):
         encryption_type = uuid.uuid4().hex
         # test create new encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json '
+        cmd_output = self.openstack(
+            'volume type create '
             '--encryption-provider LuksEncryptor '
             '--encryption-cipher aes-xts-plain64 '
             '--encryption-key-size 128 '
             '--encryption-control-location front-end ' +
-            encryption_type))
+            encryption_type)
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -139,8 +147,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test show encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + encryption_type))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -148,8 +158,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test list encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --encryption-type'))
+        cmd_output = self.openstack(
+            'volume type list --encryption-type',
+            parse_output=True,
+        )
         encryption_output = [t['Encryption'] for t in cmd_output
                              if t['Name'] == encryption_type][0]
         expected = {'provider': 'LuksEncryptor',
@@ -169,19 +181,20 @@ class VolumeTypeTests(common.BaseVolumeTests):
         self.assertEqual('', raw_output)
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
-            name,
-        ))
+        cmd_output = self.openstack(
+            'volume type create --private ' + name,
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name,
         )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -193,9 +206,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type unset --encryption-type ' + name
         )
         self.assertEqual('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['encryption'])
         # test delete encryption type
         raw_output = self.openstack('volume type delete ' + encryption_type)
diff --git a/openstackclient/tests/functional/volume/v2/test_qos.py b/openstackclient/tests/functional/volume/v2/test_qos.py
index f9f6e099fa..0a5405736b 100644
--- a/openstackclient/tests/functional/volume/v2/test_qos.py
+++ b/openstackclient/tests/functional/volume/v2/test_qos.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v2 import common
@@ -22,29 +21,32 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_create_delete_list(self):
         """Test create, list, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name1,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output['name']
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name2
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name2,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output['name']
         )
 
         # Test list
-        cmd_output = json.loads(self.openstack(
-            'volume qos list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume qos list',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
@@ -57,12 +59,13 @@ class QosTests(common.BaseVolumeTests):
         """Tests create volume qos, set, unset, show, delete"""
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
+        cmd_output = self.openstack(
+            'volume qos create ' +
             '--consumer front-end '
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume qos delete ' + name)
         self.assertEqual(
             name,
@@ -88,10 +91,11 @@ class QosTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test volume qos show
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -109,10 +113,11 @@ class QosTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -125,10 +130,11 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_asso_disasso(self):
         """Tests associate and disassociate qos with volume type"""
         vol_type1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json ' +
-            vol_type1
-        ))
+        cmd_output = self.openstack(
+            'volume type create ' +
+            vol_type1,
+            parse_output=True,
+        )
         self.assertEqual(
             vol_type1,
             cmd_output['name']
@@ -136,10 +142,11 @@ class QosTests(common.BaseVolumeTests):
         self.addCleanup(self.openstack, 'volume type delete ' + vol_type1)
 
         vol_type2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json ' +
-            vol_type2
-        ))
+        cmd_output = self.openstack(
+            'volume type create ' +
+            vol_type2,
+            parse_output=True,
+        )
         self.assertEqual(
             vol_type2,
             cmd_output['name']
@@ -147,10 +154,11 @@ class QosTests(common.BaseVolumeTests):
         self.addCleanup(self.openstack, 'volume type delete ' + vol_type2)
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -169,10 +177,11 @@ class QosTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -184,10 +193,11 @@ class QosTests(common.BaseVolumeTests):
             ' ' + name
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertNotIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -198,10 +208,11 @@ class QosTests(common.BaseVolumeTests):
             name + ' ' + vol_type1
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -211,8 +222,9 @@ class QosTests(common.BaseVolumeTests):
             '--all ' + name
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertNotIn("associations", cmd_output.keys())
diff --git a/openstackclient/tests/functional/volume/v2/test_service.py b/openstackclient/tests/functional/volume/v2/test_service.py
index 7ec43fe850..5794f81ff0 100644
--- a/openstackclient/tests/functional/volume/v2/test_service.py
+++ b/openstackclient/tests/functional/volume/v2/test_service.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from openstackclient.tests.functional.volume.v2 import common
 
 
@@ -19,19 +17,19 @@ class VolumeServiceTests(common.BaseVolumeTests):
     """Functional tests for volume service."""
 
     def test_volume_service_list(self):
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json'))
+        cmd_output = self.openstack('volume service list', parse_output=True)
 
         # Get the nonredundant services and hosts
         services = list(set([x['Binary'] for x in cmd_output]))
         hosts = list(set([x['Host'] for x in cmd_output]))
 
         # Test volume service list --service
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json ' +
+        cmd_output = self.openstack(
+            'volume service list ' +
             '--service ' +
-            services[0]
-        ))
+            services[0],
+            parse_output=True,
+        )
         for x in cmd_output:
             self.assertEqual(
                 services[0],
@@ -39,11 +37,12 @@ class VolumeServiceTests(common.BaseVolumeTests):
             )
 
         # Test volume service list --host
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json ' +
+        cmd_output = self.openstack(
+            'volume service list ' +
             '--host ' +
-            hosts[0]
-        ))
+            hosts[0],
+            parse_output=True,
+        )
         for x in cmd_output:
             self.assertIn(
                 hosts[0],
@@ -53,9 +52,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
     def test_volume_service_set(self):
 
         # Get a service and host
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume service list',
+            parse_output=True,
+        )
         service_1 = cmd_output[0]['Binary']
         host_1 = cmd_output[0]['Host']
 
@@ -67,9 +67,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json --long'
-        ))
+        cmd_output = self.openstack(
+            'volume service list --long',
+            parse_output=True,
+        )
         self.assertEqual(
             'enabled',
             cmd_output[0]['Status']
@@ -89,9 +90,10 @@ class VolumeServiceTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume service list -f json --long'
-        ))
+        cmd_output = self.openstack(
+            'volume service list --long',
+            parse_output=True,
+        )
         self.assertEqual(
             'disabled',
             cmd_output[0]['Status']
diff --git a/openstackclient/tests/functional/volume/v2/test_transfer_request.py b/openstackclient/tests/functional/volume/v2/test_transfer_request.py
index 00d0865c5c..ac71cba2c7 100644
--- a/openstackclient/tests/functional/volume/v2/test_transfer_request.py
+++ b/openstackclient/tests/functional/volume/v2/test_transfer_request.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v2 import common
@@ -26,11 +25,12 @@ class TransferRequestTests(common.BaseVolumeTests):
         xfer_name = uuid.uuid4().hex
 
         # create a volume
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.assertEqual(volume_name, cmd_output['name'])
         self.addCleanup(
             self.openstack,
@@ -42,12 +42,13 @@ class TransferRequestTests(common.BaseVolumeTests):
 
         # create volume transfer request for the volume
         # and get the auth_key of the new transfer request
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request create -f json ' +
+            'volume transfer request create ' +
             ' --name ' + xfer_name + ' ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         xfer_id = cmd_output['id']
         auth_key = cmd_output['auth_key']
@@ -55,12 +56,13 @@ class TransferRequestTests(common.BaseVolumeTests):
         self.wait_for_status("volume", volume_name, "awaiting-transfer")
 
         # accept the volume transfer request
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request accept -f json ' +
+            'volume transfer request accept ' +
             '--auth-key ' + auth_key + ' ' +
-            xfer_id
-        ))
+            xfer_id,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         self.wait_for_status("volume", volume_name, "available")
 
@@ -69,11 +71,12 @@ class TransferRequestTests(common.BaseVolumeTests):
         xfer_name = uuid.uuid4().hex
 
         # create a volume
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.assertEqual(volume_name, cmd_output['name'])
         self.addCleanup(
             self.openstack,
@@ -83,29 +86,32 @@ class TransferRequestTests(common.BaseVolumeTests):
         )
         self.wait_for_status("volume", volume_name, "available")
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request create -f json ' +
+            'volume transfer request create ' +
             ' --name ' + xfer_name + ' ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         xfer_id = cmd_output['id']
         auth_key = cmd_output['auth_key']
         self.assertTrue(auth_key)
         self.wait_for_status("volume", volume_name, "awaiting-transfer")
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request list -f json'
-        ))
+            'volume transfer request list',
+            parse_output=True,
+        )
         self.assertIn(xfer_name, [req['Name'] for req in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request show -f json ' +
-            xfer_id
-        ))
+            'volume transfer request show ' +
+            xfer_id,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
 
         # NOTE(dtroyer): We need to delete the transfer request to allow the
diff --git a/openstackclient/tests/functional/volume/v2/test_volume.py b/openstackclient/tests/functional/volume/v2/test_volume.py
index 19fd58950e..832dabe678 100644
--- a/openstackclient/tests/functional/volume/v2/test_volume.py
+++ b/openstackclient/tests/functional/volume/v2/test_volume.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v2 import common
@@ -22,22 +21,24 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            name1
-        ))
+            name1,
+            parse_output=True,
+        )
         self.assertEqual(
             1,
             cmd_output["size"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 2 ' +
-            name2
-        ))
+            name2,
+            parse_output=True,
+        )
         self.assertEqual(
             2,
             cmd_output["size"],
@@ -51,11 +52,12 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            name1
-        ))
+            name1,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name1)
         self.assertEqual(
             1,
@@ -64,11 +66,12 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name1, "available")
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 2 ' +
-            name2
-        ))
+            name2,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name2)
         self.assertEqual(
             2,
@@ -83,19 +86,21 @@ class VolumeTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test list --long
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '--long'
-        ))
+        cmd_output = self.openstack(
+            'volume list ' +
+            '--long',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --status
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '--status error'
-        ))
+        cmd_output = self.openstack(
+            'volume list ' +
+            '--status error',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertIn(name2, names)
@@ -107,13 +112,14 @@ class VolumeTests(common.BaseVolumeTests):
         """Tests create volume, set, unset, show, delete"""
         name = uuid.uuid4().hex
         new_name = name + "_"
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
             '--description aaaa ' +
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + new_name)
         self.assertEqual(
             name,
@@ -153,10 +159,11 @@ class VolumeTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["name"],
@@ -191,10 +198,11 @@ class VolumeTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Gamma': 'c'},
             cmd_output["properties"],
@@ -210,30 +218,33 @@ class VolumeTests(common.BaseVolumeTests):
         volume_name = uuid.uuid4().hex
         snapshot_name = uuid.uuid4().hex
         # Make a snapshot
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.wait_for_status("volume", volume_name, "available")
         self.assertEqual(
             volume_name,
             cmd_output["name"],
         )
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             snapshot_name +
-            ' --volume ' + volume_name
-        ))
+            ' --volume ' + volume_name,
+            parse_output=True,
+        )
         self.wait_for_status("volume snapshot", snapshot_name, "available")
 
         name = uuid.uuid4().hex
         # Create volume from snapshot
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--snapshot ' + snapshot_name +
-            ' ' + name
-        ))
+            ' ' + name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name)
         self.addCleanup(self.openstack, 'volume delete ' + volume_name)
         self.assertEqual(
@@ -253,11 +264,12 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_list_backward_compatibility(self):
         """Test backward compatibility of list command"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            name1
-        ))
+            name1,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name1)
         self.assertEqual(
             1,
@@ -266,17 +278,19 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name1, "available")
 
         # Test list -c "Display Name"
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Display Name"'
-        ))
+        cmd_output = self.openstack(
+            'volume list ' +
+            '-c "Display Name"',
+            parse_output=True,
+        )
         for each_volume in cmd_output:
             self.assertIn('Display Name', each_volume)
 
         # Test list -c "Name"
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Name"'
-        ))
+        cmd_output = self.openstack(
+            'volume list ' +
+            '-c "Name"',
+            parse_output=True,
+        )
         for each_volume in cmd_output:
             self.assertIn('Name', each_volume)
diff --git a/openstackclient/tests/functional/volume/v2/test_volume_backup.py b/openstackclient/tests/functional/volume/v2/test_volume_backup.py
index 6868bd40d7..07bd2d161c 100644
--- a/openstackclient/tests/functional/volume/v2/test_volume_backup.py
+++ b/openstackclient/tests/functional/volume/v2/test_volume_backup.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v2 import common
@@ -22,7 +21,7 @@ class VolumeBackupTests(common.BaseVolumeTests):
     def setUp(self):
         super(VolumeBackupTests, self).setUp()
         self.backup_enabled = False
-        serv_list = json.loads(self.openstack('volume service list -f json'))
+        serv_list = self.openstack('volume service list', parse_output=True)
         for service in serv_list:
             if service['Binary'] == 'cinder-backup':
                 if service['Status'] == 'enabled':
@@ -34,24 +33,28 @@ class VolumeBackupTests(common.BaseVolumeTests):
             self.skipTest('Backup service is not enabled')
         vol_id = uuid.uuid4().hex
         # create a volume
-        json.loads(self.openstack(
-            'volume create -f json ' +
+        self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            vol_id
-        ))
+            vol_id,
+            parse_output=True,
+        )
         self.wait_for_status("volume", vol_id, "available")
 
         # create a backup
-        backup = json.loads(self.openstack(
-            'volume backup create -f json ' +
-            vol_id
-        ))
+        backup = self.openstack(
+            'volume backup create ' +
+            vol_id,
+            parse_output=True,
+        )
         self.wait_for_status("volume backup", backup['id'], "available")
 
         # restore the backup
-        backup_restored = json.loads(self.openstack(
-            'volume backup restore -f json %s %s'
-            % (backup['id'], vol_id)))
+        backup_restored = self.openstack(
+            'volume backup restore %s %s'
+            % (backup['id'], vol_id),
+            parse_output=True,
+        )
         self.assertEqual(backup_restored['backup_id'], backup['id'])
         self.wait_for_status("volume backup", backup['id'], "available")
         self.wait_for_status("volume", backup_restored['volume_id'],
diff --git a/openstackclient/tests/functional/volume/v2/test_volume_snapshot.py b/openstackclient/tests/functional/volume/v2/test_volume_snapshot.py
index 4977a73ebc..12fdad2c35 100644
--- a/openstackclient/tests/functional/volume/v2/test_volume_snapshot.py
+++ b/openstackclient/tests/functional/volume/v2/test_volume_snapshot.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v2 import common
@@ -25,11 +24,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def setUpClass(cls):
         super(VolumeSnapshotTests, cls).setUpClass()
         # create a volume for all tests to create snapshot
-        cmd_output = json.loads(cls.openstack(
-            'volume create -f json ' +
+        cmd_output = cls.openstack(
+            'volume create ' +
             '--size 1 ' +
-            cls.VOLLY
-        ))
+            cls.VOLLY,
+            parse_output=True,
+        )
         cls.wait_for_status('volume', cls.VOLLY, 'available')
         cls.VOLUME_ID = cmd_output['id']
 
@@ -46,22 +46,24 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output["name"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output["name"],
@@ -79,11 +81,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name1)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name1)
         self.assertEqual(
@@ -101,11 +104,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.wait_for_status('volume snapshot', name1, 'available')
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name2)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name2)
         self.assertEqual(
@@ -130,11 +134,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test list --long, --status
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
             '--long ' +
-            '--status error_deleting'
-        ))
+            '--status error_deleting',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertIn(name2, names)
@@ -147,29 +152,32 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test list --long, --status
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
             '--long ' +
-            '--status error'
-        ))
+            '--status error',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --volume
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--volume ' + self.VOLLY
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--volume ' + self.VOLLY,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --name
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--name ' + name1
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--name ' + name1,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertNotIn(name2, names)
@@ -178,13 +186,14 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         """Test create, set, unset, show, delete volume snapshot"""
         name = uuid.uuid4().hex
         new_name = name + "_"
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             '--volume ' + self.VOLLY +
             ' --description aaaa ' +
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', new_name)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + new_name)
         self.assertEqual(
@@ -217,10 +226,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Show snapshot set result
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["name"],
@@ -246,10 +256,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Beta': 'b'},
             cmd_output["properties"],
@@ -262,10 +273,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
             new_name,
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertNotIn(
             {'Beta': 'b'},
             cmd_output["properties"],
diff --git a/openstackclient/tests/functional/volume/v2/test_volume_type.py b/openstackclient/tests/functional/volume/v2/test_volume_type.py
index 861c393d80..5cad92971d 100644
--- a/openstackclient/tests/functional/volume/v2/test_volume_type.py
+++ b/openstackclient/tests/functional/volume/v2/test_volume_type.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import time
 import uuid
 
@@ -22,36 +21,40 @@ class VolumeTypeTests(common.BaseVolumeTests):
 
     def test_volume_type_create_list(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name,
         )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack('volume type list -f json'))
+        cmd_output = self.openstack('volume type list', parse_output=True)
         self.assertIn(name, [t['Name'] for t in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --default'
-        ))
+        cmd_output = self.openstack(
+            'volume type list --default',
+            parse_output=True,
+        )
         self.assertEqual(1, len(cmd_output))
         self.assertEqual('lvmdriver-1', cmd_output[0]['Name'])
 
     def test_volume_type_set_unset_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -62,26 +65,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'c': 'd'}, cmd_output['properties'])
 
     def test_volume_type_set_unset_multiple_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -92,26 +98,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a --property c %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['properties'])
 
     def test_volume_type_set_unset_project(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -147,13 +156,15 @@ class VolumeTypeTests(common.BaseVolumeTests):
         name = uuid.uuid4().hex
         encryption_type = uuid.uuid4().hex
         # test create new encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json '
+        cmd_output = self.openstack(
+            'volume type create '
             '--encryption-provider LuksEncryptor '
             '--encryption-cipher aes-xts-plain64 '
             '--encryption-key-size 128 '
             '--encryption-control-location front-end ' +
-            encryption_type))
+            encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -161,8 +172,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test show encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + encryption_type))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -170,8 +183,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test list encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --encryption-type'))
+        cmd_output = self.openstack(
+            'volume type list --encryption-type',
+            parse_output=True,
+        )
         encryption_output = [t['Encryption'] for t in cmd_output
                              if t['Name'] == encryption_type][0]
         expected = {'provider': 'LuksEncryptor',
@@ -187,8 +202,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             '--encryption-control-location back-end ' +
             encryption_type)
         self.assertEqual('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + encryption_type))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 256,
@@ -196,10 +213,11 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test set new encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name,
@@ -215,9 +233,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             name)
         self.assertEqual('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -229,9 +248,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type unset --encryption-type ' + name
         )
         self.assertEqual('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['encryption'])
         # test delete encryption type
         raw_output = self.openstack('volume type delete ' + encryption_type)
diff --git a/openstackclient/tests/functional/volume/v3/test_qos.py b/openstackclient/tests/functional/volume/v3/test_qos.py
index fdfa682791..51578e1445 100644
--- a/openstackclient/tests/functional/volume/v3/test_qos.py
+++ b/openstackclient/tests/functional/volume/v3/test_qos.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v3 import common
@@ -22,29 +21,32 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_create_delete_list(self):
         """Test create, list, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name1,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output['name']
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name2
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name2,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output['name']
         )
 
         # Test list
-        cmd_output = json.loads(self.openstack(
-            'volume qos list -f json'
-        ))
+        cmd_output = self.openstack(
+            'volume qos list',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
@@ -57,12 +59,13 @@ class QosTests(common.BaseVolumeTests):
         """Tests create volume qos, set, unset, show, delete"""
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
+        cmd_output = self.openstack(
+            'volume qos create ' +
             '--consumer front-end '
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume qos delete ' + name)
         self.assertEqual(
             name,
@@ -88,10 +91,11 @@ class QosTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test volume qos show
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -109,10 +113,11 @@ class QosTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -125,10 +130,11 @@ class QosTests(common.BaseVolumeTests):
     def test_volume_qos_asso_disasso(self):
         """Tests associate and disassociate qos with volume type"""
         vol_type1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json ' +
-            vol_type1
-        ))
+        cmd_output = self.openstack(
+            'volume type create ' +
+            vol_type1,
+            parse_output=True,
+        )
         self.assertEqual(
             vol_type1,
             cmd_output['name']
@@ -136,10 +142,11 @@ class QosTests(common.BaseVolumeTests):
         self.addCleanup(self.openstack, 'volume type delete ' + vol_type1)
 
         vol_type2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json ' +
-            vol_type2
-        ))
+        cmd_output = self.openstack(
+            'volume type create ' +
+            vol_type2,
+            parse_output=True,
+        )
         self.assertEqual(
             vol_type2,
             cmd_output['name']
@@ -147,10 +154,11 @@ class QosTests(common.BaseVolumeTests):
         self.addCleanup(self.openstack, 'volume type delete ' + vol_type2)
 
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume qos create -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos create ' +
+            name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
             cmd_output['name']
@@ -169,10 +177,11 @@ class QosTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -184,10 +193,11 @@ class QosTests(common.BaseVolumeTests):
             ' ' + name
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertNotIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -198,10 +208,11 @@ class QosTests(common.BaseVolumeTests):
             name + ' ' + vol_type1
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         types = cmd_output["associations"]
         self.assertIn(vol_type1, types)
         self.assertIn(vol_type2, types)
@@ -211,8 +222,9 @@ class QosTests(common.BaseVolumeTests):
             '--all ' + name
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume qos show -f json ' +
-            name
-        ))
+        cmd_output = self.openstack(
+            'volume qos show ' +
+            name,
+            parse_output=True,
+        )
         self.assertNotIn("associations", cmd_output.keys())
diff --git a/openstackclient/tests/functional/volume/v3/test_transfer_request.py b/openstackclient/tests/functional/volume/v3/test_transfer_request.py
index 1bbfedc902..449fa08e92 100644
--- a/openstackclient/tests/functional/volume/v3/test_transfer_request.py
+++ b/openstackclient/tests/functional/volume/v3/test_transfer_request.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v3 import common
@@ -26,11 +25,12 @@ class TransferRequestTests(common.BaseVolumeTests):
         xfer_name = uuid.uuid4().hex
 
         # create a volume
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
-            volume_name
-        ))
+            volume_name,
+            parse_output=True,
+        )
         self.assertEqual(volume_name, cmd_output['name'])
         self.addCleanup(
             self.openstack,
@@ -42,12 +42,12 @@ class TransferRequestTests(common.BaseVolumeTests):
 
         # create volume transfer request for the volume
         # and get the auth_key of the new transfer request
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request create -f json ' +
-            ' --name ' + xfer_name + ' ' +
-            volume_name
-        ))
+            'volume transfer request create ' +
+            ' --name ' + xfer_name + ' ' + volume_name,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         xfer_id = cmd_output['id']
         auth_key = cmd_output['auth_key']
@@ -55,12 +55,12 @@ class TransferRequestTests(common.BaseVolumeTests):
         self.wait_for_status("volume", volume_name, "awaiting-transfer")
 
         # accept the volume transfer request
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request accept -f json ' +
-            '--auth-key ' + auth_key + ' ' +
-            xfer_id
-        ))
+            'volume transfer request accept ' +
+            '--auth-key ' + auth_key + ' ' + xfer_id,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         self.wait_for_status("volume", volume_name, "available")
 
@@ -69,11 +69,11 @@ class TransferRequestTests(common.BaseVolumeTests):
         xfer_name = uuid.uuid4().hex
 
         # create a volume
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 1 ' +
-            volume_name
-        ))
+        cmd_output = self.openstack(
+            'volume create ' +
+            '--size 1 ' + volume_name,
+            parse_output=True,
+        )
         self.assertEqual(volume_name, cmd_output['name'])
         self.addCleanup(
             self.openstack,
@@ -83,29 +83,31 @@ class TransferRequestTests(common.BaseVolumeTests):
         )
         self.wait_for_status("volume", volume_name, "available")
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request create -f json ' +
-            ' --name ' + xfer_name + ' ' +
-            volume_name
-        ))
+            'volume transfer request create ' +
+            ' --name ' + xfer_name + ' ' + volume_name,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
         xfer_id = cmd_output['id']
         auth_key = cmd_output['auth_key']
         self.assertTrue(auth_key)
         self.wait_for_status("volume", volume_name, "awaiting-transfer")
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request list -f json'
-        ))
+            'volume transfer request list',
+            parse_output=True,
+        )
         self.assertIn(xfer_name, [req['Name'] for req in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
+        cmd_output = self.openstack(
             '--os-volume-api-version ' + self.API_VERSION + ' ' +
-            'volume transfer request show -f json ' +
-            xfer_id
-        ))
+            'volume transfer request show ' +
+            xfer_id,
+            parse_output=True,
+        )
         self.assertEqual(xfer_name, cmd_output['name'])
 
         # NOTE(dtroyer): We need to delete the transfer request to allow the
diff --git a/openstackclient/tests/functional/volume/v3/test_volume.py b/openstackclient/tests/functional/volume/v3/test_volume.py
index c1b45e2ff7..8a394e7515 100644
--- a/openstackclient/tests/functional/volume/v3/test_volume.py
+++ b/openstackclient/tests/functional/volume/v3/test_volume.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v3 import common
@@ -22,22 +21,20 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 1 ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 1 ' + name1,
+            parse_output=True,
+        )
         self.assertEqual(
             1,
             cmd_output["size"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 2 ' +
-            name2
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 2 ' + name2,
+            parse_output=True,
+        )
         self.assertEqual(
             2,
             cmd_output["size"],
@@ -51,11 +48,10 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 1 ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 1 ' + name1,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name1)
         self.assertEqual(
             1,
@@ -64,11 +60,10 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name1, "available")
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 2 ' +
-            name2
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 2 ' + name2,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name2)
         self.assertEqual(
             2,
@@ -83,19 +78,19 @@ class VolumeTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test list --long
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '--long'
-        ))
+        cmd_output = self.openstack(
+            'volume list --long',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --status
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '--status error'
-        ))
+        cmd_output = self.openstack(
+            'volume list --status error',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertIn(name2, names)
@@ -107,13 +102,14 @@ class VolumeTests(common.BaseVolumeTests):
         """Tests create volume, set, unset, show, delete"""
         name = uuid.uuid4().hex
         new_name = name + "_"
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--size 1 ' +
             '--description aaaa ' +
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + new_name)
         self.assertEqual(
             name,
@@ -154,10 +150,10 @@ class VolumeTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
         self.wait_for_status("volume", new_name, "available")
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' + new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["name"],
@@ -192,10 +188,10 @@ class VolumeTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume show ' + new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Gamma': 'c'},
             cmd_output["properties"],
@@ -211,30 +207,31 @@ class VolumeTests(common.BaseVolumeTests):
         volume_name = uuid.uuid4().hex
         snapshot_name = uuid.uuid4().hex
         # Make a snapshot
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 1 ' +
-            volume_name
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 1 ' + volume_name,
+            parse_output=True,
+        )
         self.wait_for_status("volume", volume_name, "available")
         self.assertEqual(
             volume_name,
             cmd_output["name"],
         )
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             snapshot_name +
-            ' --volume ' + volume_name
-        ))
+            ' --volume ' + volume_name,
+            parse_output=True,
+        )
         self.wait_for_status("volume snapshot", snapshot_name, "available")
 
         name = uuid.uuid4().hex
         # Create volume from snapshot
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
+        cmd_output = self.openstack(
+            'volume create ' +
             '--snapshot ' + snapshot_name +
-            ' ' + name
-        ))
+            ' ' + name,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name)
         self.addCleanup(self.openstack, 'volume delete ' + volume_name)
         self.assertEqual(
@@ -254,11 +251,10 @@ class VolumeTests(common.BaseVolumeTests):
     def test_volume_list_backward_compatibility(self):
         """Test backward compatibility of list command"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume create -f json ' +
-            '--size 1 ' +
-            name1
-        ))
+        cmd_output = self.openstack(
+            'volume create --size 1 ' + name1,
+            parse_output=True,
+        )
         self.addCleanup(self.openstack, 'volume delete ' + name1)
         self.assertEqual(
             1,
@@ -267,17 +263,17 @@ class VolumeTests(common.BaseVolumeTests):
         self.wait_for_status("volume", name1, "available")
 
         # Test list -c "Display Name"
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Display Name"'
-        ))
+        cmd_output = self.openstack(
+            'volume list -c "Display Name"',
+            parse_output=True,
+        )
         for each_volume in cmd_output:
             self.assertIn('Display Name', each_volume)
 
         # Test list -c "Name"
-        cmd_output = json.loads(self.openstack(
-            'volume list -f json ' +
-            '-c "Name"'
-        ))
+        cmd_output = self.openstack(
+            'volume list -c "Name"',
+            parse_output=True,
+        )
         for each_volume in cmd_output:
             self.assertIn('Name', each_volume)
diff --git a/openstackclient/tests/functional/volume/v3/test_volume_snapshot.py b/openstackclient/tests/functional/volume/v3/test_volume_snapshot.py
index edfdafb6bd..7b2d88d095 100644
--- a/openstackclient/tests/functional/volume/v3/test_volume_snapshot.py
+++ b/openstackclient/tests/functional/volume/v3/test_volume_snapshot.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from openstackclient.tests.functional.volume.v3 import common
@@ -25,11 +24,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def setUpClass(cls):
         super(VolumeSnapshotTests, cls).setUpClass()
         # create a volume for all tests to create snapshot
-        cmd_output = json.loads(cls.openstack(
-            'volume create -f json ' +
+        cmd_output = cls.openstack(
+            'volume create ' +
             '--size 1 ' +
-            cls.VOLLY
-        ))
+            cls.VOLLY,
+            parse_output=True,
+        )
         cls.wait_for_status('volume', cls.VOLLY, 'available')
         cls.VOLUME_ID = cmd_output['id']
 
@@ -46,22 +46,24 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_delete(self):
         """Test create, delete multiple"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name1,
             cmd_output["name"],
         )
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.assertEqual(
             name2,
             cmd_output["name"],
@@ -79,11 +81,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
     def test_volume_snapshot_list(self):
         """Test create, list filter"""
         name1 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name1 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name1)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name1)
         self.assertEqual(
@@ -101,11 +104,12 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.wait_for_status('volume snapshot', name1, 'available')
 
         name2 = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             name2 +
-            ' --volume ' + self.VOLLY
-        ))
+            ' --volume ' + self.VOLLY,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', name2)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + name2)
         self.assertEqual(
@@ -129,29 +133,32 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Test list --long, --status
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
             '--long ' +
-            '--status error'
-        ))
+            '--status error',
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertNotIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --volume
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--volume ' + self.VOLLY
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--volume ' + self.VOLLY,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertIn(name2, names)
 
         # Test list --name
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot list -f json ' +
-            '--name ' + name1
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot list ' +
+            '--name ' + name1,
+            parse_output=True,
+        )
         names = [x["Name"] for x in cmd_output]
         self.assertIn(name1, names)
         self.assertNotIn(name2, names)
@@ -160,13 +167,14 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         """Test create, set, unset, show, delete volume snapshot"""
         name = uuid.uuid4().hex
         new_name = name + "_"
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot create -f json ' +
+        cmd_output = self.openstack(
+            'volume snapshot create ' +
             '--volume ' + self.VOLLY +
             ' --description aaaa ' +
             '--property Alpha=a ' +
-            name
-        ))
+            name,
+            parse_output=True,
+        )
         self.addCleanup(self.wait_for_delete, 'volume snapshot', new_name)
         self.addCleanup(self.openstack, 'volume snapshot delete ' + new_name)
         self.assertEqual(
@@ -199,10 +207,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         self.assertOutput('', raw_output)
 
         # Show snapshot set result
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             new_name,
             cmd_output["name"],
@@ -228,10 +237,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
         )
         self.assertOutput('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertEqual(
             {'Beta': 'b'},
             cmd_output["properties"],
@@ -244,10 +254,11 @@ class VolumeSnapshotTests(common.BaseVolumeTests):
             new_name,
         )
         self.assertOutput('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume snapshot show -f json ' +
-            new_name
-        ))
+        cmd_output = self.openstack(
+            'volume snapshot show ' +
+            new_name,
+            parse_output=True,
+        )
         self.assertNotIn(
             {'Beta': 'b'},
             cmd_output["properties"],
diff --git a/openstackclient/tests/functional/volume/v3/test_volume_type.py b/openstackclient/tests/functional/volume/v3/test_volume_type.py
index 165c625c20..18e46c5247 100644
--- a/openstackclient/tests/functional/volume/v3/test_volume_type.py
+++ b/openstackclient/tests/functional/volume/v3/test_volume_type.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import time
 import uuid
 
@@ -22,36 +21,40 @@ class VolumeTypeTests(common.BaseVolumeTests):
 
     def test_volume_type_create_list(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name,
         )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual(name, cmd_output['name'])
 
-        cmd_output = json.loads(self.openstack('volume type list -f json'))
+        cmd_output = self.openstack('volume type list', parse_output=True)
         self.assertIn(name, [t['Name'] for t in cmd_output])
 
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --default'
-        ))
+        cmd_output = self.openstack(
+            'volume type list --default',
+            parse_output=True,
+        )
         self.assertEqual(1, len(cmd_output))
         self.assertEqual('lvmdriver-1', cmd_output[0]['Name'])
 
     def test_volume_type_set_unset_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -62,26 +65,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'c': 'd'}, cmd_output['properties'])
 
     def test_volume_type_set_unset_multiple_properties(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -92,26 +98,29 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type set --property a=b --property c=d %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({'a': 'b', 'c': 'd'}, cmd_output['properties'])
 
         raw_output = self.openstack(
             'volume type unset --property a --property c %s' % name
         )
         self.assertEqual("", raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json %s' % name
-        ))
+        cmd_output = self.openstack(
+            'volume type show %s' % name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['properties'])
 
     def test_volume_type_set_unset_project(self):
         name = uuid.uuid4().hex
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name
@@ -147,13 +156,15 @@ class VolumeTypeTests(common.BaseVolumeTests):
         name = uuid.uuid4().hex
         encryption_type = uuid.uuid4().hex
         # test create new encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json '
+        cmd_output = self.openstack(
+            'volume type create '
             '--encryption-provider LuksEncryptor '
             '--encryption-cipher aes-xts-plain64 '
             '--encryption-key-size 128 '
             '--encryption-control-location front-end ' +
-            encryption_type))
+            encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -161,8 +172,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test show encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + encryption_type))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -170,8 +183,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test list encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type list -f json --encryption-type'))
+        cmd_output = self.openstack(
+            'volume type list --encryption-type',
+            parse_output=True,
+        )
         encryption_output = [t['Encryption'] for t in cmd_output
                              if t['Name'] == encryption_type][0]
         expected = {'provider': 'LuksEncryptor',
@@ -187,8 +202,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             '--encryption-control-location back-end ' +
             encryption_type)
         self.assertEqual('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + encryption_type))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + encryption_type,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 256,
@@ -196,10 +213,11 @@ class VolumeTypeTests(common.BaseVolumeTests):
         for attr, value in expected.items():
             self.assertEqual(value, cmd_output['encryption'][attr])
         # test set new encryption type
-        cmd_output = json.loads(self.openstack(
-            'volume type create -f json --private ' +
+        cmd_output = self.openstack(
+            'volume type create --private ' +
             name,
-        ))
+            parse_output=True,
+        )
         self.addCleanup(
             self.openstack,
             'volume type delete ' + name,
@@ -215,9 +233,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             name)
         self.assertEqual('', raw_output)
 
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         expected = {'provider': 'LuksEncryptor',
                     'cipher': 'aes-xts-plain64',
                     'key_size': 128,
@@ -229,9 +248,10 @@ class VolumeTypeTests(common.BaseVolumeTests):
             'volume type unset --encryption-type ' + name
         )
         self.assertEqual('', raw_output)
-        cmd_output = json.loads(self.openstack(
-            'volume type show -f json --encryption-type ' + name
-        ))
+        cmd_output = self.openstack(
+            'volume type show --encryption-type ' + name,
+            parse_output=True,
+        )
         self.assertEqual({}, cmd_output['encryption'])
         # test delete encryption type
         raw_output = self.openstack('volume type delete ' + encryption_type)