diff --git a/xtesting/core/robotframework.py b/xtesting/core/robotframework.py index 775ed1ce..24b6bd45 100644 --- a/xtesting/core/robotframework.py +++ b/xtesting/core/robotframework.py @@ -56,6 +56,9 @@ class RobotFramework(testcase.TestCase): def __init__(self, **kwargs): super().__init__(**kwargs) self.xml_file = os.path.join(self.res_dir, 'output.xml') + # skip_factor is used to determine if SKIP status is taken into account as a successful output into + # in result percentage computation. + self.skip_factor = 0 def parse_results(self): """Parse output.xml and get the details in it.""" @@ -64,7 +67,7 @@ def parse_results(self): result.visit(visitor) try: self.result = 100 * ( - result.suite.statistics.passed / + (result.suite.statistics.passed + self.skip_factor * result.suite.statistics.skipped)/ result.suite.statistics.total) except ZeroDivisionError: self.__logger.error("No test has been run") @@ -103,6 +106,7 @@ def run(self, **kwargs): variable = kwargs.get("variable", []) variablefile = kwargs.get("variablefile", []) include = kwargs.get("include", []) + self.skip_factor = int(kwargs.get("allow_skip", False)) except KeyError: self.__logger.exception("Mandatory args were not passed") return self.EX_RUN_ERROR diff --git a/xtesting/tests/unit/core/test_robotframework.py b/xtesting/tests/unit/core/test_robotframework.py index f36625e6..21b557da 100644 --- a/xtesting/tests/unit/core/test_robotframework.py +++ b/xtesting/tests/unit/core/test_robotframework.py @@ -86,25 +86,41 @@ def _test_result(self, config, result): {'description': config['name'], 'tests': []}) def test_null_passed(self): - self._config.update({'statistics.passed': 0, + self._config.update({'statistics.skipped': 0, + 'statistics.passed': 0, 'statistics.total': 20}) self._test_result(self._config, 0) def test_no_test(self): - self._config.update({'statistics.passed': 20, + self._config.update({'statistics.skipped': 0, + 'statistics.passed': 20, 'statistics.total': 0}) self._test_result(self._config, 0) def test_half_success(self): - self._config.update({'statistics.passed': 10, + self._config.update({'statistics.skipped': 0, + 'statistics.passed': 10, 'statistics.total': 20}) self._test_result(self._config, 50) def test_success(self): - self._config.update({'statistics.passed': 20, + self._config.update({'statistics.skipped': 0, + 'statistics.passed': 20, 'statistics.total': 20}) self._test_result(self._config, 100) + def test_skip_excluded(self): + self._config.update({'statistics.skipped': 1, + 'statistics.passed': 4, + 'statistics.total': 5}) + self._test_result(self._config, 80) + + def test_skip_included(self): + self._config.update({'statistics.skipped': 1, + 'statistics.passed': 4, + 'statistics.total': 5}) + self.test.skip_factor = 1 + self._test_result(self._config, 100) class GenerateReportTesting(unittest.TestCase):