diff --git a/tcp_tests/helpers/netchecker.py b/tcp_tests/helpers/netchecker.py
index f23a5c8..9c920ec 100644
--- a/tcp_tests/helpers/netchecker.py
+++ b/tcp_tests/helpers/netchecker.py
@@ -331,7 +331,7 @@
 
 
 @utils.retry(3, requests.exceptions.RequestException)
-def get_status(k8sclient, netchecker_pod_port=NETCHECKER_NODE_PORT,
+def get_connectivity_status(k8sclient, netchecker_pod_port=NETCHECKER_NODE_PORT,
                pod_name='netchecker-server', namespace='default'):
 
     netchecker_srv_pod_names = [pod.name for pod in
@@ -352,17 +352,33 @@
     return response
 
 
-def check_network(k8sclient, namespace='default', works=True):
+@utils.retry(3, requests.exceptions.RequestException)
+def get_netchecker_pod_status(k8s,
+                              pod_name='netchecker-server',
+                              namespace='default'):
+
+    k8s.wait_pods_phase(
+        pods=[pod for pod in k8s.api.pods.list(namespace=namespace)
+              if pod_name in pod.name], phase='Running', timeout=600)
+
+
+def check_network(k8sclient,  netchecker_pod_port,
+                  namespace='default', works=True):
     if works:
-        assert get_status(k8sclient,
-                          namespace=namespace).status_code in (200, 204)
+        assert get_connectivity_status(
+            k8sclient, namespace=namespace,
+            netchecker_pod_port=netchecker_pod_port).status_code in (200, 204)
     else:
-        assert get_status(k8sclient, namespace=namespace).status_code == 400
+        assert get_connectivity_status(
+            k8sclient, namespace=namespace,
+            netchecker_pod_port=netchecker_pod_port).status_code == 400
 
 
 def wait_check_network(k8sclient, namespace='default', works=True, timeout=120,
-                       interval=5):
-    helpers.wait_pass(lambda: check_network(k8sclient, namespace=namespace,
+                       interval=5, netchecker_pod_port=NETCHECKER_NODE_PORT):
+    helpers.wait_pass(lambda: check_network(k8sclient,
+                                            netchecker_pod_port=netchecker_pod_port,
+                                            namespace=namespace,
                                             works=works),
                       timeout=timeout, interval=interval)
 
@@ -518,3 +534,25 @@
     cmd_add_policy_hostnet = "echo '{0}' | kubectl create -f -".format(
         json.dumps(kubernetes_policy_hostnet))
     underlay.sudo_check_call(cmd=cmd_add_policy_hostnet, host=kube_host_ip)
+
+
+@utils.retry(3, requests.exceptions.RequestException)
+def get_metric(k8sclient, netchecker_pod_port,
+               pod_name='netchecker-server', namespace='default'):
+
+    netchecker_srv_pod_names = [pod.name for pod in
+                                k8sclient.pods.list(namespace=namespace)
+                                if pod_name in pod.name]
+
+    assert len(netchecker_srv_pod_names) > 0, \
+        "No netchecker-server pods found!"
+    netchecker_srv_pod = k8sclient.pods.get(name=netchecker_srv_pod_names[0],
+                                            namespace=namespace)
+
+    kube_host_ip = netchecker_srv_pod.status.host_ip
+    metrics_url = 'http://{0}:{1}/metrics'.format(
+        kube_host_ip, netchecker_pod_port)
+    response = requests.get(metrics_url, timeout=30)
+    LOG.debug('Metrics: [{0}] {1}'.format(
+        response.status_code, response.text.strip()))
+    return response
