diff --git a/test_set/cvp-sanity/fixtures/base.py b/test_set/cvp-sanity/fixtures/base.py
index 822d908..560f906 100644
--- a/test_set/cvp-sanity/fixtures/base.py
+++ b/test_set/cvp-sanity/fixtures/base.py
@@ -29,7 +29,7 @@
 nodes = utils.calculate_groups()
 
 
-@pytest.fixture(scope='session', params=nodes.values(), ids=nodes.keys())
+@pytest.fixture(scope='session', params=nodes.items(), ids=nodes.keys())
 def nodes_in_group(request):
     return request.param
 
diff --git a/test_set/cvp-sanity/tests/ceph/test_ceph_haproxy.py b/test_set/cvp-sanity/tests/ceph/test_ceph_haproxy.py
index 4d2566c..1dad16d 100644
--- a/test_set/cvp-sanity/tests/ceph/test_ceph_haproxy.py
+++ b/test_set/cvp-sanity/tests/ceph/test_ceph_haproxy.py
@@ -19,4 +19,4 @@
             continue
         else:
             fail[name] = info
-    assert not fail, "Failed monitors: {}".format(fail)
+    assert not fail, "Some Ceph monitors are in wrong state:\n{}".format(fail)
diff --git a/test_set/cvp-sanity/tests/ceph/test_ceph_pg_count.py b/test_set/cvp-sanity/tests/ceph/test_ceph_pg_count.py
index 28783e8..3911d27 100644
--- a/test_set/cvp-sanity/tests/ceph/test_ceph_pg_count.py
+++ b/test_set/cvp-sanity/tests/ceph/test_ceph_pg_count.py
@@ -86,9 +86,11 @@
         if pools_pg_num[pool] < correct_pg_num:
             wrong_pg_num_pools.append(pool)
 
-    assert not pg_pgp_not_equal_pools, \
-    "For pools {} PG and PGP are not equal " \
-    "but should be".format(pg_pgp_not_equal_pools)
-    assert not wrong_pg_num_pools, "For pools {} " \
-    "PG number lower than Correct PG number, " \
-    "but should be equal or higher".format(wrong_pg_num_pools)
+    assert not pg_pgp_not_equal_pools, (
+        "PG and PGP are not equal for the following pools:\n{}".format(
+            pg_pgp_not_equal_pools)
+    )
+    assert not wrong_pg_num_pools, (
+        "PG number is lower than Correct PG number (but should be equal or "
+        "higher) for the following pools:\n{}".format(wrong_pg_num_pools)
+    )
diff --git a/test_set/cvp-sanity/tests/ceph/test_ceph_replicas.py b/test_set/cvp-sanity/tests/ceph/test_ceph_replicas.py
index 4c93fe6..7d8c63a 100644
--- a/test_set/cvp-sanity/tests/ceph/test_ceph_replicas.py
+++ b/test_set/cvp-sanity/tests/ceph/test_ceph_replicas.py
@@ -39,5 +39,8 @@
             if replica == 'size' and value < 3:
                 error.append(pool + " " + replica + " " 
                 + str(value) + " must be 3")
-    
-    assert not error, "Wrong pool replicas found\n{}".format(error)
+
+    assert not error, (
+        "There are wrong pool replicas for the following pools:\n{}".format(
+            error)
+    )
diff --git a/test_set/cvp-sanity/tests/ceph/test_ceph_status.py b/test_set/cvp-sanity/tests/ceph/test_ceph_status.py
index 0c0ef0c..2c32106 100644
--- a/test_set/cvp-sanity/tests/ceph/test_ceph_status.py
+++ b/test_set/cvp-sanity/tests/ceph/test_ceph_status.py
@@ -9,9 +9,8 @@
         expr_form='pillar')
     if not osd_fail:
         pytest.skip("Ceph is not found on this environment")
-    assert not osd_fail.values()[0], \
-        "Some osds are in down state or ceph is not found".format(
-        osd_fail.values()[0])
+    assert not osd_fail.values()[0], (
+        "Some OSDs are in down state:\n{}".format(osd_fail.values()[0]))
 
 
 def test_ceph_health(local_salt_client):
@@ -32,5 +31,4 @@
     else:
         summary = status["summary"]
 
-    assert health == "HEALTH_OK",\
-        "Ceph status is not expected. {}".format(summary)
+    assert health == "HEALTH_OK", "Ceph is not healthy:\n{}".format(summary)
diff --git a/test_set/cvp-sanity/tests/ceph/test_ceph_tell_bench.py b/test_set/cvp-sanity/tests/ceph/test_ceph_tell_bench.py
index b275022..5dee40f 100644
--- a/test_set/cvp-sanity/tests/ceph/test_ceph_tell_bench.py
+++ b/test_set/cvp-sanity/tests/ceph/test_ceph_tell_bench.py
@@ -49,8 +49,8 @@
         if math.fabs(mbps_avg - mbps) > 10:
             result[osd] = osd_pool[osd]
 
-    assert len(result) == 0, \
-    "Performance of {0} OSD(s) lower " \
-    "than AVG performance ({1} mbps), " \
-    "please check Ceph for possible problems".format(
-        json.dumps(result, indent=4), mbps_avg)
+    assert len(result) == 0, (
+        "Performance of {0} OSD(s) is lower than AVG performance ({1} mbps).\n"
+        "Please check Ceph for possible problems.".format(
+            json.dumps(result, indent=4), mbps_avg)
+    )
diff --git a/test_set/cvp-sanity/tests/test_cinder_services.py b/test_set/cvp-sanity/tests/test_cinder_services.py
index a612bca..9e13e36 100644
--- a/test_set/cvp-sanity/tests/test_cinder_services.py
+++ b/test_set/cvp-sanity/tests/test_cinder_services.py
@@ -13,8 +13,9 @@
     service_down = local_salt_client.cmd_any(
         tgt='keystone:server',
         param='. /root/keystonercv3; cinder service-list | grep "down\|disabled"')
-    assert service_down == '', \
-        '''Some cinder services are in wrong state'''
+    assert service_down == '', (
+        "Some Cinder services are in wrong state:\n{}".format(service_down))
+
 
 @pytest.mark.full
 def test_cinder_services_has_all_backends(local_salt_client, check_cinder_backends):
@@ -30,7 +31,7 @@
         tgt='keystone:server',
         param='. /root/keystonercv3; cinder service-list | grep "volume" |grep -c -v -e "lvm"')
     backends_num = len(backends_cinder.keys())
