import logging
import os
import time
+
import json
+import six
from behave.__main__ import main as behave_main
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
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:
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
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()