diff --git a/octavia_tempest_plugin/services/load_balancer/v2/amphora_client.py b/octavia_tempest_plugin/services/load_balancer/v2/amphora_client.py
index 54f280e..ce324cb 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/amphora_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/amphora_client.py
@@ -12,7 +12,7 @@
 #   License for the specific language governing permissions and limitations
 #   under the License.
 
-import json
+from oslo_serialization import jsonutils
 
 from tempest import config
 
@@ -154,6 +154,6 @@
         response, body = self.get(request_uri)
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))[self.stats_root_tag]
+            return jsonutils.loads(body.decode('utf-8'))[self.stats_root_tag]
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
diff --git a/octavia_tempest_plugin/services/load_balancer/v2/base_client.py b/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
index 397c735..a3ad153 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
@@ -13,9 +13,8 @@
 #   under the License.
 #
 
-import json
-
 from oslo_log import log as logging
+from oslo_serialization import jsonutils
 from tempest import config
 from tempest.lib.common import rest_client
 from tempest.lib.common.utils import test_utils
@@ -99,12 +98,12 @@
         else:
             request_uri = self.uri
 
-        response, body = self.post(request_uri, json.dumps(obj_dict))
+        response, body = self.post(request_uri, jsonutils.dumps(obj_dict))
         self.expected_success(201, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))[self.root_tag]
+            return jsonutils.loads(body.decode('utf-8'))[self.root_tag]
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
 
     def _show_object(self, obj_id, parent_id=None, query_params=None,
                      return_object_only=True):
@@ -156,9 +155,9 @@
         response, body = self.get(request_uri)
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))[self.root_tag]
+            return jsonutils.loads(body.decode('utf-8'))[self.root_tag]
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
 
     def _list_objects(self, parent_id=None, query_params=None,
                       return_object_only=True):
@@ -208,9 +207,9 @@
         response, body = self.get(request_uri)
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))[self.list_root_tag]
+            return jsonutils.loads(body.decode('utf-8'))[self.list_root_tag]
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
 
     def _update_object(self, obj_id, parent_id=None, return_object_only=True,
                        **kwargs):
@@ -258,12 +257,12 @@
             uri = self.uri
 
         request_uri = '{0}/{1}'.format(uri, obj_id)
-        response, body = self.put(request_uri, json.dumps(obj_dict))
+        response, body = self.put(request_uri, jsonutils.dumps(obj_dict))
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))[self.root_tag]
+            return jsonutils.loads(body.decode('utf-8'))[self.root_tag]
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
 
     def _delete_obj(self, obj_id, parent_id=None, ignore_errors=False,
                     cascade=False):
@@ -365,7 +364,7 @@
         try:
             request_uri = '{0}/{1}'.format(uri, obj_id)
             response, body = self.get(request_uri)
-            resp_obj = json.loads(body.decode('utf-8'))[self.root_tag]
+            resp_obj = jsonutils.loads(body.decode('utf-8'))[self.root_tag]
             if (response.status == 404 or
                     resp_obj['provisioning_status'] == const.DELETED):
                 raise exceptions.NotFound()
@@ -447,7 +446,7 @@
         response, body = self.get('/')
         self.expected_success(200, response.status)
 
-        versions_list = json.loads(body.decode('utf-8'))['versions']
+        versions_list = jsonutils.loads(body.decode('utf-8'))['versions']
         current_versions = (version for version in versions_list if
                             version['status'] == 'CURRENT')
         max_version = '0.0'
diff --git a/octavia_tempest_plugin/services/load_balancer/v2/listener_client.py b/octavia_tempest_plugin/services/load_balancer/v2/listener_client.py
index 082f4b7..de84bd1 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/listener_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/listener_client.py
@@ -13,6 +13,8 @@
 #   under the License.
 #
 
+from oslo_serialization import jsonutils
+
 from tempest import config
 
 from octavia_tempest_plugin.services.load_balancer.v2 import base_client