-    assert cinder_volume == str(backends_num), \
-        'Number of cinder-volume services ({0}) does not match ' \
-        'number of volume backends ({1})'.format(
-        cinder_volume, str(backends_num))
+    assert cinder_volume == str(backends_num), (
+        'Number of cinder-volume services ({0}) does not match number of '
+        'volume backends ({1}).'.format(cinder_volume, str(backends_num))
+    )
diff --git a/test_set/cvp-sanity/tests/test_contrail.py b/test_set/cvp-sanity/tests/test_contrail.py
index 2ea9bf4..716c864 100644
--- a/test_set/cvp-sanity/tests/test_contrail.py
+++ b/test_set/cvp-sanity/tests/test_contrail.py
@@ -36,9 +36,10 @@
                     node=node, service=name, status=status)
                 broken_services.append(err_msg)
 
-    assert not broken_services, 'Broken services: {}'.format(json.dumps(
-                                                             broken_services,
-                                                             indent=4))
+    assert not broken_services, (
+        'Some Contrail services are in wrong state on computes: {}'.format(
+            json.dumps(broken_services, indent=4))
+    )
 
 @pytest.mark.smoke
 def test_contrail_node_status(local_salt_client, check_openstack):
@@ -66,9 +67,10 @@
                     node=node, service=name, status=status)
                 broken_services.append(err_msg)
 
-    assert not broken_services, 'Broken services: {}'.format(json.dumps(
-                                                             broken_services,
-                                                             indent=4))
+    assert not broken_services, (
+        'Some Contrail services are in wrong state on Contrail controllers: '
+        '{}'.format(json.dumps(broken_services, indent=4))
+    )
 
 @pytest.mark.smoke
 def test_contrail_vrouter_count(local_salt_client, check_openstack):
diff --git a/test_set/cvp-sanity/tests/test_default_gateway.py b/test_set/cvp-sanity/tests/test_default_gateway.py
index c1a36da..259abba 100644
--- a/test_set/cvp-sanity/tests/test_default_gateway.py
+++ b/test_set/cvp-sanity/tests/test_default_gateway.py
@@ -4,8 +4,9 @@
 
 @pytest.mark.full
 def test_check_default_gateways(local_salt_client, nodes_in_group):
+    group, nodes = nodes_in_group
     netstat_info = local_salt_client.cmd(
-        tgt="L@"+','.join(nodes_in_group),
+        tgt="L@"+','.join(nodes),
         param='ip r | sed -n 1p',
         expr_form='compound')
 
@@ -20,7 +21,7 @@
         else:
             gateways[gateway].append(node)
 
-    assert len(gateways.keys()) == 1, \
-        "There were found few gateways: {gw}".format(
-        gw=json.dumps(gateways, indent=4)
+    assert len(gateways.keys()) == 1, (
+        "There is a problem with default gateway for '{}' group of nodes:\n"
+        "{}".format(group, json.dumps(gateways, indent=4))
     )
diff --git a/test_set/cvp-sanity/tests/test_drivetrain.py b/test_set/cvp-sanity/tests/test_drivetrain.py
index 5281081..6741380 100644
--- a/test_set/cvp-sanity/tests/test_drivetrain.py
+++ b/test_set/cvp-sanity/tests/test_drivetrain.py
@@ -130,8 +130,8 @@
     finally:
         # Delete test project
         server.post("/projects/"+test_proj_name+"/deleteproject~delete")
-    assert gerrit_error == '',\
-        'Something is wrong with Gerrit'.format(gerrit_error)
+    assert gerrit_error == '', (
+        'There is an error during Gerrit operations:\n{}'.format(gerrit_error))
 
 
 @pytest.mark.full
@@ -223,17 +223,13 @@
         ldap_server.modify_s(admin_gr_dn,[(ldap.MOD_DELETE, 'memberUid', [test_user_name],)],)
         ldap_server.delete_s(test_user)
         ldap_server.unbind_s()
-    assert ldap_error == '', \
-        '''Something is wrong with connection to LDAP:
-            {0}'''.format(e)
-    assert jenkins_error == '', \
-        '''Connection to Jenkins was not established:
-            {0}'''.format(e)
-    assert gerrit_error == '', \
-        '''Connection to Gerrit was not established:
-            {0}'''.format(e)
-    assert ldap_result !=[], \
-        '''Test user was not found'''
+    assert ldap_error == '', (
+        "There is an error with connection to LDAP:\n{}".format(e))
+    assert jenkins_error == '', (
+        "Connection to Jenkins is not established:\n{}".format(e))
+    assert gerrit_error == '', (
+        "Connection to Gerrit is not established:\n{}".format(e))
+    assert ldap_result != [], "Test user {} is not found".format(ldap_result)
 
 
 @pytest.mark.sl_dup
@@ -260,10 +256,11 @@
         if len(wrong_items) == 0:
             break
         else:
-            logging.error('''Some DriveTrain services doesn't have expected number of replicas:
-                  {}\n'''.format(json.dumps(wrong_items, indent=4)))
             time.sleep(5)
-    assert len(wrong_items) == 0
+    assert len(wrong_items) == 0, (
+        "Some DriveTrain services don't have expected number of replicas:\n"
+        "{}".format(json.dumps(wrong_items, indent=4))
+    )
 
 
 @pytest.mark.full
@@ -306,9 +303,10 @@
         elif get_tag(image) != actual_images[im_name]:
             mismatch[im_name] = 'has {actual} version instead of {expected}'.format(
                 actual=actual_images[im_name], expected=get_tag(image))
-    assert len(mismatch) == 0, \
-        '''Some DriveTrain components do not have expected versions:
-              {}'''.format(json.dumps(mismatch, indent=4))
+    assert len(mismatch) == 0, (
+        "Some DriveTrain components do not have expected versions:\n{}".format(
+            json.dumps(mismatch, indent=4))
+    )
 
 
 @pytest.mark.full
@@ -355,9 +353,10 @@
                                     "Expected {2}".format(job_name,
                                                           actual_version,
                                                           expected_version))
-    assert len(version_mismatch) == 0, \
-        '''Some DriveTrain jobs have version/branch mismatch:
-              {}'''.format(json.dumps(version_mismatch, indent=4))
+    assert len(version_mismatch) == 0, (
+        "Some DriveTrain jobs have version/branch mismatch:\n{}".format(
+            json.dumps(version_mismatch, indent=4))
+    )
 
 
 @pytest.mark.full
@@ -399,6 +398,7 @@
         job_result = server.get_build_info(jenkins_test_job, next_build_num)['result']
     else:
         pytest.skip("The job {0} was not found").format(jenkins_test_job)
