diff options
Diffstat (limited to 'examples/run_eclipsetests.py')
-rwxr-xr-x | examples/run_eclipsetests.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/examples/run_eclipsetests.py b/examples/run_eclipsetests.py new file mode 100755 index 00000000000..512cc52de72 --- /dev/null +++ b/examples/run_eclipsetests.py @@ -0,0 +1,136 @@ +#!/usr/bin/python + +# Copyright + +# DESCRIPTION +# This is script for running all selected eclipse cases on +# selected web browsers manifested in toaster_test.cfg. + + +import unittest, time, sys, os, logging, platform +import ConfigParser +import subprocess +import argparse +from eclipse_automation_test import eclipse_cases + +def get_args_parser(): + description = "Script that runs eclipse auto tests." + parser = argparse.ArgumentParser(description=description) + parser.add_argument('--run-all-tests', required=False, action="store_true", dest="run_all_tests", default=False, help='Run all (unhidden) tests') + parser.add_argument('--list-tests', required=False, action="store_true", dest="list_tests", default=False, + help='List all available tests.') + parser.add_argument('--run-suite', required=False, dest='run_suite', default=False, + help='run suite (defined in ini file)') + return parser + + +def get_tests(): + + testslist = [] + prefix = 'eclipse_automation_test.eclipse_cases' + + for t in dir(eclipse_cases): + if t.startswith('test_'): + testslist.append('.'.join((prefix, t))) + + return testslist + + +def get_tests_from_ini(suite=None): + + testslist = [] + config = ConfigParser.SafeConfigParser() + config.read('settings-eclipse.ini') + + if suite is not None: + target_suite = suite.lower() + + # TODO: if suite is valid suite + + else: + target_suite = platform.system().lower() + + try: + tests_from_ini = eval(config.get('eclipse_test_' + target_suite, 'test_cases')) + except: + print 'Failed to get test cases from ini file. Make sure the format is correct.' + return None + + prefix = 'eclipse_automation_test.eclipse_cases.test_' + for t in tests_from_ini: + testslist.append(prefix + str(t)) + + return testslist + +def main(): + +# In case this script is called from other directory + os.chdir(os.path.abspath(sys.path[0])) + + parser = get_args_parser() + args = parser.parse_args() + + + if args.run_all_tests: + testslist = get_tests() + elif args.run_suite: + testslist = get_tests_from_ini(args.run_suite) + os.environ['ECLIPSE_SUITE'] = args.run_suite + else: + testslist = get_tests_from_ini() + + if not testslist: + print 'Failed to get test cases.' + exit(1) + + suite = unittest.TestSuite() + loader = unittest.TestLoader() + loader.sortTestMethodsUsing = None + runner = unittest.TextTestRunner(verbosity=2, resultclass=buildResultClass(args)) + + for test in testslist: + try: + suite.addTests(loader.loadTestsFromName(test)) + except AttributeError as e: + return 1 + + result = runner.run(suite) + + if result.wasSuccessful(): + return 0 + else: + return 1 + + +def buildResultClass(args): + """Build a Result Class to use in the testcase execution""" + + class StampedResult(unittest.TextTestResult): + """ + Custom TestResult that prints the time when a test starts. As toaster-auto + can take a long time (ie a few hours) to run, timestamps help us understand + what tests are taking a long time to execute. + """ + def startTest(self, test): + import time + self.stream.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + " - ") + super(StampedResult, self).startTest(test) + + return StampedResult + + +if __name__ == "__main__": + + + try: + ret = main() + except: + ret = 1 + import traceback + traceback.print_exc(5) + finally: + if os.getenv('ECLIPSE_SUITE'): + del os.environ['ECLIPSE_SUITE'] + sys.exit(ret) + + |