diff --git a/openstackclient/tests/functional/common/test_args.py b/openstackclient/tests/functional/common/test_args.py
index 02cad6c16a..1f5ecc1cfe 100644
--- a/openstackclient/tests/functional/common/test_args.py
+++ b/openstackclient/tests/functional/common/test_args.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from tempest.lib import exceptions as tempest_exc
 
 from openstackclient.tests.functional import base
@@ -21,10 +19,11 @@ class ArgumentTests(base.TestCase):
     """Functional tests for command line arguments"""
 
     def test_default_auth_type(self):
-        cmd_output = json.loads(self.openstack(
-            'configuration show -f json',
+        cmd_output = self.openstack(
+            'configuration show',
             cloud='',
-        ))
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertIn(
             'auth_type',
@@ -36,10 +35,11 @@ class ArgumentTests(base.TestCase):
         )
 
     def test_auth_type_none(self):
-        cmd_output = json.loads(self.openstack(
-            'configuration show -f json',
+        cmd_output = self.openstack(
+            'configuration show',
             cloud=None,
-        ))
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertIn(
             'auth_type',
@@ -54,7 +54,7 @@ class ArgumentTests(base.TestCase):
         # Make sure token_endpoint is really gone
         try:
             self.openstack(
-                'configuration show -f json --os-auth-type token_endpoint',
+                'configuration show --os-auth-type token_endpoint',
                 cloud=None,
             )
         except tempest_exc.CommandFailed as e:
@@ -64,10 +64,11 @@ class ArgumentTests(base.TestCase):
             self.fail('CommandFailed should be raised')
 
     def test_auth_type_password_opt(self):
-        cmd_output = json.loads(self.openstack(
-            'configuration show -f json --os-auth-type password',
+        cmd_output = self.openstack(
+            'configuration show --os-auth-type password',
             cloud=None,
-        ))
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertIn(
             'auth_type',
diff --git a/openstackclient/tests/functional/common/test_availability_zone.py b/openstackclient/tests/functional/common/test_availability_zone.py
index 025da95c24..f319ffc5ef 100644
--- a/openstackclient/tests/functional/common/test_availability_zone.py
+++ b/openstackclient/tests/functional/common/test_availability_zone.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from openstackclient.tests.functional import base
 
 
@@ -19,8 +17,10 @@ class AvailabilityZoneTests(base.TestCase):
     """Functional tests for availability zone. """
 
     def test_availability_zone_list(self):
-        cmd_output = json.loads(self.openstack(
-            'availability zone list -f json'))
+        cmd_output = self.openstack(
+            'availability zone list',
+            parse_output=True,
+        )
         zones = [x['Zone Name'] for x in cmd_output]
         self.assertIn(
             'internal',
diff --git a/openstackclient/tests/functional/common/test_configuration.py b/openstackclient/tests/functional/common/test_configuration.py
index 17e0f45d1f..614b3e46ee 100644
--- a/openstackclient/tests/functional/common/test_configuration.py
+++ b/openstackclient/tests/functional/common/test_configuration.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import os
 
 from openstackclient.common import configuration
@@ -30,9 +29,7 @@ class ConfigurationTests(base.TestCase):
         items = self.parse_listing(raw_output)
         self.assert_table_structure(items, BASIC_CONFIG_HEADERS)
 
-        cmd_output = json.loads(self.openstack(
-            'configuration show -f json'
-        ))
+        cmd_output = self.openstack('configuration show', parse_output=True)
         self.assertEqual(
             configuration.REDACTED,
             cmd_output['auth.password']
@@ -43,18 +40,18 @@ class ConfigurationTests(base.TestCase):
         )
 
         # Test show --mask
-        cmd_output = json.loads(self.openstack(
-            'configuration show --mask -f json'
-        ))
+        cmd_output = self.openstack(
+            'configuration show --mask', parse_output=True,
+        )
         self.assertEqual(
             configuration.REDACTED,
             cmd_output['auth.password']
         )
 
         # Test show --unmask
-        cmd_output = json.loads(self.openstack(
-            'configuration show --unmask -f json'
-        ))
+        cmd_output = self.openstack(
+            'configuration show --unmask', parse_output=True,
+        )
         # If we are using os-client-config, this will not be set.  Rather than
         # parse clouds.yaml to get the right value, just make sure
         # we are not getting redacted.
@@ -84,10 +81,11 @@ class ConfigurationTestsNoAuth(base.TestCase):
         items = self.parse_listing(raw_output)
         self.assert_table_structure(items, BASIC_CONFIG_HEADERS)
 
-        cmd_output = json.loads(self.openstack(
-            'configuration show -f json',
+        cmd_output = self.openstack(
+            'configuration show',
             cloud=None,
-        ))
+            parse_output=True,
+        )
         self.assertNotIn(
             'auth.password',
             cmd_output,
diff --git a/openstackclient/tests/functional/common/test_extension.py b/openstackclient/tests/functional/common/test_extension.py
index 92efabefe9..8784c55b14 100644
--- a/openstackclient/tests/functional/common/test_extension.py
+++ b/openstackclient/tests/functional/common/test_extension.py
@@ -13,8 +13,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from tempest.lib import exceptions as tempest_exc
 
 from openstackclient.tests.functional import base
@@ -30,11 +28,11 @@ class ExtensionTests(base.TestCase):
 
     def test_extension_list_compute(self):
         """Test compute extension list"""
-        json_output = json.loads(self.openstack(
-            'extension list -f json ' +
-            '--compute'
-        ))
-        name_list = [item.get('Name') for item in json_output]
+        output = self.openstack(
+            'extension list --compute',
+            parse_output=True,
+        )
+        name_list = [item.get('Name') for item in output]
         self.assertIn(
             'ImageSize',
             name_list,
@@ -42,11 +40,11 @@ class ExtensionTests(base.TestCase):
 
     def test_extension_list_volume(self):
         """Test volume extension list"""
-        json_output = json.loads(self.openstack(
-            'extension list -f json ' +
-            '--volume'
-        ))
-        name_list = [item.get('Name') for item in json_output]
+        output = self.openstack(
+            'extension list --volume',
+            parse_output=True,
+        )
+        name_list = [item.get('Name') for item in output]
         self.assertIn(
             'TypesManage',
             name_list,
@@ -57,43 +55,29 @@ class ExtensionTests(base.TestCase):
         if not self.haz_network:
             self.skipTest("No Network service present")
 
-        json_output = json.loads(self.openstack(
-            'extension list -f json ' +
-            '--network'
-        ))
-        name_list = [item.get('Name') for item in json_output]
+        output = self.openstack(
+            'extension list --network',
+            parse_output=True,
+        )
+        name_list = [item.get('Name') for item in output]
         self.assertIn(
             'Default Subnetpools',
             name_list,
         )
 
-    # NOTE(dtroyer): Only network extensions are currently supported but
-    #                I am going to leave this here anyway as a reminder
-    #                fix that.
-    # def test_extension_show_compute(self):
-    #     """Test compute extension show"""
-    #     json_output = json.loads(self.openstack(
-    #         'extension show -f json ' +
-    #         'ImageSize'
-    #     ))
-    #     self.assertEqual(
-    #         'OS-EXT-IMG-SIZE',
-    #         json_output.get('Alias'),
-    #     )
-
     def test_extension_show_network(self):
         """Test network extension show"""
         if not self.haz_network:
             self.skipTest("No Network service present")
 
         name = 'agent'
-        json_output = json.loads(self.openstack(
-            'extension show -f json ' +
-            name
-        ))
+        output = self.openstack(
+            'extension show ' + name,
+            parse_output=True,
+        )
         self.assertEqual(
             name,
-            json_output.get('alias'),
+            output.get('alias'),
         )
 
     def test_extension_show_not_exist(self):
diff --git a/openstackclient/tests/functional/common/test_quota.py b/openstackclient/tests/functional/common/test_quota.py
index 9089cba5c0..6e48df1d76 100644
--- a/openstackclient/tests/functional/common/test_quota.py
+++ b/openstackclient/tests/functional/common/test_quota.py
@@ -10,7 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
 import uuid
 
 from tempest.lib import exceptions
@@ -36,9 +35,10 @@ class QuotaTests(base.TestCase):
 
     def test_quota_list_details_compute(self):
         expected_headers = ["Resource", "In Use", "Reserved", "Limit"]
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --detail --compute'
-        ))
+        cmd_output = self.openstack(
+            'quota list --detail --compute',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         resources = []
         for row in cmd_output:
@@ -52,9 +52,10 @@ class QuotaTests(base.TestCase):
 
     def test_quota_list_details_network(self):
         expected_headers = ["Resource", "In Use", "Reserved", "Limit"]
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --detail --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --detail --network',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         resources = []
         for row in cmd_output:
@@ -70,9 +71,10 @@ class QuotaTests(base.TestCase):
         if not self.haz_network:
             self.skipTest("No Network service present")
         self.openstack('quota set --networks 40 ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(
             40,
@@ -81,9 +83,10 @@ class QuotaTests(base.TestCase):
 
     def test_quota_list_compute_option(self):
         self.openstack('quota set --instances 30 ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --compute'
-        ))
+        cmd_output = self.openstack(
+            'quota list --compute',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(
             30,
@@ -92,9 +95,10 @@ class QuotaTests(base.TestCase):
 
     def test_quota_list_volume_option(self):
         self.openstack('quota set --volumes 20 ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --volume'
-        ))
+        cmd_output = self.openstack(
+            'quota list --volume',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(
             20,
@@ -111,9 +115,10 @@ class QuotaTests(base.TestCase):
             network_option +
             self.PROJECT_NAME
         )
-        cmd_output = json.loads(self.openstack(
-            'quota show -f json ' + self.PROJECT_NAME
-        ))
+        cmd_output = self.openstack(
+            'quota show ' + self.PROJECT_NAME,
+            parse_output=True,
+        )
         cmd_output = {x['Resource']: x['Limit'] for x in cmd_output}
         self.assertIsNotNone(cmd_output)
         self.assertEqual(
@@ -131,9 +136,10 @@ class QuotaTests(base.TestCase):
             )
 
         # Check default quotas
-        cmd_output = json.loads(self.openstack(
-            'quota show -f json --default'
-        ))
+        cmd_output = self.openstack(
+            'quota show --default',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         # We don't necessarily know the default quotas, we're checking the
         # returned attributes
@@ -148,9 +154,10 @@ class QuotaTests(base.TestCase):
             'quota set --key-pairs 33 --snapshots 43 ' +
             '--class default'
         )
-        cmd_output = json.loads(self.openstack(
-            'quota show -f json --class default'
-        ))
+        cmd_output = self.openstack(
+            'quota show --class default',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         cmd_output = {x['Resource']: x['Limit'] for x in cmd_output}
         self.assertEqual(
@@ -163,9 +170,10 @@ class QuotaTests(base.TestCase):
         )
 
         # Check default quota class
-        cmd_output = json.loads(self.openstack(
-            'quota show -f json --class'
-        ))
+        cmd_output = self.openstack(
+            'quota show --class',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         # We don't necessarily know the default quotas, we're checking the
         # returned attributes
@@ -182,16 +190,18 @@ class QuotaTests(base.TestCase):
         if not self.is_extension_enabled('quota-check-limit'):
             self.skipTest('No "quota-check-limit" extension present')
 
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.addCleanup(self._restore_quota_limit, 'network',
                         cmd_output[0]['Networks'], self.PROJECT_NAME)
 
         self.openstack('quota set --networks 40 ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(40, cmd_output[0]['Networks'])
 
@@ -218,16 +228,18 @@ class QuotaTests(base.TestCase):
         if not self.is_extension_enabled('quota-check-limit'):
             self.skipTest('No "quota-check-limit" extension present')
 
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.addCleanup(self._restore_quota_limit, 'network',
                         cmd_output[0]['Networks'], self.PROJECT_NAME)
 
         self.openstack('quota set --networks 40 ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(40, cmd_output[0]['Networks'])
 
@@ -237,8 +249,9 @@ class QuotaTests(base.TestCase):
                            (self.PROJECT_NAME, uuid.uuid4().hex))
 
         self.openstack('quota set --networks 1 --force ' + self.PROJECT_NAME)
-        cmd_output = json.loads(self.openstack(
-            'quota list -f json --network'
-        ))
+        cmd_output = self.openstack(
+            'quota list --network',
+            parse_output=True,
+        )
         self.assertIsNotNone(cmd_output)
         self.assertEqual(1, cmd_output[0]['Networks'])
diff --git a/openstackclient/tests/functional/common/test_versions.py b/openstackclient/tests/functional/common/test_versions.py
index adc74ebc6c..6575671aa1 100644
--- a/openstackclient/tests/functional/common/test_versions.py
+++ b/openstackclient/tests/functional/common/test_versions.py
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import json
-
 from openstackclient.tests.functional import base
 
 
@@ -21,9 +19,7 @@ class VersionsTests(base.TestCase):
     def test_versions_show(self):
         # TODO(mordred) Make this better. The trick is knowing what in the
         # payload to test for.
-        cmd_output = json.loads(self.openstack(
-            'versions show -f json'
-        ))
+        cmd_output = self.openstack('versions show', parse_output=True)
         self.assertIsNotNone(cmd_output)
         self.assertIn(
             "Region Name",