diff --git a/test/vcpe/preload.py b/test/vcpe/preload.py
index f4a2895..513d6e8 100755
--- a/test/vcpe/preload.py
+++ b/test/vcpe/preload.py
@@ -47,7 +47,7 @@
         if 2 != r.status_code / 100:
             self.logger.debug(r.content)
             self.logger.error('Clearing SNIRO date failed.')
-            sys.exit()
+            sys.exit(1)
 
     def preload_sniro(self, template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, vbrg_ar_name,
                       vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
@@ -76,7 +76,7 @@
             response = r.json()
             self.logger.debug(json.dumps(response, indent=4, sort_keys=True))
             self.logger.error('SNIRO preloading failed.')
-            sys.exit()
+            sys.exit(1)
 
         return True
 
@@ -220,7 +220,7 @@
 
         if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
             self.logger.error('Cannot find all names from %s.', vcperescust_csar)
-            sys.exit()
+            sys.exit(1)
 
         vgmux_svc_instance_uuid = '88888888888888'
         vbrg_svc_instance_uuid = '999999999999999'
diff --git a/test/vcpe/soutils.py b/test/vcpe/soutils.py
index 7ab4290..2a953e7 100755
--- a/test/vcpe/soutils.py
+++ b/test/vcpe/soutils.py
@@ -23,7 +23,7 @@
         self.vcpecommon = vcpecommon
         if api_version not in self.vcpecommon.so_req_api_url:
             self.logger.error('Incorrect SO API version: %s', api_version)
-            sys.exit()
+            sys.exit(1)
         self.service_req_api_url = self.vcpecommon.so_req_api_url[api_version]
 
     def submit_create_req(self, req_json, req_type, service_instance_id=None, vnf_instance_id=None):
@@ -240,7 +240,7 @@
 
         self.logger.error("AAI traversal didn't finish in 30 seconds. Something is wrong. Type {0}, UUID {1}".format(
             node_type, uuid))
-        sys.exit()
+        sys.exit(1)
 
     def create_entire_service(self, csar_file, vnf_template_file, preload_dict, name_suffix, heatbridge=False):
         """
@@ -319,7 +319,7 @@
             # wait for AAI to complete traversal
             if not vnf_instance_id:
                 self.logger.error('No VNF instance ID returned!')
-                sys.exit()
+                sys.exit(1)
             self.wait_for_aai('vnf', vnf_instance_id)
 
         preloader = preload.Preload(self.vcpecommon)
@@ -329,7 +329,7 @@
         if len(parser.vfmodule_models) == 1:
             if not vnf_instance_id or not vnf_model:
                 self.logger.error('Invalid VNF instance ID or VNF model!')
-                sys.exit()
+                sys.exit(1)
 
             model = parser.vfmodule_models[0]
             vfmodule_instance_name = '_'.join([self.vcpecommon.instance_name_prefix['vfmodule'],
diff --git a/test/vcpe/vcpe.py b/test/vcpe/vcpe.py
index 3677e80..3356e2b 100755
--- a/test/vcpe/vcpe.py
+++ b/test/vcpe/vcpe.py
@@ -45,7 +45,7 @@
 
     if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
         logger.error('Cannot find all names from %s.', vcperescust_csar)
-        sys.exit()
+        sys.exit(1)
 
     preloader.preload_sniro(template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, brg_ar_name,
                             vgmux_svc_instance_uuid, vbrg_svc_instance_uuid)
@@ -77,7 +77,7 @@
         svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
                                                         name_suffix, heatbridge)
         if not svc_instance_uuid[keyword]:
-            sys.exit()
+            sys.exit(1)
 
     # Setting up SNIRO
     config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
@@ -97,7 +97,7 @@
     logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
     if not preload_dict:
         logger.error("Failed to preload networks.")
-        sys.exit()
+        sys.exit(1)
     vcpecommon.save_preload_data(preload_dict)
 
     # create multiple services based on the pre-determined order
@@ -109,7 +109,7 @@
         svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
                                                         name_suffix, heatbridge)
         if not svc_instance_uuid[keyword]:
-            sys.exit()
+            sys.exit(1)
 
     vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
     # Setting up SNIRO
@@ -141,7 +141,7 @@
     host_dic = {k: vcpecommon.hosts[k] for k in nodes}
     if False:
         if not vcpecommon.delete_vxlan_interfaces(host_dic):
-            sys.exit()
+            sys.exit(1)
         custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
 
     #custom_service.clean_up_sdnc()
diff --git a/test/vcpe/vcpecommon.py b/test/vcpe/vcpecommon.py
index acad394..58f91a7 100755
--- a/test/vcpe/vcpecommon.py
+++ b/test/vcpe/vcpecommon.py
@@ -301,14 +301,14 @@
                 if filenamepath:
                     self.logger.error('Multiple files found for *{0}*.{1} in '
                                       'directory {2}'.format(file_name_keyword, file_ext, search_dir))
-                    sys.exit()
+                    sys.exit(1)
                 filenamepath = os.path.abspath(os.path.join(search_dir, file_name))
 
         if filenamepath:
             return filenamepath
         else:
             self.logger.error("Cannot find *{0}*{1} in directory {2}".format(file_name_keyword, file_ext, search_dir))
-            sys.exit()
+            sys.exit(1)
 
     @staticmethod
     def network_name_to_subnet_name(network_name):
@@ -359,7 +359,7 @@
                 policy_json = json.load(f)
             except ValueError:
                 self.logger.error(policy_template_file + " doesn't seem to contain valid JSON data")
-                sys.exit()
+                sys.exit(1)
 
         # Check policy already applied
         requests.packages.urllib3.disable_warnings()
@@ -370,13 +370,13 @@
             self.logger.error('Failure in checking CL policy existence. '
                                'Policy-pap responded with HTTP code {0}'.format(
                                policy_exists_req.status_code))
-            sys.exit()
+            sys.exit(1)
 
         try:
             policy_exists_json = policy_exists_req.json()
         except ValueError as e:
             self.logger.error('Policy-pap request failed: ' + e.message)
-            sys.exit()
+            sys.exit(1)
 
         try:
             assert policy_exists_json['groups'][0]['pdpSubgroups'] \
@@ -396,7 +396,7 @@
         if policy_create_req.status_code != 200:
             self.logger.error('Failed creating policy. Policy-api responded'
                               ' with HTTP code {0}'.format(policy_create_req.status_code))
-            sys.exit()
+            sys.exit(1)
 
         try:
             policy_version = json.loads(policy_create_req.text)['policy-version']
@@ -413,7 +413,7 @@
         if policy_insert_req.status_code != 200:
             self.logger.error('Policy PAP request failed with HTTP code'
                               '{0}'.format(policy_insert_req.status_code))
-            sys.exit()
+            sys.exit(1)
         self.logger.info('Successully pushed closed loop Policy')
 
     def is_node_in_aai(self, node_type, node_uuid):
@@ -427,7 +427,7 @@
             key = 'vnf-id'
         else:
             logging.error('Invalid node_type: ' + node_type)
-            sys.exit()
+            sys.exit(1)
 
         url = 'https://{0}:{1}/aai/v11/search/nodes-query?search-node-type={2}&filter={3}:EQUALS:{4}'.format(
             self.hosts['aai-inst1'], self.aai_query_port, search_node_type, key, node_uuid)
@@ -545,7 +545,7 @@
             self.logger.error('Cannot find all desired IP addresses for %s.', keywords)
             self.logger.error(json.dumps(ip_dict, indent=4, sort_keys=True))
             self.logger.error('Temporarily continue.. remember to check back vcpecommon.py line: 396')
-#            sys.exit()
+#            sys.exit(1)
         return ip_dict
 
     def get_oom_onap_vm_ip(self, keywords):
@@ -569,7 +569,7 @@
             resp = api.read_namespaced_service(service, self.onap_namespace)
         except client.rest.ApiException as e:
             self.logger.error('Error while making k8s API request: ' + e.body)
-            sys.exit()
+            sys.exit(1)
 
         return resp.spec.cluster_ip
 
@@ -590,7 +590,7 @@
             resp = api.read_namespaced_endpoints(service, self.onap_namespace)
         except client.rest.ApiException as e:
             self.logger.error('Error while making k8s API request: ' + e.body)
-            sys.exit()
+            sys.exit(1)
 
         if subset == "ip":
             return resp.subsets[0].addresses[0].ip