-    assert job_result == 'SUCCESS', \
-        '''Test job '{0}' build was not successful or timeout is too small
-         '''.format(jenkins_test_job)
+    assert job_result == 'SUCCESS', (
+        "Test job '{}' build is not successful or timeout is too "
+        "small.".format(jenkins_test_job)
+    )
diff --git a/test_set/cvp-sanity/tests/test_duplicate_ips.py b/test_set/cvp-sanity/tests/test_duplicate_ips.py
index 392838f..ba52f64 100644
--- a/test_set/cvp-sanity/tests/test_duplicate_ips.py
+++ b/test_set/cvp-sanity/tests/test_duplicate_ips.py
@@ -50,5 +50,5 @@
 
         msg = ("\nDuplicate IP addresses found:\n{}"
                "\n\nThe following interfaces are affected:\n{}"
-                "".format(pformat(dup_ips), pformat(dup_ifaces)))
+               "".format(pformat(dup_ips), pformat(dup_ifaces)))
         assert no_dups, msg
diff --git a/test_set/cvp-sanity/tests/test_etc_hosts.py b/test_set/cvp-sanity/tests/test_etc_hosts.py
index 61d36ef..bf881e7 100644
--- a/test_set/cvp-sanity/tests/test_etc_hosts.py
+++ b/test_set/cvp-sanity/tests/test_etc_hosts.py
@@ -21,4 +21,4 @@
                     result[node] = nd
     assert len(result) <= 1, \
         "Some hosts are not presented in /etc/hosts: {0}".format(
-        json.dumps(result, indent=4))
\ No newline at end of file
+        json.dumps(result, indent=4))
diff --git a/test_set/cvp-sanity/tests/test_k8s.py b/test_set/cvp-sanity/tests/test_k8s.py
index 24b53e4..aac6edf 100644
--- a/test_set/cvp-sanity/tests/test_k8s.py
+++ b/test_set/cvp-sanity/tests/test_k8s.py
@@ -22,9 +22,8 @@
                 if 'Healthy' not in line:
                     errors.append(line)
         break
-    assert not errors, 'k8s is not healthy: {}'.format(json.dumps(
-                                                       errors,
-                                                       indent=4))
+    assert not errors, 'k8s is not healthy:\n{}'.format(
+        json.dumps(errors, indent=4))
 
 
 @pytest.mark.xfail
@@ -46,9 +45,8 @@
                 if 'Ready' != line.split()[1]:
                     errors.append(line)
         break
-    assert not errors, 'k8s is not healthy: {}'.format(json.dumps(
-                                                       errors,
-                                                       indent=4))
+    assert not errors, 'k8s is not healthy:\n{}'.format(
+        json.dumps(errors, indent=4))
 
 
 def test_k8s_get_calico_status(local_salt_client):
@@ -68,9 +66,8 @@
             else:
                 if 'up' not in line or 'Established' not in line:
                     errors.append(line)
-    assert not errors, 'Calico node status is not good: {}'.format(json.dumps(
-                                                                   errors,
-                                                                   indent=4))
+    assert not errors, 'Calico node status is not good:\n{}'.format(
+        json.dumps(errors, indent=4))
 
 
 def test_k8s_cluster_status(local_salt_client):
@@ -90,9 +87,8 @@
                 if 'is running' not in line:
                     errors.append(line)
         break
-    assert not errors, 'k8s cluster info is not good: {}'.format(json.dumps(
-                                                                 errors,
-                                                                 indent=4))
+    assert not errors, 'k8s cluster info is not good:\n{}'.format(
+        json.dumps(errors, indent=4))
 
 
 def test_k8s_kubelet_status(local_salt_client):
@@ -108,8 +104,8 @@
     for node in result:
         if not result[node]:
             errors.append(node)
-    assert not errors, 'Kublete is not running on these nodes: {}'.format(
-                       errors)
+    assert not errors, 'Kublete is not running on the nodes:\n{}'.format(
+        errors)
 
 
 def test_k8s_check_system_pods_status(local_salt_client):
@@ -130,9 +126,8 @@
                 if 'Running' not in line:
                     errors.append(line)
         break
-    assert not errors, 'Some system pods are not running: {}'.format(json.dumps(
-                                                                   errors,
-                                                                   indent=4))
+    assert not errors, 'Some system pods are not running:\n{}'.format(
+        json.dumps(errors, indent=4))
 
 
 def test_check_k8s_image_availability(local_salt_client):
@@ -173,8 +168,10 @@
         tgt='etcd:server',
         param='kubernetes:common:addons:dashboard:public_ip')
 
-    assert external_ip, "Kubernetes dashboard public ip is not found in pillars"
-    assert external_ip.__len__() > 0, "Kubernetes dashboard is enabled but not defined in pillars"
+    assert external_ip, (
+        "Kubernetes dashboard public ip is not found in pillars")
+    assert external_ip.__len__() > 0, (
+        "Kubernetes dashboard is enabled but not defined in pillars")
     # dashboard port 8443 is hardcoded in kubernetes formula
     url = "https://{}:8443".format(external_ip)
     check = local_salt_client.cmd(
@@ -182,6 +179,7 @@
         param='curl {} 2>&1 | grep kubernetesDashboard'.format(url),
         expr_form='pillar'
     )
-    assert len(check.values()[0]) != 0, \
-        'Kubernetes dashboard is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(check.values()[0]) != 0, (
+        'Kubernetes dashboard is not reachable on {} from '
+        'ctl nodes'.format(url)
+    )
diff --git a/test_set/cvp-sanity/tests/test_kernel_settings.py b/test_set/cvp-sanity/tests/test_kernel_settings.py
index fa1d946..f13f685 100644
--- a/test_set/cvp-sanity/tests/test_kernel_settings.py
+++ b/test_set/cvp-sanity/tests/test_kernel_settings.py
@@ -10,6 +10,7 @@
     # Compare that value in sysctl equals to the same value in pillars
 
     """
+
     def normalize_value(value_in_string):
         """
         Changes to INT if value_in_string is parcible to int
@@ -29,8 +30,9 @@
         return value_in_string
 
     issues = dict()
