diff --git a/tcp_tests/managers/sl_manager.py b/tcp_tests/managers/sl_manager.py
index 07a1302..f3c4877 100644
--- a/tcp_tests/managers/sl_manager.py
+++ b/tcp_tests/managers/sl_manager.py
@@ -81,13 +81,20 @@
                 service_stat_dict.update({tmp[0]: tmp[1]})
         return service_stat_dict
 
-    def run_sl_functional_tests(self, node_to_run, path_tests_to_run):
+    def run_sl_functional_tests(self, node_to_run, tests_path,
+                                test_to_run, skip_tests):
         target_node_name = [node_name for node_name
                             in self.__underlay.node_names()
                             if node_to_run in node_name]
+        if skip_tests:
+            cmd = "cd {0}; pytest -k 'not {1}' {2}".format(
+                tests_path, skip_tests, test_to_run)
+        else:
+            cmd = "cd {0}; pytest -k {1}".format(tests_path, test_to_run)
         with self.__underlay.remote(node_name=target_node_name[0]) \
                 as node_remote:
-            cmd = "pytest -k {}".format(path_tests_to_run)
+            LOG.debug("Run {0} on the node {1}".format(
+                cmd, target_node_name[0]))
             result = node_remote.execute(cmd)
             LOG.debug("Test execution result is {}".format(result))
         return result
diff --git a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
index d99ffb5..235a523 100644
--- a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
+++ b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
@@ -46,7 +46,7 @@
     @pytest.mark.cz8119
     def test_mcp11_ocata_ovs_sl_install(self, underlay, config,
                                         openstack_deployed,
-                                        sl_deployed, show_step):
+                                        sl_deployed):
         """Test for deploying an mcp environment and check it
         Scenario:
         1. Prepare salt on hosts
@@ -60,32 +60,31 @@
         """
         expected_service_list = ['monitoring_remote_storage_adapter',
                                  'monitoring_server',
+                                 'monitoring_relay',
                                  'monitoring_remote_agent',
                                  'dashboard_grafana',
                                  'monitoring_alertmanager',
                                  'monitoring_remote_collector',
                                  'monitoring_pushgateway']
-        show_step(4)
+
         mon_nodes = sl_deployed.get_monitoring_nodes()
         LOG.debug('Mon nodes list {0}'.format(mon_nodes))
 
-        show_step(5)
         sl_deployed.check_docker_services(mon_nodes, expected_service_list)
 
-        show_step(6)
         sl_deployed.check_prometheus_targets(mon_nodes)
 
-        show_step(7)
         # Run SL component tetsts
         sl_deployed.run_sl_functional_tests(
             'cfg01',
-            '/root/stacklight-pytest/stacklight_tests/tests/prometheus')
+            '/root/stacklight-pytest/stacklight_tests/',
+            'tests/prometheus',
+            'test_alerts.py')
 
-        show_step(8)
         # Download report
         sl_deployed.download_sl_test_report(
             'cfg01',
-            '/root/stacklight-pytest/stacklight_tests')
+            '/root/stacklight-pytest/stacklight_tests/report.xml')
         LOG.info("*************** DONE **************")
 
     @pytest.mark.fail_snapshot
@@ -110,7 +109,7 @@
     @pytest.mark.cz8120
     def test_mcp11_ocata_dvr_sl_install(self, underlay, config,
                                         openstack_deployed,
-                                        sl_deployed, show_step):
+                                        sl_deployed):
         """Test for deploying an mcp environment and check it
         Scenario:
         1. Prepare salt on hosts
@@ -124,32 +123,31 @@
         """
         expected_service_list = ['monitoring_remote_storage_adapter',
                                  'monitoring_server',
+                                 'monitoring_relay',
                                  'monitoring_remote_agent',
                                  'dashboard_grafana',
                                  'monitoring_alertmanager',
                                  'monitoring_remote_collector',
                                  'monitoring_pushgateway']
-        show_step(4)
+
         mon_nodes = sl_deployed.get_monitoring_nodes()
         LOG.debug('Mon nodes list {0}'.format(mon_nodes))
 
-        show_step(5)
         sl_deployed.check_docker_services(mon_nodes, expected_service_list)
 
-        show_step(6)
         sl_deployed.check_prometheus_targets(mon_nodes)
 
-        show_step(7)
         # Run SL component tests
         sl_deployed.run_sl_functional_tests(
             'cfg01',
-            '/root/stacklight-pytest/stacklight_tests/tests/prometheus')
+            '/root/stacklight-pytest/stacklight_tests/',
+            'tests/prometheus',
+            'test_alerts.py')
 
-        show_step(8)
         # Download report
         sl_deployed.download_sl_test_report(
             'cfg01',
-            '/root/stacklight-pytest/stacklight_tests')
+            '/root/stacklight-pytest/stacklight_tests/report.xml')
         LOG.info("*************** DONE **************")
 
     @pytest.mark.fail_snapshot
