diff --git a/octavia_tempest_plugin/tests/api/v2/test_listener.py b/octavia_tempest_plugin/tests/api/v2/test_listener.py
index 4da80ae..b8a8ff8 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_listener.py
@@ -21,7 +21,6 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions
-import testtools
 
 from octavia_tempest_plugin.common import constants as const
 from octavia_tempest_plugin.tests import test_base
@@ -30,13 +29,13 @@
 CONF = config.CONF
 
 
-class ListenerAPITest(test_base.LoadBalancerBaseTest):
+class ListenerAPIBaseTest(test_base.LoadBalancerBaseTest):
     """Test the listener object API."""
 
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(ListenerAPITest, cls).resource_setup()
+        super(ListenerAPIBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_listener")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -63,40 +62,11 @@
     @classmethod
     def setup_clients(cls):
         """Setup client aliases."""
-        super(ListenerAPITest, cls).setup_clients()
+        super(ListenerAPIBaseTest, cls).setup_clients()
         cls.listener_client = cls.os_primary.load_balancer_v2.ListenerClient()
         cls.member2_listener_client = (
             cls.os_roles_lb_member2.load_balancer_v2.ListenerClient())
 
-    @decorators.idempotent_id('88d0ec83-7b08-48d9-96e2-0df1d2f8cd98')
-    def test_http_listener_create(self):
-        self._test_listener_create(const.HTTP, 8000)
-
-    @decorators.idempotent_id('2cc89237-fc6b-434d-b38e-b3309823e71f')
-    def test_https_listener_create(self):
-        self._test_listener_create(const.HTTPS, 8001)
-
-    @decorators.idempotent_id('45580065-5653-436b-aaff-dc465fa0a542')
-    def test_tcp_listener_create(self):
-        self._test_listener_create(const.TCP, 8002)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('1a6ba0d0-f309-4088-a686-dda0e9ab7e43')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_create(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_create(const.PROMETHEUS, 8090)
-
-    @decorators.idempotent_id('7b53f336-47bc-45ae-bbd7-4342ef0673fc')
-    def test_udp_listener_create(self):
-        self._test_listener_create(const.UDP, 8003)
-
     def _test_listener_create(self, protocol, protocol_port):
         """Tests listener create and basic show APIs.
 
@@ -245,26 +215,6 @@
                 CONF.load_balancer.provider != 'tungstenfabric'):
             self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
 
-    @decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
-    def test_http_udp_tcp_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
-                                                const.TCP, 8010)
-
-    @decorators.idempotent_id('930338b8-3029-48a6-89b2-8b062060fe61')
-    def test_http_udp_https_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
-                                                const.HTTPS, 8011)
-
-    @decorators.idempotent_id('01a21892-008a-4327-b4fd-fbf194ecb1a5')
-    def test_tcp_udp_http_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.TCP, const.UDP,
-                                                const.HTTP, 8012)
-
-    @decorators.idempotent_id('5da764a4-c03a-46ed-848b-98b9d9fa9089')
-    def test_tcp_udp_https_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.TCP, const.UDP,
-                                                const.HTTPS, 8013)
-
     def _test_listener_create_on_same_port(self, protocol1, protocol2,
                                            protocol3, protocol_port):
         """Tests listener creation on same port number.
@@ -374,35 +324,6 @@
             self.mem_listener_client.create_listener,
             **listener4_kwargs)
 
-    @decorators.idempotent_id('78ba6eb0-178c-477e-9156-b6775ca7b271')
-    def test_http_listener_list(self):
-        self._test_listener_list(const.HTTP, 8020)
-
-    @decorators.idempotent_id('61b7c643-f5fa-4471-8f9e-2e0ccdaf5ac7')
-    def test_https_listener_list(self):
-        self._test_listener_list(const.HTTPS, 8030)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('5473e071-8277-4ac5-9277-01ecaf46e274')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_list(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_list(const.PROMETHEUS, 8091)
-
-    @decorators.idempotent_id('1cd476e2-7788-415e-bcaf-c377acfc9794')
-    def test_tcp_listener_list(self):
-        self._test_listener_list(const.TCP, 8030)
-
-    @decorators.idempotent_id('c08fb77e-b317-4d6f-b430-91f5b27ebac6')
-    def test_udp_listener_list(self):
-        self._test_listener_list(const.UDP, 8040)
-
     def _test_listener_list(self, protocol, protocol_port_base):
         """Tests listener list API and field filtering.
 
@@ -756,35 +677,6 @@
             self.assertTrue(not any(["" in listener[const.TAGS]
                                      for listener in list_of_listeners]))
 
-    @decorators.idempotent_id('6e299eae-6907-4dfc-89c2-e57709d25d3d')
-    def test_http_listener_show(self):
-        self._test_listener_show(const.HTTP, 8050)
-
-    @decorators.idempotent_id('aa838646-435f-4a20-8442-519a7a138e7e')
-    def test_https_listener_show(self):
-        self._test_listener_show(const.HTTPS, 8051)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('b851b754-4333-4115-9063-a9fce44c2e46')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_show(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_show(const.PROMETHEUS, 8092)
-
-    @decorators.idempotent_id('1fcbbee2-b697-4890-b6bf-d308ac1c94cd')
-    def test_tcp_listener_show(self):
-        self._test_listener_show(const.TCP, 8052)
-
-    @decorators.idempotent_id('1dea3a6b-c95b-4e91-b591-1aa9cbcd0d1d')
-    def test_udp_listener_show(self):
-        self._test_listener_show(const.UDP, 8053)
-
     def _test_listener_show(self, protocol, protocol_port):
         """Tests listener show API.
 
@@ -921,35 +813,6 @@
                 'ListenerClient', 'show_listener',
                 expected_allowed, listener[const.ID])
 
-    @decorators.idempotent_id('aaae0298-5778-4c7e-a27a-01549a71b319')
-    def test_http_listener_update(self):
-        self._test_listener_update(const.HTTP, 8060)
-
-    @decorators.idempotent_id('9679b061-2b2c-469f-abd9-26ed140ef001')
-    def test_https_listener_update(self):
-        self._test_listener_update(const.HTTPS, 8061)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('cbba6bf8-9184-4da5-95e9-5efe1f89ddf0')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_update(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_update(const.PROMETHEUS, 8093)
-
-    @decorators.idempotent_id('8d933121-db03-4ccc-8b77-4e879064a9ba')
-    def test_tcp_listener_update(self):
-        self._test_listener_update(const.TCP, 8062)
-
-    @decorators.idempotent_id('fd02dbfd-39ce-41c2-b181-54fc7ad91707')
-    def test_udp_listener_update(self):
-        self._test_listener_update(const.UDP, 8063)
-
     def _test_listener_update(self, protocol, protocol_port):
         """Tests listener update and show APIs.
 
@@ -1190,35 +1053,6 @@
                 expected_cidrs = ['2001:db8::/64']
             self.assertEqual(expected_cidrs, listener[const.ALLOWED_CIDRS])
 
-    @decorators.idempotent_id('16f11c82-f069-4592-8954-81b35a98e3b7')
-    def test_http_listener_delete(self):
-        self._test_listener_delete(const.HTTP, 8070)
-
-    @decorators.idempotent_id('769526a0-df71-47cd-996e-46484de32223')
-    def test_https_listener_delete(self):
-        self._test_listener_delete(const.HTTPS, 8071)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('322a6372-6b56-4a3c-87e3-dd82074bc83e')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_delete(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_delete(const.PROMETHEUS, 8094)
-
-    @decorators.idempotent_id('f5ca019d-2b33-48f9-9c2d-2ec169b423ca')
-    def test_tcp_listener_delete(self):
-        self._test_listener_delete(const.TCP, 8072)
-
-    @decorators.idempotent_id('86bd9717-e3e9-41e3-86c4-888c64455926')
-    def test_udp_listener_delete(self):
-        self._test_listener_delete(const.UDP, 8073)
-
     def _test_listener_delete(self, protocol, protocol_port):
         """Tests listener create and delete APIs.
 
@@ -1277,22 +1111,6 @@
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
 
-    @decorators.idempotent_id('6f14a6c1-945e-43bc-8215-410c8a5edb25')
-    def test_http_listener_show_stats(self):
-        self._test_listener_show_stats(const.HTTP, 8080)
-
-    @decorators.idempotent_id('f8a43c27-f0a0-496d-a287-1958f337ac04')
-    def test_https_listener_show_stats(self):
-        self._test_listener_show_stats(const.HTTPS, 8081)
-
-    @decorators.idempotent_id('8a999856-f448-498c-b891-21af449b5208')
-    def test_tcp_listener_show_stats(self):
-        self._test_listener_show_stats(const.TCP, 8082)
-
-    @decorators.idempotent_id('a4c1f199-923b-41e4-a134-c91e590e20c4')
-    def test_udp_listener_show_stats(self):
-        self._test_listener_show_stats(const.UDP, 8083)
-
     def _test_listener_show_stats(self, protocol, protocol_port):
         """Tests listener show statistics API.
 
@@ -1364,3 +1182,187 @@
         self.assertEqual(0, stats[const.BYTES_OUT])
         self.assertEqual(0, stats[const.REQUEST_ERRORS])
         self.assertEqual(0, stats[const.TOTAL_CONNECTIONS])
+
+
+class ListenerAPITestTCP(ListenerAPIBaseTest):
+
+    @decorators.idempotent_id('45580065-5653-436b-aaff-dc465fa0a542')
+    def test_tcp_listener_create(self):
+        self._test_listener_create(const.TCP, 8002)
+
+    @decorators.idempotent_id('1cd476e2-7788-415e-bcaf-c377acfc9794')
+    def test_tcp_listener_list(self):
+        self._test_listener_list(const.TCP, 8030)
+
+    @decorators.idempotent_id('1fcbbee2-b697-4890-b6bf-d308ac1c94cd')
+    def test_tcp_listener_show(self):
+        self._test_listener_show(const.TCP, 8052)
+
+    @decorators.idempotent_id('8d933121-db03-4ccc-8b77-4e879064a9ba')
+    def test_tcp_listener_update(self):
+        self._test_listener_update(const.TCP, 8062)
+
+    @decorators.idempotent_id('f5ca019d-2b33-48f9-9c2d-2ec169b423ca')
+    def test_tcp_listener_delete(self):
+        self._test_listener_delete(const.TCP, 8072)
+
+    @decorators.idempotent_id('8a999856-f448-498c-b891-21af449b5208')
+    def test_tcp_listener_show_stats(self):
+        self._test_listener_show_stats(const.TCP, 8082)
+
+
+class ListenerAPITestUDP(ListenerAPIBaseTest):
+
+    @decorators.idempotent_id('7b53f336-47bc-45ae-bbd7-4342ef0673fc')
+    def test_udp_listener_create(self):
+        self._test_listener_create(const.UDP, 8003)
+
+    @decorators.idempotent_id('c08fb77e-b317-4d6f-b430-91f5b27ebac6')
+    def test_udp_listener_list(self):
+        self._test_listener_list(const.UDP, 8040)
+
+    @decorators.idempotent_id('1dea3a6b-c95b-4e91-b591-1aa9cbcd0d1d')
+    def test_udp_listener_show(self):
+        self._test_listener_show(const.UDP, 8053)
+
+    @decorators.idempotent_id('fd02dbfd-39ce-41c2-b181-54fc7ad91707')
+    def test_udp_listener_update(self):
+        self._test_listener_update(const.UDP, 8063)
+
+    @decorators.idempotent_id('86bd9717-e3e9-41e3-86c4-888c64455926')
+    def test_udp_listener_delete(self):
+        self._test_listener_delete(const.UDP, 8073)
+
+    @decorators.idempotent_id('a4c1f199-923b-41e4-a134-c91e590e20c4')
+    def test_udp_listener_show_stats(self):
+        self._test_listener_show_stats(const.UDP, 8083)
+
+
+class ListenerAPITestHTTP(ListenerAPIBaseTest):
+
+    @decorators.idempotent_id('88d0ec83-7b08-48d9-96e2-0df1d2f8cd98')
+    def test_http_listener_create(self):
+        self._test_listener_create(const.HTTP, 8000)
+
+    @decorators.idempotent_id('78ba6eb0-178c-477e-9156-b6775ca7b271')
+    def test_http_listener_list(self):
+        self._test_listener_list(const.HTTP, 8020)
+
+    @decorators.idempotent_id('6e299eae-6907-4dfc-89c2-e57709d25d3d')
+    def test_http_listener_show(self):
+        self._test_listener_show(const.HTTP, 8050)
+
+    @decorators.idempotent_id('aaae0298-5778-4c7e-a27a-01549a71b319')
+    def test_http_listener_update(self):
+        self._test_listener_update(const.HTTP, 8060)
+
+    @decorators.idempotent_id('16f11c82-f069-4592-8954-81b35a98e3b7')
+    def test_http_listener_delete(self):
+        self._test_listener_delete(const.HTTP, 8070)
+
+    @decorators.idempotent_id('6f14a6c1-945e-43bc-8215-410c8a5edb25')
+    def test_http_listener_show_stats(self):
+        self._test_listener_show_stats(const.HTTP, 8080)
+
+
+class ListenerAPITestHTTPS(ListenerAPIBaseTest):
+
+    @decorators.idempotent_id('2cc89237-fc6b-434d-b38e-b3309823e71f')
+    def test_https_listener_create(self):
+        self._test_listener_create(const.HTTPS, 8001)
+
+    @decorators.idempotent_id('61b7c643-f5fa-4471-8f9e-2e0ccdaf5ac7')
+    def test_https_listener_list(self):
+        self._test_listener_list(const.HTTPS, 8030)
+
+    @decorators.idempotent_id('aa838646-435f-4a20-8442-519a7a138e7e')
+    def test_https_listener_show(self):
+        self._test_listener_show(const.HTTPS, 8051)
+
+    @decorators.idempotent_id('9679b061-2b2c-469f-abd9-26ed140ef001')
+    def test_https_listener_update(self):
+        self._test_listener_update(const.HTTPS, 8061)
+
+    @decorators.idempotent_id('769526a0-df71-47cd-996e-46484de32223')
+    def test_https_listener_delete(self):
+        self._test_listener_delete(const.HTTPS, 8071)
+
+    @decorators.idempotent_id('f8a43c27-f0a0-496d-a287-1958f337ac04')
+    def test_https_listener_show_stats(self):
+        self._test_listener_show_stats(const.HTTPS, 8081)
+
+
+class ListenerAPITestPrometeus(ListenerAPIBaseTest):
+
+    @classmethod
+    def skip_checks(cls):
+        super(ListenerAPITestPrometeus, cls).skip_checks()
+        if CONF.load_balancer.provider == 'tungstenfabric':
+            raise cls.skipException("TungstenFabric provider does not"
+                                    " support PROMETHEUS protocol.")
+        if not CONF.loadbalancer_feature_enabled.prometheus_listener_enabled:
+            raise cls.skipException("PROMETHEUS listener tests are disabled"
+                                    " in the tempest configuration.")
+
+    @decorators.idempotent_id('1a6ba0d0-f309-4088-a686-dda0e9ab7e43')
+    def test_prometheus_listener_create(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_create(const.PROMETHEUS, 8090)
+
+    @decorators.idempotent_id('5473e071-8277-4ac5-9277-01ecaf46e274')
+    def test_prometheus_listener_list(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_list(const.PROMETHEUS, 8091)
+
+    @decorators.idempotent_id('b851b754-4333-4115-9063-a9fce44c2e46')
+    def test_prometheus_listener_show(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_show(const.PROMETHEUS, 8092)
+
+    @decorators.idempotent_id('cbba6bf8-9184-4da5-95e9-5efe1f89ddf0')
+    def test_prometheus_listener_update(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_update(const.PROMETHEUS, 8093)
+
+    @decorators.idempotent_id('322a6372-6b56-4a3c-87e3-dd82074bc83e')
+    def test_prometheus_listener_delete(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_delete(const.PROMETHEUS, 8094)
+
+
+class ListenerAPITestMultiprotocol(ListenerAPIBaseTest):
+
+    @decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
+    def test_http_udp_tcp_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
+                                                const.TCP, 8010)
+
+    @decorators.idempotent_id('930338b8-3029-48a6-89b2-8b062060fe61')
+    def test_http_udp_https_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
+                                                const.HTTPS, 8011)
+
+    @decorators.idempotent_id('01a21892-008a-4327-b4fd-fbf194ecb1a5')
+    def test_tcp_udp_http_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.TCP, const.UDP,
+                                                const.HTTP, 8012)
+
+    @decorators.idempotent_id('5da764a4-c03a-46ed-848b-98b9d9fa9089')
+    def test_tcp_udp_https_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.TCP, const.UDP,
+                                                const.HTTPS, 8013)