+    group, nodes = nodes_in_group
     expected_kernel_params_by_nodes = local_salt_client.cmd(
-        tgt="L@"+','.join(nodes_in_group),
+        tgt="L@"+','.join(nodes),
         fun='pillar.get',
         param="linux:system:kernel:sysctl",
         expr_form='compound'
@@ -65,6 +67,8 @@
         if differences.__len__() > 0:
             issues[node] = differences
 
-    assert issues.__len__() == 0, json.dumps(issues, indent=4)
-
-
+    assert issues.__len__() == 0, (
+        "There are inconsistencies between kernel settings defined in pillars "
+        "and actual settings on nodes of '{}' group: {}".format(
+            group, json.dumps(issues, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_mounts.py b/test_set/cvp-sanity/tests/test_mounts.py
index dfb67e9..cc6f201 100644
--- a/test_set/cvp-sanity/tests/test_mounts.py
+++ b/test_set/cvp-sanity/tests/test_mounts.py
@@ -9,8 +9,9 @@
         # Get all mount points from each node in the group  with the next command: `df -h | awk '{print $1}'`
         # Check that all mount points are similar for each node in the group
     """
+    group, nodes = nodes_in_group
     exclude_mounts = 'grep -v "overlay\|tmpfs\|shm\|Filesystem"'
-    mounts_by_nodes = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
+    mounts_by_nodes = local_salt_client.cmd(tgt="L@"+','.join(nodes),
                                             param="df -h | awk '{print $1}'" +
                                                   " |" + exclude_mounts,
                                             expr_form='compound')
@@ -46,6 +47,7 @@
     if not result:
         pytest.skip("These nodes are skipped")
 
-    assert len(set(result.values())) == 1,\
-        "The nodes in the same group have different mounts:\n{}".format(
-            json.dumps(pretty_result, indent=4))
+    assert len(set(result.values())) == 1, (
+        "Nodes in '{}' group have different mounts:\n{}".format(
+            group, json.dumps(pretty_result, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_mtu.py b/test_set/cvp-sanity/tests/test_mtu.py
index 8dc4a79..7af3303 100644
--- a/test_set/cvp-sanity/tests/test_mtu.py
+++ b/test_set/cvp-sanity/tests/test_mtu.py
@@ -12,9 +12,10 @@
     skipped_ifaces = config.get(testname)["skipped_ifaces"] or \
         ["bonding_masters", "lo", "veth", "tap", "cali", "qv", "qb", "br-int",
          "vxlan", "virbr0", "virbr0-nic", "docker0", "o-hm0"]
+    group, nodes = nodes_in_group
     total = {}
     network_info = local_salt_client.cmd(
-        tgt="L@"+','.join(nodes_in_group),
+        tgt="L@"+','.join(nodes),
         param='ls /sys/class/net/',
         expr_form='compound')
 
@@ -75,6 +76,7 @@
             row.sort()
             row.insert(0, interf)
             mtu_data.append(row)
-    assert len(mtu_data) == 0, \
-        "Several problems found: {0}".format(
-        json.dumps(mtu_data, indent=4))
\ No newline at end of file
+    assert len(mtu_data) == 0, (
+        "Non-uniform MTUs are set on the same node interfaces of '{}' group "
+        "of nodes: {}".format(group, json.dumps(mtu_data, indent=4))
+    )
\ No newline at end of file
diff --git a/test_set/cvp-sanity/tests/test_nodes.py b/test_set/cvp-sanity/tests/test_nodes.py
index 6ab48df..082930e 100644
--- a/test_set/cvp-sanity/tests/test_nodes.py
+++ b/test_set/cvp-sanity/tests/test_nodes.py
@@ -16,5 +16,5 @@
         pytest.fail(
             "Could not check the result: {}\n"
             "Nodes status result: {}".format(e, result))
-    assert not statuses["down"], "Some minions are down:\n {}".format(
+    assert not statuses["down"], "Some minions are down:\n{}".format(
         statuses["down"])
diff --git a/test_set/cvp-sanity/tests/test_nodes_in_maas.py b/test_set/cvp-sanity/tests/test_nodes_in_maas.py
index 74ec865..62c0fd8 100644
--- a/test_set/cvp-sanity/tests/test_nodes_in_maas.py
+++ b/test_set/cvp-sanity/tests/test_nodes_in_maas.py
@@ -55,8 +55,7 @@
     try:
         result = json.loads(get_nodes.values()[0])
     except ValueError as e:
-        assert result, "Could not get nodes: {}\n{}". \
-            format(get_nodes, e)
+        assert result, "Could not get '{}' nodes:\n{}".format(get_nodes, e)
 
     # 5. Check all nodes are in Deployed status
     failed_nodes = []
@@ -66,5 +65,7 @@
         if "status_name" in node.keys():
             if node["status_name"] != 'Deployed':
                 failed_nodes.append({node["fqdn"]: node["status_name"]})
-    assert not failed_nodes, "Some nodes have unexpected status in MAAS:" \
-                             "\n{}".format(json.dumps(failed_nodes, indent=4))
+    assert not failed_nodes, (
+        "Some nodes have unexpected status in MAAS:\n{}".format(
+            json.dumps(failed_nodes, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_nova_services.py b/test_set/cvp-sanity/tests/test_nova_services.py
index 54ed76e..a6fe959 100644
--- a/test_set/cvp-sanity/tests/test_nova_services.py
+++ b/test_set/cvp-sanity/tests/test_nova_services.py
@@ -10,8 +10,8 @@
         param='. /root/keystonercv3;'
               'nova service-list | grep "down\|disabled" | grep -v "Forced down"')
 
-    assert result == '', \
-        '''Some nova services are in wrong state'''
+    assert result == '', (
+        "Some Nova services are in wrong state:\n{}".format(result))
 
 
 @pytest.mark.smoke
@@ -34,9 +34,11 @@
         param='. /root/keystonercv3;'
               'openstack hypervisor list | egrep -v "\-----|ID" | wc -l')
 
-    assert all_cmp_services == hypervisors, \
-        "Number of nova-compute services ({}) does not match number of " \
+    assert all_cmp_services == hypervisors, (
+        "Number of nova-compute services ({}) does not match number of "
         "hypervisors ({}).".format(all_cmp_services, hypervisors)
-    assert enabled_cmp_services == hosts, \
-        "Number of enabled nova-compute services ({}) does not match number \
-        of hosts ({}).".format(enabled_cmp_services, hosts)
+    )
+    assert enabled_cmp_services == hosts, (
+        "Number of enabled nova-compute services ({}) does not match number "
+        "of hosts ({}).".format(enabled_cmp_services, hosts)
+    )
diff --git a/test_set/cvp-sanity/tests/test_ntp_sync.py b/test_set/cvp-sanity/tests/test_ntp_sync.py
index f2bbe8f..998aa31 100644
--- a/test_set/cvp-sanity/tests/test_ntp_sync.py
+++ b/test_set/cvp-sanity/tests/test_ntp_sync.py
@@ -26,8 +26,10 @@
             result[time].sort()
         else:
             result[time] = [node]
-    assert len(result) <= 1, 'Not all nodes have the same time:\n {}'.format(
-                             json.dumps(result, indent=4))
+    assert len(result) <= 1, (
+        'Time is out of sync on the following nodes:\n{}'.format(
+            json.dumps(result, indent=4))
+    )
 
 
 @pytest.mark.smoke
@@ -62,6 +64,7 @@
                 sys_peer_declared = True
         if not sys_peer_declared:
             final_result[node] = ntpq_output
-    assert not final_result,\
-        "NTP peers state is not expected on some nodes, could not find " \
+    assert not final_result, (
+        "NTP peers state is not as expected on some nodes; could not find "
         "declared system peer:\n{}".format(json.dumps(final_result, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_oss.py b/test_set/cvp-sanity/tests/test_oss.py
index 469323e..f28917c 100644
--- a/test_set/cvp-sanity/tests/test_oss.py
+++ b/test_set/cvp-sanity/tests/test_oss.py
@@ -39,6 +39,7 @@
                 if row['svname'] != 'FRONTEND' and row['status'] != 'UP':
                         wrong_data.append(info)
 
-    assert len(wrong_data) == 0, \
-        '''Some haproxy services are in wrong state
-              {}'''.format(json.dumps(wrong_data, indent=4))
+    assert len(wrong_data) == 0, (
+        "Some haproxy services are in wrong state:\n{}".format(
+            json.dumps(wrong_data, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_packet_checker.py b/test_set/cvp-sanity/tests/test_packet_checker.py
index b7c2064..c132294 100644
--- a/test_set/cvp-sanity/tests/test_packet_checker.py
+++ b/test_set/cvp-sanity/tests/test_packet_checker.py
@@ -26,7 +26,8 @@
     # defines packages specific to the concrete nodes
     inconsistency_rule = {"kvm03": ["rsync", "sysstat", "xz-utils"], "log01": ["python-elasticsearch"], "ctl01": ["python-gnocchiclient", "python-ujson"]}
     exclude_packages = utils.get_configuration().get("skipped_packages", [])
-    packages_versions = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
+    group, nodes = nodes_in_group
+    packages_versions = local_salt_client.cmd(tgt="L@"+','.join(nodes),
                                               fun='lowpkg.list_pkgs',
                                               expr_form='compound')
     # Let's exclude cid01 and dbs01 nodes from this check
@@ -38,8 +39,8 @@
     cluster_domain = local_salt_client.pillar_get(
         param='_param:cluster_domain') or '.local'
     gtw01 += '.' + cluster_domain
-    if gtw01 in nodes_in_group:
-        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes_in_group),
+    if gtw01 in nodes:
+        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes),
                                         fun='pillar.get',
                                         param='octavia:manager:enabled',
                                         expr_form='compound')
@@ -48,7 +49,7 @@
             exclude_nodes.append(gtw01)
             logging.info("gtw01 node is skipped in test_check_package_versions")
 
-    total_nodes = [i for i in nodes_in_group if i not in exclude_nodes]
+    total_nodes = [i for i in nodes if i not in exclude_nodes]
     if len(total_nodes) < 2:
         pytest.skip("Nothing to compare - only 1 node")
     nodes_with_packages = []
@@ -77,13 +78,15 @@
                 row.append("{}: No package".format(node))
 
         if diff.count(diff[0]) < len(nodes_with_packages):
-           if not is_deb_in_exception(inconsistency_rule, deb, row):
+            if not is_deb_in_exception(inconsistency_rule, deb, row):
                 row.sort()
                 row.insert(0, deb)
                 packages_with_different_versions.append(row)
-    assert len(packages_with_different_versions) == 0, \
-        "Several problems found: {0}".format(
-        json.dumps(packages_with_different_versions, indent=4))
+    assert len(packages_with_different_versions) == 0, (
+        "Non-uniform package versions are installed on '{}' group of nodes:\n"
+        "{}".format(
+            group, json.dumps(packages_with_different_versions, indent=4))
+    )
 
 
 @pytest.mark.full
@@ -93,19 +96,22 @@
     if skip:
         pytest.skip("Test for the latest packages is disabled")
     skipped_pkg = config.get("test_packages")["skipped_packages"]
+    group, nodes = nodes_in_group
     info_salt = local_salt_client.cmd(
-        tgt='L@' + ','.join(nodes_in_group),
+        tgt='L@' + ','.join(nodes),
         param='apt list --upgradable 2>/dev/null | grep -v Listing',
         expr_form='compound')
-    for node in nodes_in_group:
+    for node in nodes:
         result = []
         if info_salt[node]:
             upg_list = info_salt[node].split('\n')
             for i in upg_list:
                 if i.split('/')[0] not in skipped_pkg:
                     result.append(i)
-        assert not result, "Please check not latest packages at {}:\n{}".format(
-            node, "\n".join(result))
+        assert not result, (
+            "Packages are not of latest version on '{}' node:\n{}".format(
+                node, "\n".join(result))
+        )
 
 
 @pytest.mark.full
@@ -113,8 +119,9 @@
     # defines modules specific to the concrete nodes
     inconsistency_rule = {"ctl01": ["gnocchiclient", "ujson"], "log01": ["elasticsearch"]}
     exclude_modules = utils.get_configuration().get("skipped_modules", [])
+    group, nodes = nodes_in_group
     pre_check = local_salt_client.cmd(
-        tgt="L@"+','.join(nodes_in_group),
+        tgt="L@"+','.join(nodes),
         param='dpkg -l | grep "python-pip "',
         expr_form='compound')
     if pre_check.values().count('') > 0:
@@ -129,8 +136,8 @@
     cluster_domain = local_salt_client.pillar_get(
         param='_param:cluster_domain') or '.local'
     gtw01 += '.' + cluster_domain
-    if gtw01 in nodes_in_group:
-        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes_in_group),
+    if gtw01 in nodes:
+        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes),
                                         fun='pillar.get',
                                         param='octavia:manager:enabled',
                                         expr_form='compound')
@@ -143,8 +150,9 @@
 
     if len(total_nodes) < 2:
         pytest.skip("Nothing to compare - only 1 node")
-    list_of_pip_packages = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
-                                   fun='pip.freeze', expr_form='compound')
+    list_of_pip_packages = local_salt_client.cmd(
+        tgt="L@"+','.join(nodes),
+        fun='pip.freeze', expr_form='compound')
 
     nodes_with_packages = []
 
@@ -172,7 +180,8 @@
                 row.sort()
                 row.insert(0, deb)
                 modules_with_different_versions.append(row)
-    assert len(modules_with_different_versions) == 0, \
-        "Several problems found: {0}".format(
-        json.dumps(modules_with_different_versions, indent=4))
-
+    assert len(modules_with_different_versions) == 0, (
+        "Non-uniform pip modules are installed on '{}' group of nodes:\n"
+        "{}".format(
+            group, json.dumps(modules_with_different_versions, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_rabbit_cluster.py b/test_set/cvp-sanity/tests/test_rabbit_cluster.py
index d0bb44b..f90c54f 100644
--- a/test_set/cvp-sanity/tests/test_rabbit_cluster.py
+++ b/test_set/cvp-sanity/tests/test_rabbit_cluster.py
@@ -44,9 +44,9 @@
         if required_cluster_size_dict[node] != running_nodes_count:
             control_dict.update({node: running_nodes_count})
 
-    assert not len(control_dict), "Inconsistency found within cloud. " \
-                                  "RabbitMQ cluster is probably broken, " \
-                                  "the cluster size for each node " \
-                                  "should be: {} but the following " \
-                                  "nodes has other values: {}".format(
-        len(required_cluster_size_dict.keys()), control_dict)
+    assert not len(control_dict), (
+        "RabbitMQ cluster is probably "
+        "broken - the cluster size for each node should be ({}),\nbut the "
+        "following nodes have other values:\n{}".format(
+            len(required_cluster_size_dict.keys()), control_dict)
+    )
diff --git a/test_set/cvp-sanity/tests/test_repo_list.py b/test_set/cvp-sanity/tests/test_repo_list.py
index 92c45c0..43fc0e6 100644
--- a/test_set/cvp-sanity/tests/test_repo_list.py
+++ b/test_set/cvp-sanity/tests/test_repo_list.py
@@ -6,8 +6,8 @@
 @pytest.mark.full
 def test_list_of_repo_on_nodes(local_salt_client, nodes_in_group):
     # TODO: pillar.get
-    info_salt = local_salt_client.cmd(tgt='L@' + ','.join(
-                                              nodes_in_group),
+    group, nodes = nodes_in_group
+    info_salt = local_salt_client.cmd(tgt='L@' + ','.join(nodes),
                                       fun='pillar.get',
                                       param='linux:system:repo',
                                       expr_form='compound')
@@ -26,8 +26,7 @@
                     repos.pop(repo)
 
     raw_actual_info = local_salt_client.cmd(
-        tgt='L@' + ','.join(
-            nodes_in_group),
+        tgt='L@' + ','.join(nodes),
         param='cat /etc/apt/sources.list.d/*;'
               'cat /etc/apt/sources.list|grep deb|grep -v "#"',
         expr_form='compound', check_status=True)
@@ -57,8 +56,9 @@
             rows.append("{}: {}".format("config", "+"))
             rows.append("{}: No repo".format('pillars'))
             diff[repo] = rows
-    assert fail_counter == 0, \
-        "Several problems found: {0}".format(
-            json.dumps(diff, indent=4))
+    assert fail_counter == 0, (
+        "Non-uniform repos are on '{}' group of nodes:\n{}".format(
+            group, json.dumps(diff, indent=4))
+    )
     if fail_counter == 0 and len(diff) > 0:
         logging.warning("\nWarning: nodes contain more repos than reclass")
diff --git a/test_set/cvp-sanity/tests/test_salt_master.py b/test_set/cvp-sanity/tests/test_salt_master.py
index 75a0116..bb1b65c 100644
--- a/test_set/cvp-sanity/tests/test_salt_master.py
+++ b/test_set/cvp-sanity/tests/test_salt_master.py
@@ -9,8 +9,10 @@
         tgt='salt:master',
         param='cd /srv/salt/reclass/classes/cluster/; git status',
         expr_form='pillar', check_status=True)
-    assert 'nothing to commit' in git_status.values()[0], 'Git status showed' \
-           ' some unmerged changes {}'''.format(git_status.values()[0])
+    assert 'nothing to commit' in git_status.values()[0], (
+        "Git status shows some unmerged changes:\n{}".format(
+            git_status.values()[0])
+    )
 
 
 @pytest.mark.smoke
@@ -21,8 +23,7 @@
         expr_form='pillar', check_status=True)
     result = reclass[reclass.keys()[0]][-1]
 
-    assert result == '0', 'Reclass is broken' \
-                          '\n {}'.format(reclass)
+    assert result == '0', 'Reclass is broken:\n{}'.format(reclass)
 
 
 @pytest.mark.smoke
@@ -43,5 +44,7 @@
                                 ' reclass-salt --top output'
     reclass_nodes = sorted(json.loads(reclass_nodes.strip("}")).keys())
     salt_nodes = sorted([x for xs in json.loads(salt).values() for x in xs])
-    assert salt_nodes == reclass_nodes, 'Mismatch between registered salt nodes (left) ' \
-                                        'and defined reclass nodes (right)'
+    assert salt_nodes == reclass_nodes, (
+        "Mismatch between registered salt nodes (left) and node defined in "
+        "reclass (right)."
+    )
diff --git a/test_set/cvp-sanity/tests/test_services.py b/test_set/cvp-sanity/tests/test_services.py
index 0267af6..a014d85 100644
--- a/test_set/cvp-sanity/tests/test_services.py
+++ b/test_set/cvp-sanity/tests/test_services.py
@@ -17,7 +17,8 @@
     Inconsistent services will be checked with another test case
     """
     exclude_services = utils.get_configuration().get("skipped_services", [])
-    services_by_nodes = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
+    group, nodes = nodes_in_group
+    services_by_nodes = local_salt_client.cmd(tgt="L@"+','.join(nodes),
                                               fun='service.get_all',
                                               expr_form='compound')
 
@@ -30,8 +31,8 @@
     cluster_domain = local_salt_client.pillar_get(
         param='_param:cluster_domain') or '.local'
     gtw01 += '.' + cluster_domain
-    if gtw01 in nodes_in_group:
-        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes_in_group),
+    if gtw01 in nodes:
+        octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes),
                                         fun='pillar.get',
                                         param='octavia:manager:enabled',
                                         expr_form='compound')
@@ -47,7 +48,7 @@
     for node in services_by_nodes:
         if not services_by_nodes[node]:
             # TODO: do not skip node
-            logging.info("Node {} is skipped".format (node))
+            logging.info("Node {} is skipped".format(node))
             continue
         nodes.append(node)
         all_services.update(services_by_nodes[node])
@@ -72,9 +73,10 @@
             report.sort()
             report.insert(0, srv)
             pkts_data.append(report)
-    assert len(pkts_data) == 0, \
-        "Several problems found: {0}".format(
-        json.dumps(pkts_data, indent=4))
+    assert len(pkts_data) == 0, (
+        "Non-uniform services are running on '{}' group of nodes:\n{}".format(
+            group, json.dumps(pkts_data, indent=4))
+    )
 
 
 # TODO : remake this test to make workable https://mirantis.jira.com/browse/PROD-25958
diff --git a/test_set/cvp-sanity/tests/test_single_vip.py b/test_set/cvp-sanity/tests/test_single_vip.py
index cee92ec..f0e7d68 100644
--- a/test_set/cvp-sanity/tests/test_single_vip.py
+++ b/test_set/cvp-sanity/tests/test_single_vip.py
@@ -32,5 +32,7 @@
                 no_vip[group] = 'No vip found'
             else:
                 no_vip[group] = nodes_list
-    assert len(no_vip) < 1, "Some groups of nodes have problem with vip " \
-           "\n{}".format(json.dumps(no_vip, indent=4))
+    assert len(no_vip) < 1, (
+        "The following group(s) of nodes have problem with vip:\n{}".format(
+            json.dumps(no_vip, indent=4))
+    )
diff --git a/test_set/cvp-sanity/tests/test_stacklight.py b/test_set/cvp-sanity/tests/test_stacklight.py
index 7340951..03b5a42 100644
--- a/test_set/cvp-sanity/tests/test_stacklight.py
+++ b/test_set/cvp-sanity/tests/test_stacklight.py
@@ -18,26 +18,23 @@
 
     proxies = {"http": None, "https": None}
     IP = salt_output
-    assert requests.get('{0}://{1}:9200/'.format(proto, IP),
-                        proxies=proxies, verify=False).status_code == 200, \
-        'Cannot check elasticsearch url on {}.'.format(IP)
-    resp = requests.get('{0}://{1}:9200/_cat/health'.format(proto, IP),
-                        proxies=proxies, verify=False).content
-    assert resp.split()[3] == 'green', \
-        'elasticsearch status is not good {}'.format(
-        json.dumps(resp, indent=4))
-    assert resp.split()[4] == '3', \
-        'elasticsearch status is not good {}'.format(
-        json.dumps(resp, indent=4))
-    assert resp.split()[5] == '3', \
-        'elasticsearch status is not good {}'.format(
-        json.dumps(resp, indent=4))
-    assert resp.split()[10] == '0', \
-        'elasticsearch status is not good {}'.format(
-        json.dumps(resp, indent=4))
-    assert resp.split()[13] == '100.0%', \
-        'elasticsearch status is not good {}'.format(
-        json.dumps(resp, indent=4))
+    response = requests.get(
+        '{0}://{1}:9200/'.format(proto, IP),
+        proxies=proxies,
+        verify=False)
+    assert response.status_code == 200, (
+        "Issues with accessing elasticsearch on {}.".format(IP))
+    response = requests.get(
+        '{0}://{1}:9200/_cat/health'.format(proto, IP),
+        proxies=proxies,
+        verify=False).content
+    msg = "elasticsearch is not healthy:\n{}".format(
+        json.dumps(response, indent=4))
+    assert response.split()[3] == 'green',msg
+    assert response.split()[4] == '3', msg
+    assert response.split()[5] == '3', msg
+    assert response.split()[10] == '0', msg
+    assert response.split()[13] == '100.0%', msg
 
 
 @pytest.mark.sl_dup
@@ -52,15 +49,18 @@
         param='haproxy:proxy:listen:kibana:binds:ssl:enabled')
     proto = "https" if ssl else "http"
 
