brintos

brintos / linux-shallow public Read only

0
0
Text · 4.3 KiB · e56817b Raw
134 lines · python
1#!/usr/bin/env python32 3from enum import Enum4 5class ResultState(Enum):6    noresult = -17    skip = 08    success = 19    fail = 210 11class TestResult:12    def __init__(self, test_id="", test_name=""):13       self.test_id = test_id14       self.test_name = test_name15       self.result = ResultState.noresult16       self.failmsg = ""17       self.errormsg = ""18       self.steps = []19 20    def set_result(self, result):21        if (isinstance(result, ResultState)):22            self.result = result23            return True24        else:25            raise TypeError('Unknown result type, must be type ResultState')26 27    def get_result(self):28        return self.result29 30    def set_errormsg(self, errormsg):31        self.errormsg = errormsg32        return True33 34    def append_errormsg(self, errormsg):35        self.errormsg = '{}\n{}'.format(self.errormsg, errormsg)36 37    def get_errormsg(self):38        return self.errormsg39 40    def set_failmsg(self, failmsg):41        self.failmsg = failmsg42        return True43 44    def append_failmsg(self, failmsg):45        self.failmsg = '{}\n{}'.format(self.failmsg, failmsg)46 47    def get_failmsg(self):48        return self.failmsg49 50    def add_steps(self, newstep):51        if type(newstep) == list:52            self.steps.extend(newstep)53        elif type(newstep) == str:54            self.steps.append(step)55        else:56            raise TypeError('TdcResults.add_steps() requires a list or str')57 58    def get_executed_steps(self):59        return self.steps60 61class TestSuiteReport():62    def __init__(self):63        self._testsuite = []64 65    def add_resultdata(self, result_data):66        if isinstance(result_data, TestResult):67            self._testsuite.append(result_data)68            return True69 70    def count_tests(self):71        return len(self._testsuite)72 73    def count_failures(self):74        return sum(1 for t in self._testsuite if t.result == ResultState.fail)75 76    def count_skips(self):77        return sum(1 for t in self._testsuite if t.result == ResultState.skip)78 79    def find_result(self, test_id):80        return next((tr for tr in self._testsuite if tr.test_id == test_id), None)81 82    def update_result(self, result_data):83        orig = self.find_result(result_data.test_id)84        if orig != None:85            idx = self._testsuite.index(orig)86            self._testsuite[idx] = result_data87        else:88            self.add_resultdata(result_data)89 90    def format_tap(self):91        ftap = ""92        ftap += '1..{}\n'.format(self.count_tests())93        index = 194        for t in self._testsuite:95            if t.result == ResultState.fail:96                ftap += 'not '97            ftap += 'ok {} {} - {}'.format(str(index), t.test_id, t.test_name)98            if t.result == ResultState.skip or t.result == ResultState.noresult:99                ftap += ' # skipped - {}\n'.format(t.errormsg)100            elif t.result == ResultState.fail:101                if len(t.steps) > 0:102                    ftap += '\tCommands executed in this test case:'103                    for step in t.steps:104                        ftap += '\n\t\t{}'.format(step)105                ftap += '\n\t{}'.format(t.failmsg)106            ftap += '\n'107            index += 1108        return ftap109 110    def format_xunit(self):111        from xml.sax.saxutils import escape112        xunit = "<testsuites>\n"113        xunit += '\t<testsuite tests=\"{}\" skips=\"{}\">\n'.format(self.count_tests(), self.count_skips())114        for t in self._testsuite:115            xunit += '\t\t<testcase classname=\"{}\" '.format(escape(t.test_id))116            xunit += 'name=\"{}\">\n'.format(escape(t.test_name))117            if t.failmsg:118                xunit += '\t\t\t<failure>\n'119                if len(t.steps) > 0:120                    xunit += 'Commands executed in this test case:\n'121                    for step in t.steps:122                        xunit += '\t{}\n'.format(escape(step))123                xunit += 'FAILURE: {}\n'.format(escape(t.failmsg))124                xunit += '\t\t\t</failure>\n'125            if t.errormsg:126                xunit += '\t\t\t<error>\n{}\n'.format(escape(t.errormsg))127                xunit += '\t\t\t</error>\n'128            if t.result == ResultState.skip:129                xunit += '\t\t\t<skipped/>\n'130            xunit += '\t\t</testcase>\n'131        xunit += '\t</testsuite>\n'132        xunit += '</testsuites>\n'133        return xunit134