class runner(): casedir1 = getcwd.get_cwd()+'//testsuites/ApprBase' casedir2 = getcwd.get_cwd() + '//testsuites/ApprControl' casedir3 = getcwd.get_cwd() + '//testsuites/ApprSupport' #(unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py), #并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover) discover1 = unittest.defaultTestLoader.discover(casedir1) print("ApprBse cases:%s"%discover1) discover2 = unittest.defaultTestLoader.discover(casedir2,top_level_dir="testsuites") print("ApprControl cases:%s"%discover2) discover3 = unittest.defaultTestLoader.discover(casedir3,top_level_dir="testsuites") print("ApprSupport cases:%s"%discover3) #lastPath = os.path.dirname(os.getcwd())#获取当前路径的上一级 resultDir = getcwd.get_cwd() + '/test_report/' #报告存放路径 now = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())) filename = resultDir + now + "report.html" fp = open(filename, 'wb') cases=['ApprBase','ApprControl','ApprSupoort'] def run(self,discover,s): runner = HTMLTestRunner.HTMLTestRunner(stream=self.fp,title=str(self.cases[s])+u'测试报告',description=u'用例执行情况:') runner.run(discover) def muti_run(self): t1 = threading.Thread(target=self.run,args=(self.discover1,0,)) t2 = threading.Thread(target=self.run, args=(self.discover2,1,)) t3 = threading.Thread(target=self.run,args=(self.discover3,2,)) t1.start() t2.start() t3.start() t1.join() t2.join() t3.join() self.fp.close()
def __init__(self,logger): #创建一个logger self.logger=logging.getLogger(logger) self.logger.setLevel(logging.DEBUG) #创建一个handler,用于写入日志文件 rq=time.strftime('%Y%m%d%H%M',time.localtime(time.time())) log_path = getcwd.get_cwd() + '/logs/' #log_path=os.path.dirname(os.path.dirname(os.getcwd()))+'/logs/' # log_path = (os.path.dirname(os.getcwd()) + '/Logs/' # log_path = 'D:\PycharmProjects\General Approval'+'/logs/' log_name = log_path + rq + '.log' fh= logging.FileHandler(log_name,encoding = 'utf-8') fh.setLevel(logging.INFO) #再创建一个handler,用于输出控制台 ch = logging.StreamHandler() ch.setLevel(logging.INFO) #定义handler的输出格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) #给logger添加handler self.logger.addHandler(fh) self.logger.addHandler(ch)
def open_browser(self, driver): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") logger.info("you had select %s browser." % browser) url = config.get("testServer", "URL") logger.info("The test server url is:%s" % url) if browser == "Firefox": driver = webdriver.Firefox( executable_path=self.firefox_driver_path) logger.info("Starting firefox browser.") elif browser == "Chrome": driver = webdriver.Chrome(self.chrome_driver_path) logger.info("Starting chrome browser.") elif browser == "IE": driver = webdriver.Ie(self.ie_driver_path) logger.info("Starting IE browser") driver.get(url) logger.info("Open url:%s" % url) driver.maximize_window() logger.info("Maxmize the current window.") driver.implicitly_wait(8) logger.info("Set implicitly wait 8 seconds.") return driver
def delete_all(self): dir_list = ['logs', 'screenshots', 'test_report'] # 要删除文件的目录名 for dir in dir_list: dirPath = getcwd.get_cwd() + '\\' + dir # 拼接删除目录完整路径 file_list = os.listdir(dirPath) # 返回目录下的文件list for i in file_list: file_path = os.path.join(dirPath, i) # 拼接文件的完整路径 os.remove(file_path)
class BrowserEngine(object): dir = getcwd.get_cwd() #chrome_driver_path = dir + '/tools/chromedriver.exe' firefox_driver_path = dir + '/tools/geckodriver.exe' ie_driver_path = dir + '/tools/IEDriverServer.exe' def __init__(self, driver): self.driver = driver def open_browser(self, driver): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") logger.info("you had select %s browser." % browser) url = config.get("testServer", "URL") logger.info("The test server url is:%s" % url) if browser == "Firefox": driver = webdriver.Firefox( executable_path=self.firefox_driver_path) logger.info("Starting firefox browser.") elif browser == "Chrome": chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') # 指定无界面形式运行 chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--no-sandbox') #chrome_options.add_argument('--start-maximized') chrome_options.add_argument('window-size=1920x1080') # 指定浏览器分辨率 chrome_options.add_argument( '--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug #driver = webdriver.Chrome() driver = webdriver.Chrome(chrome_options=chrome_options) logger.info("Starting chrome browser.") elif browser == "IE": driver = webdriver.Ie(self.ie_driver_path) logger.info("Starting IE browser") driver.get(url) logger.info("Open url:%s" % url) driver.maximize_window() logger.info("Maxmize the current window.") driver.implicitly_wait(10) logger.info("Set implicitly wait 8 seconds.") return driver def browse_name(self): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") return browser def quit_browse(self): logger.info("Now,close and quit the browser") self.driver.quit()
def send_report(self): dir = getcwd.get_cwd() result_dir = dir + '/test_report' lists = os.listdir(result_dir) lists.sort(key=lambda fn: os.path.getatime(result_dir + "\\" + fn)) # 找到最新生成的文件 file_new = os.path.join(result_dir, lists[-1]) logger.info("the report:" + file_new + "will be send") self.send_mail(file_new)
def get_windows_img(self): """ 在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\Screenshots下 """ file_path = getcwd.get_cwd() + '/screenshots/' rq = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) screen_name = file_path + rq + '.png' try: self.driver.get_screenshot_as_file(screen_name) logger.info("Had take screenshot and save to folder : /screenshots") print(screen_name) except NameError as e: logger.error("Failed to take screenshot! %s" % e)
class BrowserEngine(object): dir = getcwd.get_cwd() chrome_driver_path = dir + '/tools/chromedriver.exe' firefox_driver_path = dir + '/tools/geckodriver.exe' ie_driver_path = dir + '/tools/IEDriverServer.exe' def __init__(self, driver): self.driver = driver def open_browser(self, driver): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") logger.info("you had select %s browser." % browser) url = config.get("testServer", "URL") logger.info("The test server url is:%s" % url) if browser == "Firefox": driver = webdriver.Firefox( executable_path=self.firefox_driver_path) logger.info("Starting firefox browser.") elif browser == "Chrome": driver = webdriver.Chrome(self.chrome_driver_path) logger.info("Starting chrome browser.") elif browser == "IE": driver = webdriver.Ie(self.ie_driver_path) logger.info("Starting IE browser") driver.get(url) logger.info("Open url:%s" % url) driver.maximize_window() logger.info("Maxmize the current window.") driver.implicitly_wait(8) logger.info("Set implicitly wait 8 seconds.") return driver def browse_name(self): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") return browser def quit_browse(self): logger.info("Now,close and quit the browser") self.driver.quit()
def login(self): u'''根据配置文件读取用户登录''' browser = BrowserEngine(self) self.driver = browser.open_browser(self) user_path = getcwd.get_cwd() + '/config/user_info.txt' loginpage = Login_logout(self.driver) user_file = open(user_path) all_values = user_file.readlines() values = all_values[0] user_file.close() username = values.split(',')[0] userpasswrod = values.split(',')[1] loginpage.login(username, userpasswrod) return self.driver
def remove_logs(self): """到期删除日志,截图,报告文件""" dir_list = ['logs', 'screenshots','test_report'] # 要删除文件的目录名 for dir in dir_list: dirPath = getcwd.get_cwd() + '\\' + dir # 拼接删除目录完整路径 file_list = os.listdir(dirPath) # 返回目录下的文件list for i in file_list: file_path = os.path.join(dirPath, i) # 拼接文件的完整路径 t_list = self.TimeStampToTime(os.path.getctime(file_path)).split('-') now_list = self.TimeStampToTime(time.time()).split('-') t = datetime.datetime(int(t_list[0]), int(t_list[1]), int(t_list[2])) # 将时间转换成datetime.datetime 类型 now = datetime.datetime(int(now_list[0]), int(now_list[1]), int(now_list[2])) if (now - t).days > 6 or os.path.getsize(file_path) > 1048576: # 时间大于6天,大小大于1m删除 os.remove(file_path) print("had delete file:%s" % i)
def test_login(self): u'''登录政务系统测试用例,用户名:admin''' user_path = getcwd.get_cwd() + '/config/user_info.txt' loginpage = Login_logout(self.driver) user_file = open(user_path) all_values = user_file.readlines() values = all_values[0] user_file.close() username = values.split(',')[0] userpasswrod = values.split(',')[1] loginpage.login(username, userpasswrod) try: title = loginpage.get_title() self.assertEqual('网上审批系统', title) except Exception as e: loginpage.get_windows_img() raise e
#-*- coding: UTF-8 -*- import time import unittest import HTMLTestRunner from framework import getcwd from framework.email_report import EmailReport from framework.logger import logger #from testsuites.ApprBase.登录与注销.test_loginout import Loginout # 指定测试报告文件 report_path = getcwd.get_cwd() + '/test_report/' now = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(time.time())) HtmlFile = report_path + now + "report.html" # 加载所有测试套件中的所有测试用例 suite_path = getcwd.get_cwd() + r"\testsuites" suite = unittest.TestLoader().discover(suite_path) # suite = unittest.TestSuite() # suite.addTest(Loginout('test_login')) # suite.addTest(Loginout('test_logout')) if __name__ == '__main__': with open(HtmlFile, 'wb') as fp: # 打开测试报告文件,用于写入测试报告 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"政务系统自动化测试报告", description=u"备注:测试报告附件请用chorome打开,否则无法展开详情", verbosity=2) runner.run(suite)
import os import codecs import configparser from framework import getcwd #proDir = os.path.split(os.path.realpath(__file__))[0] proDir = getcwd.get_cwd() configPath = os.path.join(proDir, "config/config.ini") class ReadConfig: def __init__(self): fd = open(configPath) data = fd.read() # remove BOM if data[:3] == codecs.BOM_UTF8: data = data[3:] file = codecs.open(configPath, "w") file.write(data) file.close() fd.close() self.cf = configparser.ConfigParser() self.cf.read(configPath) def get_mysql(self, name): value = self.cf.get("MYSQL", name) return value def get_oracle(self, name):
def browse_name(self): config = configparser.ConfigParser() file_path = getcwd.get_cwd() + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") return browser