-    resp = requests.get('{0}://{1}:5601/api/status'.format(proto, IP),
-                        proxies=proxies, verify=False).content
-    body = json.loads(resp)
-    assert body['status']['overall']['state'] == "green", \
-        "Kibana status is not expected: {}".format(
-        body['status']['overall'])
+    response = requests.get(
+        '{0}://{1}:5601/api/status'.format(proto, IP),
+        proxies=proxies,
+        verify=False).content
+    body = json.loads(response)
+    assert body['status']['overall']['state'] == "green", (
+        "Kibana overall status is not 'green':\n{}".format(
+            body['status']['overall'])
+    )
     for i in body['status']['statuses']:
-        assert i['state'] == "green", \
-            "Kibana statuses are unexpected: {}".format(i)
+        assert i['state'] == "green", (
+            "Kibana statuses are unexpected:\n{}".format(i))
 
 
 @pytest.mark.smoke
@@ -89,10 +89,12 @@
         '{0}://{1}:9200/log-{2}/_search?pretty'.format(proto, IP, today),
         proxies=proxies,
         headers=headers,
-        verify = False,
+        verify=False,
         data=data)
-    assert 200 == response.status_code, 'Unexpected code {}'.format(
-        response.text)
+    assert response.status_code == 200, (
+        'Issues with accessing elasticsearch on {}:\n{}'.format(
+            IP, response.text)
+    )
     resp = json.loads(response.text)
     cluster_domain = local_salt_client.pillar_get(param='_param:cluster_domain')
     monitored_nodes = []
