Stop verifying ResultWriter.write_results exit codes
[functest-xtesting.git] / xtesting / core / robotframework.py
index cc6020a..2791b55 100644 (file)
@@ -17,6 +17,7 @@ import os
 
 import robot.api
 from robot.errors import RobotError
+from robot.reporting import resultwriter
 import robot.run
 from robot.utils.robottime import timestamp_to_secs
 from six import StringIO
@@ -56,9 +57,9 @@ class RobotFramework(testcase.TestCase):
     dir_results = "/var/lib/xtesting/results"
 
     def __init__(self, **kwargs):
-        self.res_dir = os.path.join(self.dir_results, 'robot')
-        self.xml_file = os.path.join(self.res_dir, 'output.xml')
         super(RobotFramework, self).__init__(**kwargs)
+        self.res_dir = os.path.join(self.dir_results, self.case_name)
+        self.xml_file = os.path.join(self.res_dir, 'output.xml')
 
     def parse_results(self):
         """Parse output.xml and get the details in it."""
@@ -77,6 +78,15 @@ class RobotFramework(testcase.TestCase):
         self.details['description'] = result.suite.name
         self.details['tests'] = visitor.get_data()
 
+    def generate_report(self):
+        """Generate html and xunit outputs"""
+        result = robot.api.ExecutionResult(self.xml_file)
+        writer = resultwriter.ResultWriter(result)
+        return writer.write_results(
+            report='{}/report.html'.format(self.res_dir),
+            log='{}/log.html'.format(self.res_dir),
+            xunit='{}/xunit.xml'.format(self.res_dir))
+
     def run(self, **kwargs):
         """Run the RobotFramework suites
 
@@ -96,6 +106,7 @@ class RobotFramework(testcase.TestCase):
             suites = kwargs["suites"]
             variable = kwargs.get("variable", [])
             variablefile = kwargs.get("variablefile", [])
+            include = kwargs.get("include", [])
         except KeyError:
             self.__logger.exception("Mandatory args were not passed")
             return self.EX_RUN_ERROR
@@ -110,13 +121,14 @@ class RobotFramework(testcase.TestCase):
             return self.EX_RUN_ERROR
         stream = StringIO()
         robot.run(*suites, variable=variable, variablefile=variablefile,
-                  output=self.xml_file, log='NONE',
+                  include=include, output=self.xml_file, log='NONE',
                   report='NONE', stdout=stream)
-        self.__logger.info("\n" + stream.getvalue())
-        self.__logger.info("Results were successfully generated")
+        self.__logger.info("\n%s", stream.getvalue())
         try:
             self.parse_results()
             self.__logger.info("Results were successfully parsed")
+            self.generate_report()
+            self.__logger.info("Results were successfully generated")
         except RobotError as ex:
             self.__logger.error("Run suites before publishing: %s", ex.message)
             return self.EX_RUN_ERROR