diff options
Diffstat (limited to 'bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py')
-rwxr-xr-x | bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py index d975d48acb6..d8f838aeaff 100755 --- a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +++ b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py @@ -230,60 +230,70 @@ class NoParsingFilter(logging.Filter): def LogResults(original_class): orig_method = original_class.run + from time import strftime, gmtime + caller = 'toaster' + timestamp = strftime('%Y%m%d%H%M%S',gmtime()) + logfile = os.path.join(os.getcwd(),'results-'+caller+'.'+timestamp+'.log') + linkfile = os.path.join(os.getcwd(),'results-'+caller+'.log') + #rewrite the run method of unittest.TestCase to add testcase logging def run(self, result, *args, **kws): orig_method(self, result, *args, **kws) passed = True testMethod = getattr(self, self._testMethodName) - #if test case is decorated then use it's number, else use it's name try: test_case = testMethod.test_case except AttributeError: test_case = self._testMethodName + class_name = str(testMethod.im_class).split("'")[1] + #create custom logging level for filtering. custom_log_level = 100 logging.addLevelName(custom_log_level, 'RESULTS') - caller = os.path.basename(sys.argv[0]) def results(self, message, *args, **kws): if self.isEnabledFor(custom_log_level): self.log(custom_log_level, message, *args, **kws) logging.Logger.results = results - logging.basicConfig(filename=os.path.join(os.getcwd(),'results-'+caller+'.log'), + logging.basicConfig(filename=logfile, filemode='w', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%H:%M:%S', level=custom_log_level) for handler in logging.root.handlers: handler.addFilter(NoParsingFilter()) -# local_log = logging.getLogger(caller) - local_log = logging.getLogger() + local_log = logging.getLogger(caller) #check status of tests and record it + for (name, msg) in result.errors: - if self._testMethodName == str(name).split(' ')[0]: + if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]): local_log.results("Testcase "+str(test_case)+": ERROR") - local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n") + local_log.results("Testcase "+str(test_case)+":\n"+msg) passed = False for (name, msg) in result.failures: - if self._testMethodName == str(name).split(' ')[0]: + if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]): local_log.results("Testcase "+str(test_case)+": FAILED") - local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n") + local_log.results("Testcase "+str(test_case)+":\n"+msg) passed = False for (name, msg) in result.skipped: - if self._testMethodName == str(name).split(' ')[0]: - local_log.results("Testcase "+str(test_case)+": SKIPPED"+"\n\n\n") + if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]): + local_log.results("Testcase "+str(test_case)+": SKIPPED") passed = False if passed: - local_log.results("Testcase "+str(test_case)+": PASSED"+"\n\n\n") + local_log.results("Testcase "+str(test_case)+": PASSED") - original_class.run = run - return original_class + # Create symlink to the current log + if os.path.exists(linkfile): + os.remove(linkfile) + os.symlink(logfile, linkfile) + original_class.run = run + return original_class ########################################### @@ -292,16 +302,26 @@ def LogResults(original_class): # # ########################################### +@LogResults class toaster_cases_base(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.log = cls.logger_create() + def setUp(self): self.screenshot_sequence = 1 self.verificationErrors = [] self.accept_next_alert = True self.host_os = platform.system().lower() + if os.getenv('TOASTER_SUITE'): + self.target_suite = os.getenv('TOASTER_SUITE') + else: + self.target_suite = self.host_os + self.parser = ConfigParser.SafeConfigParser() - configs = self.parser.read('toaster_test.cfg') - self.base_url = eval(self.parser.get('toaster_test_' + self.host_os, 'toaster_url')) + self.parser.read('toaster_test.cfg') + self.base_url = eval(self.parser.get('toaster_test_' + self.target_suite, 'toaster_url')) # create log dir . Currently , we put log files in log/tmp. After all # test cases are done, move them to log/$datetime dir @@ -310,37 +330,37 @@ class toaster_cases_base(unittest.TestCase): mkdir_p(self.log_tmp_dir) except OSError : logging.error("%(asctime)s Cannot create tmp dir under log, please check your privilege") - self.log = self.logger_create() + # self.log = self.logger_create() # driver setup self.setup_browser() - def logger_create(self): - """ - we use root logger for every testcase. - The reason why we don't use TOASTERXXX_logger is to avoid setting respective level for - root logger and TOASTERXXX_logger - To Be Discussed - """ - log_level_dict = {'CRITICAL':logging.CRITICAL, 'ERROR':logging.ERROR, 'WARNING':logging.WARNING, \ - 'INFO':logging.INFO, 'DEBUG':logging.DEBUG, 'NOTSET':logging.NOTSET} - log = logging.getLogger() -# log = logging.getLogger('TOASTER_' + str(self.case_no)) - self.logging_level = eval(self.parser.get('toaster_test_' + self.host_os, 'logging_level')) - key = self.logging_level.upper() - log.setLevel(log_level_dict[key]) - fh = logging.FileHandler(filename=self.log_tmp_dir + os.sep + 'case_all' + '.log', mode='a') + @staticmethod + def logger_create(): + log_file = "toaster-auto-" + time.strftime("%Y%m%d%H%M%S") + ".log" + if os.path.exists("toaster-auto.log"): os.remove("toaster-auto.log") + os.symlink(log_file, "toaster-auto.log") + + log = logging.getLogger("toaster") + log.setLevel(logging.DEBUG) + + fh = logging.FileHandler(filename=log_file, mode='w') + fh.setLevel(logging.DEBUG) + ch = logging.StreamHandler(sys.stdout) - formatter = logging.Formatter('%(pathname)s - %(lineno)d - %(asctime)s \n \ - %(name)s - %(levelname)s - %(message)s') + ch.setLevel(logging.INFO) + + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) + log.addHandler(fh) log.addHandler(ch) + return log def setup_browser(self, *browser_path): - self.browser = eval(self.parser.get('toaster_test_' + self.host_os, 'test_browser')) + self.browser = eval(self.parser.get('toaster_test_' + self.target_suite, 'test_browser')) print self.browser if self.browser == "firefox": driver = webdriver.Firefox() @@ -660,7 +680,7 @@ class toaster_cases_base(unittest.TestCase): # Note: to comply with the unittest framework, we call these test_xxx functions # from run_toastercases.py to avoid calling setUp() and tearDown() multiple times -@LogResults + class toaster_cases(toaster_cases_base): ############## # CASE 901 # |