diff --git a/fixtures/base.py b/fixtures/base.py
index 83d0be6..076fa3c 100644
--- a/fixtures/base.py
+++ b/fixtures/base.py
@@ -78,6 +78,10 @@
     )
     os_resource['net1'] = os_actions.create_network_resources()
     os_resource['ext_net'] = os_actions.get_external_network()
+    if not os_resource['ext_net']:
+        pytest.skip("External network not found, skipping tests. Please set "
+                    "the existing floating network at the 'external_network' "
+                    "option in the global_config.yaml file.")
     adm_project = os_actions.get_project_by_name("admin")
     os_resource['router'] = os_actions.create_router(
         os_resource['ext_net'], adm_project.id)
@@ -116,8 +120,6 @@
     openstack_clients.compute.keypairs.delete(os_resource['keypair'].name)
     if flavor_is_created:
         openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
-    if os_actions.create_fake_ext_net:
-        openstack_clients.network.delete_network(os_resource['ext_net']['id'])
 
 
 @pytest.fixture(scope='session')
@@ -180,6 +182,10 @@
     os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
         project=alt_project.name, cidr='10.3.7.0/24')
     os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
+    if not os_resource_alt_project['ext_net']:
+        pytest.skip("External network not found, skipping tests. Please set "
+                    "the existing floating network at the 'external_network' "
+                    "option in the global_config.yaml file.")
 
     os_resource_alt_project['router'] = alt_os_actions.create_router(
         os_resource_alt_project['ext_net'], alt_project.id)
@@ -213,9 +219,6 @@
     if flavor_is_created:
         openstack_alt_clients.compute.flavors.delete(
             os_resource_alt_project['flavor_id'])
-    if alt_os_actions.create_fake_ext_net:
-        openstack_alt_clients.network.delete_network(
-            os_resource_alt_project['ext_net']['id'])
 
     if alt_os_actions.is_project_empty(alt_project.id):
         openstack_alt_clients.auth.projects.delete(alt_project.id)
diff --git a/utils/os_client.py b/utils/os_client.py
index d00e662..0e2ab23 100644
--- a/utils/os_client.py
+++ b/utils/os_client.py
@@ -223,7 +223,6 @@
 class OSCliActions(object):
     def __init__(self, os_clients):
         self.os_clients = os_clients
-        self.create_fake_ext_net = False
 
     def get_project_by_name(self, name):
         return self.os_clients.auth.projects.find(
@@ -241,37 +240,6 @@
             net = self.create_network_resources()
         return net
 
-    def create_fake_external_network(self):
-        logger.info(
-            "Could not find any external network, creating a fake one...")
-        net_name = "spt-ext-net-{}".format(random.randrange(100, 999))
-        net_body = {"network": {"name": net_name,
-                                "router:external": True,
-                                "provider:network_type": "local"}}
-        try:
-            ext_net = \
-                self.os_clients.network.create_network(net_body)['network']
-            logger.info("Created a fake external net {}".format(net_name))
-        except Exception as e:
-            # in case 'local' net type is absent, create with default type
-            net_body["network"].pop('provider:network_type', None)
-            ext_net = \
-                self.os_clients.network.create_network(net_body)['network']
-        subnet_name = "spt-ext-subnet-{}".format(random.randrange(100, 999))
-        subnet_body = {
-            "subnet": {
-                "name": subnet_name,
-                "network_id": ext_net["id"],
-                "ip_version": 4,
-                "cidr": "10.255.255.0/24",
-                "allocation_pools": [{"start": "10.255.255.100",
-                                      "end": "10.255.255.200"}]
-            }
-        }
-        self.os_clients.network.create_subnet(subnet_body)
-        self.create_fake_ext_net = True
-        return ext_net
-
     def get_external_network(self):
         config = utils.get_configuration()
         ext_net = config.get('external_network') or ''
@@ -291,7 +259,7 @@
             ext_net = networks[0]
             logger.info("Using external net '{}'".format(ext_net["name"]))
         else:
-            ext_net = self.create_fake_external_network()
+            return None
         return ext_net
 
     def create_flavor(self, name, ram=256, vcpus=1, disk=2):