@@ -104,10 +106,11 @@
     for node in all_nodes:
         if node not in monitored_nodes:
             missing_nodes.append(node)
-    assert len(missing_nodes) == 0, \
-        'Not all nodes are in Elasticsearch. Found {0} keys, ' \
-        'expected {1}. Missing nodes: \n{2}'. \
-            format(len(monitored_nodes), len(all_nodes), missing_nodes)
+    assert len(missing_nodes) == 0, (
+        "Not all nodes are in Elasticsearch. Expected {}, but found {} keys.\n"
+        "Missing nodes:\n{}".format(
+            len(monitored_nodes), len(all_nodes), missing_nodes)
+    )
 
 
 @pytest.mark.sl_dup
@@ -130,9 +133,10 @@
         if line[line.find('/') - 1] != line[line.find('/') + 1] \
            and 'replicated' in line:
             wrong_items.append(line)
-    assert len(wrong_items) == 0, \
-        '''Some monitoring services doesn't have expected number of replicas:
-              {}'''.format(json.dumps(wrong_items, indent=4))
+    assert len(wrong_items) == 0, (
+        "Some monitoring services don't have the expected number of "
+        "replicas:\n{}".format(json.dumps(wrong_items, indent=4))
+    )
 
 
 @pytest.mark.smoke