@@ -291,3 +293,53 @@
         """
         return self._delete_obj(obj_id=listener_id,
                                 ignore_errors=ignore_errors)
+
+    def get_listener_stats(self, listener_id, query_params=None,
+                           return_object_only=True):
+        """Get listener statistics.
+
+        :param listener_id: The listener ID to query.
+        :param query_params: The optional query parameters to append to the
+                             request. Ex. fields=id&fields=name
+        :param return_object_only: If True, the response returns the object
+                                   inside the root tag. False returns the full
+                                   response from the API.
+        :raises AssertionError: if the expected_code isn't a valid http success
+                                response code
+        :raises BadRequest: If a 400 response code is received
+        :raises Conflict: If a 409 response code is received
+        :raises Forbidden: If a 403 response code is received
+        :raises Gone: If a 410 response code is received
+        :raises InvalidContentType: If a 415 response code is received
+        :raises InvalidHTTPResponseBody: The response body wasn't valid JSON
+        :raises InvalidHttpSuccessCode: if the read code isn't an expected
+                                        http success code
+        :raises NotFound: If a 404 response code is received
+        :raises NotImplemented: If a 501 response code is received
+        :raises OverLimit: If a 413 response code is received and over_limit is
+                           not in the response body
+        :raises RateLimitExceeded: If a 413 response code is received and
+                                   over_limit is in the response body
+        :raises ServerFault: If a 500 response code is received
+        :raises Unauthorized: If a 401 response code is received
+        :raises UnexpectedContentType: If the content-type of the response
+                                       isn't an expect type
+        :raises UnexpectedResponseCode: If a response code above 400 is
+                                        received and it doesn't fall into any
+                                        of the handled checks
+        :raises UnprocessableEntity: If a 422 response code is received and
+                                     couldn't be parsed
+        :returns: A listener statistics object.
+        """
+        if query_params:
+            request_uri = '{0}/{1}/stats?{2}'.format(self.uri, listener_id,
+                                                     query_params)
+        else:
+            request_uri = '{0}/{1}/stats'.format(self.uri, listener_id)
+
+        response, body = self.get(request_uri)
+        self.expected_success(200, response.status)
+        if return_object_only:
+            return jsonutils.loads(body.decode('utf-8'))['stats']
+        else:
+            return jsonutils.loads(body.decode('utf-8'))
diff --git a/octavia_tempest_plugin/services/load_balancer/v2/loadbalancer_client.py b/octavia_tempest_plugin/services/load_balancer/v2/loadbalancer_client.py
index 6ea83f0..9a287cf 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/loadbalancer_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/loadbalancer_client.py
@@ -13,7 +13,7 @@
 #   under the License.
 #
 
-import json
+from oslo_serialization import jsonutils
 
 from tempest import config
 
@@ -337,9 +337,9 @@
         response, body = self.get(request_uri)
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))['stats']
+            return jsonutils.loads(body.decode('utf-8'))['stats']
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
 
     def get_loadbalancer_status(self, lb_id, query_params=None,
                                 return_object_only=True):
@@ -387,6 +387,6 @@
         response, body = self.get(request_uri)
         self.expected_success(200, response.status)
         if return_object_only:
-            return json.loads(body.decode('utf-8'))['statuses']
+            return jsonutils.loads(body.decode('utf-8'))['statuses']
         else:
-            return json.loads(body.decode('utf-8'))
+            return jsonutils.loads(body.decode('utf-8'))
diff --git a/octavia_tempest_plugin/services/load_balancer/v2/member_client.py b/octavia_tempest_plugin/services/load_balancer/v2/member_client.py
index 3909ac2..63e836a 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/member_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/member_client.py
@@ -12,9 +12,8 @@
 #   License for the specific language governing permissions and limitations
 #   under the License.
 
-import json
-
 from oslo_log import log as logging
+from oslo_serialization import jsonutils
 from tempest import config
 
 from octavia_tempest_plugin.services.load_balancer.v2 import base_client
@@ -269,7 +268,7 @@
         obj_dict = {self.list_root_tag: members_list}
         request_uri = self.uri.format(parent=pool_id)
 
-        response, body = self.put(request_uri, json.dumps(obj_dict))
+        response, body = self.put(request_uri, jsonutils.dumps(obj_dict))
         self.expected_success(202, response.status)
         return
 
diff --git a/octavia_tempest_plugin/tests/api/v2/test_listener.py b/octavia_tempest_plugin/tests/api/v2/test_listener.py
index 928ecfb..599305a 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_listener.py
@@ -768,3 +768,76 @@
             const.ACTIVE,
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
+
+    @decorators.idempotent_id('6f14a6c1-945e-43bc-8215-410c8a5edb25')
+    def test_listener_show_stats(self):
+        """Tests listener show statistics API.
+
+        * Create a listener.
+        * Validates that other accounts cannot see the stats for the
+        *   listener.
+        * Show listener statistics.
+        * Validate the show reflects the expected values.
+        """
+        listener_name = data_utils.rand_name("lb_member_listener1-stats")
+        listener_description = data_utils.arbitrary_string(size=255)
+
+        listener_kwargs = {
+            const.NAME: listener_name,
+            const.DESCRIPTION: listener_description,
+            const.ADMIN_STATE_UP: True,
+            const.PROTOCOL: const.HTTP,
+            const.PROTOCOL_PORT: 84,
+            const.LOADBALANCER_ID: self.lb_id,
+            const.CONNECTION_LIMIT: 200,
+        }
+
+        listener = self.mem_listener_client.create_listener(**listener_kwargs)
+        self.addCleanup(
+            self.mem_listener_client.cleanup_listener,
+            listener[const.ID],
+            lb_client=self.mem_lb_client, lb_id=self.lb_id)
+
+        waiters.wait_for_status(
+            self.mem_lb_client.show_loadbalancer, self.lb_id,
+            const.PROVISIONING_STATUS, const.ACTIVE,
+            CONF.load_balancer.build_interval,
+            CONF.load_balancer.build_timeout)
+        listener = waiters.wait_for_status(
+            self.mem_listener_client.show_listener,
+            listener[const.ID], const.PROVISIONING_STATUS,
+            const.ACTIVE,
+            CONF.load_balancer.build_interval,
+            CONF.load_balancer.build_timeout)
+        if not CONF.load_balancer.test_with_noop:
+            listener = waiters.wait_for_status(
+                self.mem_listener_client.show_listener,
+                listener[const.ID], const.OPERATING_STATUS,
+                const.ONLINE,
+                CONF.load_balancer.build_interval,
+                CONF.load_balancer.build_timeout)
+
+        # Test that a user, without the load balancer member role, cannot
+        # use this command
+        if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
+            self.assertRaises(
+                exceptions.Forbidden,
+                self.os_primary.listener_client.get_listener_stats,
+                listener[const.ID])
+
+        # Test that a different user, with the load balancer role, cannot see
+        # the listener stats
+        if not CONF.load_balancer.RBAC_test_type == const.NONE:
+            member2_client = self.os_roles_lb_member2.listener_client
+            self.assertRaises(exceptions.Forbidden,
+                              member2_client.get_listener_stats,
+                              listener[const.ID])
+
+        stats = self.mem_listener_client.get_listener_stats(listener[const.ID])
+
+        self.assertEqual(5, len(stats))
+        self.assertEqual(0, stats[const.ACTIVE_CONNECTIONS])
+        self.assertEqual(0, stats[const.BYTES_IN])
+        self.assertEqual(0, stats[const.BYTES_OUT])
+        self.assertEqual(0, stats[const.REQUEST_ERRORS])
+        self.assertEqual(0, stats[const.TOTAL_CONNECTIONS])
diff --git a/releasenotes/notes/add-listener-stats-api-test-88947cf5e6ae9cae.yaml b/releasenotes/notes/add-listener-stats-api-test-88947cf5e6ae9cae.yaml
new file mode 100644
index 0000000..1737aa2
--- /dev/null
+++ b/releasenotes/notes/add-listener-stats-api-test-88947cf5e6ae9cae.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Added the listener stats service client and API test.
diff --git a/requirements.txt b/requirements.txt
index 815be94..c9f839c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,6 +9,7 @@
 octavia-lib>=1.0.0 # Apache-2.0
 oslo.config>=5.2.0 # Apache-2.0
 oslo.log>=3.36.0  # Apache-2.0
+oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
 oslo.utils>=3.33.0  # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
 python-barbicanclient>=4.5.2 # Apache-2.0
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index f5426cc..d53fa42 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -91,6 +91,13 @@
     vars:
       devstack_localrc:
         DIB_LOCAL_ELEMENTS: openstack-ci-mirrors
+      devstack_local_conf:
+        post-config:
+          $OCTAVIA_CONF:
+            haproxy_amphora:
+              # Set these higher for non-nested virt nodepool instances
+              connection_max_retries: 300
+              build_active_retries: 300
       devstack_services:
         neutron-qos: true
       devstack_plugins:
