#!/usr/bin/env python """ Simple Test Runner for unittest module """ import sys import unittest import os from test.helpers.globalVariables import globalVar from test.helpers.testsrv_db import TestSrv_Database 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 --------------------------------------------- """ def __init__(self, stream=sys.stderr, verbosity=0): self.stream = stream self.verbosity = verbosity def writeUpdate(self, message): self.stream.write(message) def run(self, test): """ Run the given test case or Test Suite. """ result = TextTestResult(self) test(result) result.testsRun # self.writeUpdate("---------------------------------------------\n") 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' def __init__(self, runner): unittest.TestResult.__init__(self) self.runner = runner self.result = self.ERROR 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 psdb = TestSrv_Database() psdb.open("setup.xml") psdb.update_set_test_row(globalVar.station, globalVar.testid_ctl, globalVar.g_uuid, test.shortDescription(), "RUNNING") 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) # DB: PREPARE THE DATA TO BE INSERTED dbdata = {} dbdata['uuid'] = globalVar.g_uuid dbdata['name'] = test.shortDescription() dbdata['result'] = self.result dbdata['msg'] = str(test.longMessage) #DB: INSERT IN THE DATABASE filename='test_results.dat' testResult = open(filename, 'a') testResult.write(str(dbdata)) testResult.write("\n") testResult.close() #CONVERT FANCY FAIL AND PASS if self.result==self.PASS: simple_result="TRUE" if self.result == self.FAIL: simple_result = "FALSE" elif self.result == self.ERROR: simple_result = "FALSE" #SEND TO DB THE RESULT OF THE TEST psdb = TestSrv_Database() psdb.open("setup.xml") psdb.add_test_to_batch(globalVar.g_uuid, test.shortDescription(), globalVar.testid_ctl, simple_result, globalVar.g_mid, test.longMessage)