@@ -152,8 +156,8 @@
 
     result = nodes_info[nodes_info.keys()[0]].replace('</td>', '').replace(
         '<td><i class="icon-chevron-down"></i> <b>', '').replace('</b>', '')
-    assert result == '', 'AlertManager page has some alerts! {}'.format(
-                         json.dumps(result), indent=4)
+    assert result == '', 'AlertManager page has some alerts!\n{}'.format(
+        json.dumps(result), indent=4)
 
 
 @pytest.mark.sl_dup
@@ -166,8 +170,8 @@
         expr_form='compound')
 
     if not salt_output:
-        pytest.skip("docker:swarm:role:master or prometheus:server \
-        pillars are not found on this environment.")
+        pytest.skip("docker:swarm:role:master or prometheus:server pillars "
+                    "are not found on this environment.")
 
     result = {}
     # for old reclass models, docker:swarm:role:master can return
@@ -185,9 +189,10 @@
         if line.split()[4 + shift] == 'Running' \
            or line.split()[4 + shift] == 'Ready':
             result[line.split()[1 + shift]] = 'OK'
-    assert 'NOT OK' not in result.values(), \
-        '''Some containers are in incorrect state:
-              {}'''.format(json.dumps(result, indent=4))
+    assert 'NOT OK' not in result.values(), (
+        "Some containers have incorrect state:\n{}".format(
+            json.dumps(result, indent=4))
+    )
 
 
 @pytest.mark.sl_dup
