目前公司需要上自动化,先学习之。现在努力在优化架构。现在我搭建的架构如下:
其中:
autocase:自动化用例
data:参数数据
pagescreens:截图(当出现错误,或者需要监控时)
report:测试报告
test_case:测试用例
all_test:测试用例集
现在的架子还有一点就是封装,基础类的封装。这个没有做好,需要继续的完善
2015-7-22,框架补充
目前研究的框架为selenium2+python+unittest,模式为po(pageobject),在实践中进行学习。
首先建立基础类(basepage)
# -*- coding: utf-8 -*- ''' Created on 2015年7月21日 @author: admin 方法:基础类,供所有类继承 ''' from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver import time import sys reload(sys) import time, os class Action(object): """ BasePage封装所有页面都公用的方法,例如driver, url """ kb_url = "http://127.0.0.1:1080/" #初始化driver、url、等 def __init__(self, selenium_driver, base_url=kb_url, parent=None): self.base_url = base_url self.driver = selenium_driver self.timeout = 30 self.parent = parent self.tabs = {} """ 通过传参选择启动浏览器 # self.browser = "Firefox" #传入浏览器对象 # if Action.driver == None: # if self.browser.upper() == 'IE': Action.driver = webdriver.Ie() # elif self.browser.upper() == 'CHROME': Action.driver = webdriver.Chrome() # elif self.browser.upper() == 'FIREFOX': Action.driver = webdriver.Firefox() # elif self.browser.upper() == 'SAFARI': Action.driver = webdriver.Safari() # else: Action.driver = webdriver.Ie() # Action.driver.maximize_window() # #pass # #print u"加载浏览器驱动失败!" # self.driver = Action.driver self.verificationErrors = [] """ #打开页面,校验页面链接是否加载正确 def _open(self, url): #使用get打开访问链接地址 url = self.base_url + url self.driver.get(url) self.driver.maximize_window() #使用assert进行校验,打开的链接地址是否与配置的地址一致。调用on_page()方法 assert self.on_page(), u"打开开页面失败 %s" % url #重写元素定位方法 def find_element(self, *loc): #return self.driver.find_element(*loc) try: WebDriverWait(self.driver, 15).until(lambda driver: driver.find_element(*loc).is_displayed()) return self.driver.find_element(*loc) except: print u"%s 页面中未能找到 %s 元素" % (self, loc) #重写一组元素定位方法 def find_elements(self, *loc): #return self.driver.find_element(*loc) try: if len(self.driver.find_elements(*loc)): return self.driver.find_elements(*loc) except: print u"%s 页面中未能找到 %s 元素" % (self, loc) def open(self): self._open(self.url) def on_page(self): return self.driver.current_url == (self.base_url + self.url) #定义script方法,用于执行js脚本,范围执行结果 def script(self, src): self.driver.execute_script(src) #重写定义send_keys方法 def send_keys(self, loc, vaule, clear_first=True, click_first=True): try: if click_first: self.find_element(*loc).click() if clear_first: self.find_element(*loc).clear() self.find_element(*loc).send_keys(vaule) except AttributeError: print u"%s 页面中未能找到 %s 元素" % (self, loc) #savePngName:生成图片的名称 def savePngName(self, name): """ name:自定义图片的名称 """ day = time.strftime('%Y-%m-%d', time.localtime(time.time())) fp = "..\\result\\" + day + "\\image" tm = self.saveTime() type = ".png" if os.path.exists(fp): filename = str(fp)+"\\" + str(tm)+str("_")+str(name)+str(type) print filename return filename else: os.makedirs(fp) filename = str(fp)+ "\\" + str(tm)+str("_")+str(name)+str(type) print filename return filename #获取系统当前时间 def saveTime(self): """ 返回当前系统时间以括号中(2014-08-29-15_21_55)展示 """ return time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time())) #saveScreenshot:通过图片名称,进行截图保存 def saveScreenshot(self, driver, name): """ 快照截图 name:图片名称 """ #获取当前路径 #print os.getcwd() image = driver.save_screenshot(self.savePngName(name)) return image