diff --git a/_modules/runtest/tempest_sections/heat_plugin.py b/_modules/runtest/tempest_sections/heat_plugin.py
index 7bd1196..46731d9 100644
--- a/_modules/runtest/tempest_sections/heat_plugin.py
+++ b/_modules/runtest/tempest_sections/heat_plugin.py
@@ -58,7 +58,6 @@
         'volume_size',
     ]
 
-
     @property
     def admin_password(self):
         c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
@@ -143,6 +142,8 @@
         c = conditions.BaseRule('neutron.client.enabled', 'eq', True)
         networks = self.get_item_when_condition_match(
             'neutron.client.server.admin_identity.network', c)
+        if not networks:
+            return
         for network_name, network in networks.items():
             if network['router_external'] is True:
                 return network_name
@@ -160,7 +161,12 @@
         c = conditions.BaseRule('nova.client.enabled', 'eq', True)
         flavors = self.get_item_when_condition_match(
             'nova.client.server.admin_identity.flavor', c)
-        instance_type_name, _ = sorted(flavors.items(), key=lambda (k, v): (v, k))[-1]
+        if not flavors:
+            return
+        instance_type_name, _ = sorted(
+            flavors.items(),
+            key=lambda (k, v): (v, k)
+        )[-1]
         return instance_type_name
 
     @property
@@ -180,7 +186,12 @@
         c = conditions.BaseRule('nova.client.enabled', 'eq', True)
         flavors = self.get_item_when_condition_match(
             'nova.client.server.admin_identity.flavor', c)
-        minimal_instance_type_name, _ = sorted(flavors.items(), key=lambda (k, v): (v, k))[0]
+        if not flavors:
+            return
+        minimal_instance_type_name, _ = sorted(
+            flavors.items(),
+            key=lambda (k, v): (v, k)
+        )[0]
         return minimal_instance_type_name
 
     @property
@@ -217,7 +228,6 @@
     def sighup_config_edit_retries(self):
         pass
 
-
     @property
     def sighup_timeout(self):
         pass
diff --git a/_modules/runtest/tempest_sections/network.py b/_modules/runtest/tempest_sections/network.py
index cdf3daa..af1be32 100644
--- a/_modules/runtest/tempest_sections/network.py
+++ b/_modules/runtest/tempest_sections/network.py
@@ -3,6 +3,7 @@
 
 from runtest import conditions
 
+
 class Network(base_section.BaseSection):
 
     name = "network"
@@ -26,7 +27,6 @@
         'shared_physical_network',
     ]
 
-
     @property
     def build_interval(self):
         pass
@@ -56,6 +56,8 @@
         c = conditions.BaseRule('neutron.client.enabled', 'eq', True)
         networks = self.get_item_when_condition_match(
             'neutron.client.server.admin_identity.network', c)
+        if not networks:
+            return
         for network_name, network in networks.items():
             if network['router_external'] is True:
                 return network_name
@@ -95,11 +97,17 @@
             runtest_enable)
 
         if not network_name:
-          return
+            return
 
-        keystone_profile_admin = self.runtest_opts.get('keystone_profile_admin', {})
+        keystone_profile_admin = self.runtest_opts.get(
+            'keystone_profile_admin',
+            {}
+        )
         res = self.authenticated_openstack_module_call(
-            nodes[0], 'neutronng.list_networks', profile=keystone_profile_admin)[nodes[0]]['networks']
+            nodes[0],
+            'neutronng.list_networks',
+            profile=keystone_profile_admin
+        )[nodes[0]]['networks']
         networks = [n['id'] for n in res if n['name'] == network_name]
 
         if len(networks) != 1:
diff --git a/_modules/runtest/tempest_sections/network_feature_enabled.py b/_modules/runtest/tempest_sections/network_feature_enabled.py
index 09d6d59..b608cd4 100644
--- a/_modules/runtest/tempest_sections/network_feature_enabled.py
+++ b/_modules/runtest/tempest_sections/network_feature_enabled.py
@@ -3,6 +3,7 @@
 
 from runtest import conditions
 
+
 class NetworkFeatureEnabled(base_section.BaseSection):
 
     name = "network-feature-enabled"
@@ -22,6 +23,8 @@
         c = conditions.BaseRule(field='keystone.client.enabled', op='eq',
                                 val=True)
         nodes = self.get_nodes_where_condition_match(c)
+        if not nodes:
+            return
         keystone_profile_admin = self.runtest_opts.get(
             'keystone_profile_admin', {})
         res = self.authenticated_openstack_module_call(
@@ -54,7 +57,8 @@
         c = conditions.BaseRule('neutron.server.enabled', 'eq', True)
         ext = self.get_item_when_condition_match(
             'neutron.server.backend.extension', c)
-
+        if not ext:
+            return
         if 'port_security' in ext:
             return ext['port_security'].get('enabled', False)
 