@@ -200,14 +205,16 @@
                                         expr_form='pillar',)
 
     if not salt_output:
-        pytest.skip("Telegraf or telegraf:agent \
-        pillar are not found on this environment.")
+        pytest.skip("Telegraf or telegraf:agent pillars are not found on "
+                    "this environment.")
 
     result = [{node: status} for node, status
               in salt_output.items()
               if status is False]
-    assert result == [], 'Telegraf service is not running ' \
-                         'on following nodes: {}'.format(result)
+    assert result == [], (
+        "Telegraf service is not running on the following nodes:\n{}".format(
+            result)
+    )
 
 
 @pytest.mark.sl_dup
@@ -221,5 +228,7 @@
     result = [{node: status} for node, status
               in salt_output.items()
               if status is False]
-    assert result == [], 'Fluentd check failed: td-agent service is not ' \
-                         'running on following nodes:'.format(result)
+    assert result == [], (
+        "Fluentd check failed - td-agent service is not running on the "
+        "following nodes:\n{}".format(result)
+    )
diff --git a/test_set/cvp-sanity/tests/test_ui_addresses.py b/test_set/cvp-sanity/tests/test_ui_addresses.py
index d8e6a32..5e6ccdb 100644
--- a/test_set/cvp-sanity/tests/test_ui_addresses.py
+++ b/test_set/cvp-sanity/tests/test_ui_addresses.py
@@ -16,9 +16,8 @@
         param='curl -k {0}://{1}/auth/login/ 2>&1 | \
                grep Login'.format(proto, IP),
         expr_form='pillar')
-    assert len(result) != 0, \
-        'Horizon login page is not reachable on {} from ctl nodes'.format(
-        IP[0])
+    assert len(result) != 0, (
+        'Horizon login page is not reachable on {} from ctl nodes.'.format(IP))
 
 
 @pytest.mark.smoke
@@ -31,11 +30,12 @@
     url = "{}://{}:{}/v3".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/ 2>&1 | \
-               grep stable'.format(url),
+        param='curl -k {}/ 2>&1 | grep stable'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public Openstack url is not reachable on {} from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Openstack url is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.sl_dup
@@ -52,12 +52,12 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/app/kibana 2>&1 | \
-               grep loading'.format(url),
+        param='curl -k {}/app/kibana 2>&1 | grep loading'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Internal Kibana login page is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Internal Kibana login page is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -70,12 +70,12 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/app/kibana 2>&1 | \
-               grep loading'.format(url),
+        param='curl -k {}/app/kibana 2>&1 | grep loading'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public Kibana login page is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Kibana login page is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.sl_dup
@@ -89,12 +89,12 @@
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl {}/graph 2>&1 | \
-               grep Prometheus'.format(url),
+        param='curl {}/graph 2>&1 | grep Prometheus'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Internal Prometheus page is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Internal Prometheus page is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -107,12 +107,12 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/graph 2>&1 | \
-               grep Prometheus'.format(url),
+        param='curl -k {}/graph 2>&1 | grep Prometheus'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public Prometheus page is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Prometheus page is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.sl_dup
@@ -128,9 +128,10 @@
         tgt=ctl_nodes_pillar,
         param='curl -s {}/ | grep Alertmanager'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Internal AlertManager page is not reachable on {} ' \
-        'from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Internal AlertManager page is not reachable on {} from ctl '
+        'nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -145,9 +146,10 @@
         tgt=ctl_nodes_pillar,
         param='curl -k -s {}/ | grep Alertmanager'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public AlertManager page is not reachable on {} ' \
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public AlertManager page is not reachable on {} '
         'from ctl nodes'.format(url)
+    )
 
 
 @pytest.mark.sl_dup
@@ -163,9 +165,10 @@
         tgt=ctl_nodes_pillar,
         param='curl {}/login 2>&1 | grep Grafana'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Internal Grafana page is not reachable on {} ' \
+    assert len(result[result.keys()[0]]) != 0, (
+        'Internal Grafana page is not reachable on {} '
         'from ctl nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -180,8 +183,9 @@
         tgt=ctl_nodes_pillar,
         param='curl -k {}/login 2>&1 | grep Grafana'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
+    assert len(result[result.keys()[0]]) != 0, (
         'Public Grafana page is not reachable on {} from ctl nodes'.format(url)
+    )
 
 
 @pytest.mark.sl_dup
@@ -195,11 +199,12 @@
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl {}/ 2>&1 | \
-             grep Alerta'.format(url),
+        param='curl {}/ 2>&1 | grep Alerta'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Internal Alerta page is not reachable on {} from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Internal Alerta page is not reachable on {} from '
+        'ctl nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -212,11 +217,10 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/ 2>&1 | \
-               grep Alerta'.format(url),
+        param='curl -k {}/ 2>&1 | grep Alerta'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public Alerta page is not reachable on {} from ctl nodes'.format(url)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Alerta page is not reachable on {} from ctl nodes'.format(url))
 
 
 @pytest.mark.smoke
@@ -230,11 +234,11 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/ 2>&1 | \
-               grep Authentication'.format(url),
+        param='curl -k {}/ 2>&1 | grep Authentication'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
+    assert len(result[result.keys()[0]]) != 0, (
         'Public Jenkins page is not reachable on {} from ctl nodes'.format(url)
+    )
 
 
 @pytest.mark.smoke
@@ -248,8 +252,7 @@
     url = "{}://{}:{}".format(proto, IP, port)
     result = local_salt_client.cmd(
         tgt=ctl_nodes_pillar,
-        param='curl -k {}/ 2>&1 | \
-               grep "Gerrit Code Review"'.format(url),
+        param='curl -k {}/ 2>&1 | grep "Gerrit Code Review"'.format(url),
         expr_form='pillar')
-    assert len(result[result.keys()[0]]) != 0, \
-        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url)
\ No newline at end of file
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url))
