""" Simple Test Runner for unittest module """ import sys import unittest class SimpleTestRunner: """ A Test Runner that shows results in a simple human-readable format. As example, a common output is: This is a test short description : PASS This is another test short description : FAIL --------------------------------------------- """ __pgObj = None def __init__(self, pgObj, stream=sys.stderr, verbosity=0): self.stream = stream self.verbosity = verbosity self.__pgObj = pgObj def writeUpdate(self, message): self.stream.write(message) def run(self, test): """ Run the given test case or Test Suite. """ result = TextTestResult(self, self.__pgObj) test(result) return result class TextTestResult(unittest.TestResult): # Print in terminal with colors PASS = '\033[32mPASS\033[0m\n' FAIL = '\033[31mFAIL\033[0m\n' ERROR = '\033[31mERROR\033[0m\n' __pgObj = None def __init__(self, runner, pgObj): unittest.TestResult.__init__(self) self.runner = runner self.result = self.ERROR self.__pgObj = pgObj def startTest(self, test): unittest.TestResult.startTest(self, test) self.runner.writeUpdate("%s : " % test.shortDescription()) # SEND TO DB THE UPDATE THAT WE RUN EACH TEST self.__pgObj.run_test(test.params["testidctl"], test.params["testid"]) def addSuccess(self, test): unittest.TestResult.addSuccess(self, test) self.result = self.PASS def addError(self, test, err): unittest.TestResult.addError(self, test, err) test.longMessage = err[1] self.result = self.ERROR def addFailure(self, test, err): unittest.TestResult.addFailure(self, test, err) test.longMessage = err[1] self.result = self.FAIL def stopTest(self, test): unittest.TestResult.stopTest(self, test) # display: print test result self.runner.writeUpdate(self.result) # SEND TO DB THE RESULT OF THE TEST if self.result == self.PASS: status = "TEST_COMPLETE" else: status = "TEST_FAILED" self.__pgObj.finish_test(test.params["testidctl"], test.params["testid"], status)