Cleanup previous run output files
[functest-xtesting.git] / xtesting / core / behaveframework.py
index d8a61ef..2b41614 100644 (file)
@@ -14,7 +14,9 @@ from __future__ import division
 import logging
 import os
 import time
+
 import json
+import six
 
 from behave.__main__ import main as behave_main
 
@@ -32,7 +34,6 @@ class BehaveFramework(testcase.TestCase):
 
     def __init__(self, **kwargs):
         super(BehaveFramework, self).__init__(**kwargs)
-        self.res_dir = os.path.join(self.dir_results, self.case_name)
         self.json_file = os.path.join(self.res_dir, 'output.json')
         self.total_tests = 0
         self.pass_tests = 0
@@ -42,14 +43,8 @@ class BehaveFramework(testcase.TestCase):
 
     def parse_results(self):
         """Parse output.json and get the details in it."""
-
-        try:
-            with open(self.json_file) as stream_:
-                self.response = json.load(stream_)
-        except IOError:
-            self.__logger.error("Error reading the file %s", self.json_file)
-
-        try:
+        with open(self.json_file) as stream_:
+            self.response = json.load(stream_)
             if self.response:
                 self.total_tests = len(self.response)
             for item in self.response:
@@ -59,21 +54,14 @@ class BehaveFramework(testcase.TestCase):
                     self.fail_tests += 1
                 elif item['status'] == 'skipped':
                     self.skip_tests += 1
-        except KeyError:
-            self.__logger.error("Error in json - %s", self.response)
-
-        try:
             self.result = 100 * (
                 self.pass_tests / self.total_tests)
-        except ZeroDivisionError:
-            self.__logger.error("No test has been run")
-
-        self.details = {}
-        self.details['total_tests'] = self.total_tests
-        self.details['pass_tests'] = self.pass_tests
-        self.details['fail_tests'] = self.fail_tests
-        self.details['skip_tests'] = self.skip_tests
-        self.details['tests'] = self.response
+            self.details = {}
+            self.details['total_tests'] = self.total_tests
+            self.details['pass_tests'] = self.pass_tests
+            self.details['fail_tests'] = self.fail_tests
+            self.details['skip_tests'] = self.skip_tests
+            self.details['tests'] = self.response
 
     def run(self, **kwargs):
         """Run the BehaveFramework feature files
@@ -103,8 +91,12 @@ class BehaveFramework(testcase.TestCase):
                 self.__logger.exception("Cannot create %s", self.res_dir)
                 return self.EX_RUN_ERROR
         config = ['--tags='+','.join(tags),
-                  '--format=json',
-                  '--outfile='+self.json_file]
+                  '--junit', '--junit-directory={}'.format(self.res_dir),
+                  '--format=json', '--outfile={}'.format(self.json_file)]
+        if six.PY3:
+            html_file = os.path.join(self.res_dir, 'output.html')
+            config += ['--format=behave_html_formatter:HTMLFormatter',
+                       '--outfile={}'.format(html_file)]
         for feature in suites:
             config.append(feature)
         self.start_time = time.time()