#!/usr/bin/python # Copyright # DESCRIPTION # This is script for running all selected toaster cases on # selected web browsers manifested in toaster_test.cfg. # 1. How to start toaster in yocto: # $ source poky/oe-init-build-env # $ source toaster start # $ bitbake core-image-minimal # 2. How to install selenium on Ubuntu: # $ sudo apt-get install scrot python-pip # $ sudo pip install selenium # 3. How to install selenium addon in firefox: # Download the lastest firefox addon from http://release.seleniumhq.org/selenium-ide/ # Then install it. You can also install firebug and firepath addon # 4. How to start writing a new case: # All you need to do is to implement the function test_xxx() and pile it on. # 5. How to test with Chrome browser # Download/install chrome on host # Download chromedriver from https://code.google.com/p/chromedriver/downloads/list according to your host type # put chromedriver in PATH, (e.g. /usr/bin/, bear in mind to chmod) # For windows host, you may put chromedriver.exe in the same directory as chrome.exe import unittest, time, re, sys, getopt, os, logging, platform import ConfigParser import subprocess class toaster_run_all(): def __init__(self): # in case this script is called from other directory os.chdir(os.path.abspath(sys.path[0])) self.starttime = time.strptime(time.ctime()) self.parser = ConfigParser.SafeConfigParser() found = self.parser.read('toaster_test.cfg') self.host_os = platform.system().lower() self.run_all_cases() self.collect_log() def get_test_cases(self): # we have config groups for different os type in toaster_test.cfg cases_to_run = eval(self.parser.get('toaster_test_' + self.host_os, 'test_cases')) return cases_to_run def run_all_cases(self): cases_temp = self.get_test_cases() for case in cases_temp: single_case_cmd = "python -m unittest toaster_automation_test.toaster_cases.test_" + str(case) print single_case_cmd subprocess.call(single_case_cmd, shell=True) def collect_log(self): """ the log files are temporarily stored in ./log/tmp/.. After all cases are done, they should be transfered to ./log/$TIMESTAMP/ """ def comple(number): if number < 10: return str(0) + str(number) else: return str(number) now = self.starttime now_str = comple(now.tm_year) + comple(now.tm_mon) + comple(now.tm_mday) + \ comple(now.tm_hour) + comple(now.tm_min) + comple(now.tm_sec) log_dir = os.path.abspath(sys.path[0]) + os.sep + 'log' + os.sep + now_str log_tmp_dir = os.path.abspath(sys.path[0]) + os.sep + 'log' + os.sep + 'tmp' try: os.renames(log_tmp_dir, log_dir) except OSError : logging.error(" Cannot create log dir(timestamp) under log, please check your privilege") if __name__ == "__main__": toaster_run_all()