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 7d153d4..01142b8 100644
--- a/test_set/cvp-sanity/tests/test_contrail.py
+++ b/test_set/cvp-sanity/tests/test_contrail.py
@@ -35,9 +35,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):
@@ -65,9 +66,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 312d162..cd2fbfd 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))
 
 
 def test_k8s_get_nodes_status(local_salt_client):
@@ -45,9 +44,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):
@@ -67,9 +65,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):
@@ -89,9 +86,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):
@@ -107,8 +103,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):
@@ -129,9 +125,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):
@@ -172,8 +167,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(
@@ -181,6 +178,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 6751f1a..21528ca 100644
--- a/test_set/cvp-sanity/tests/test_ntp_sync.py
+++ b/test_set/cvp-sanity/tests/test_ntp_sync.py
@@ -25,8 +25,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
@@ -61,6 +63,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 8894093..b932e5d 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 f2d7f1a..35ebcb7 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 22e4a7f..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)
+    assert len(result[result.keys()[0]]) != 0, (
+        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url))
