一,線性測試css
1.概念:python
經過錄制或編寫對應應用程序的操做步驟產生的線性腳本。單純的來模擬用戶完整的操做場景。web
(操做,重複操做,數據)都混合在一塊兒。app
2.優勢:框架
每一個腳本相對獨立,且不產生其餘依賴和調用。模塊化
3.缺點:工具
開發成本高,用例之間存在重複的操做。好比重複的用戶登陸和退出。學習
維護成本高,因爲重複的操做,當重複的操做發生改變時,則須要逐一進行腳本的修改。測試
4.線性測試實例ui
用戶登陸
如下的用戶名密碼到時候本身去申請,就不將筆者的用戶密碼貼出來了。
# coding=utf-8 ''' Created on 2016-7-20 @author: Jennifer Project:簡單元素操做登陸126郵箱,元素的clear(),send_keys(),click()操做 在定位的時候發現有些元素定位不到,最後發現有iframe,frame中其實是嵌入了另外一個頁面。 若是iframe有name或id的話,直接使用switch_to_frame("name值")或switch_to_frame("id值"), 這是最理想的方法,也是最簡單好用的方法。 ''' from selenium import webdriver import time driver=webdriver.Firefox() driver.get(r'http://www.126.com/') #字符串加r,防止轉義。 time.sleep(3) print '開始登陸郵箱' try: assert '126' in driver.title #title是變量,不能title() except AssertionError: print "error:網址輸入不正確" else: print "記錄日誌:網址輸入正確" # driver.switch_to_frame('x-URS-iframe') #跳轉到iframe框架 driver.switch_to.frame('x-URS-iframe') #同上面語句同樣,跳轉到iframe框架 username=driver.find_element_by_name('email') username.clear() username.send_keys('Jennifer···') time.sleep(0.1) userpasswd=driver.find_element_by_name('password') userpasswd.clear() userpasswd.send_keys('·····') time.sleep(0.1) loginbt=driver.find_element_by_id('dologin') loginbt.click() time.sleep(3) try: assert '網易郵箱' in driver.title except AssertionError: print '郵箱登陸失敗' else: print '郵箱登陸成功' finally: #操做:收信,寫信等操做,暫不寫例子了 driver.quit() print '測試結束'
二,模塊化驅動測試
1.概念:
將重複的操做獨立成功共模塊,當用例執行過程當中須要用到這一模塊操做時則被調用。
操做+(重複操做,數據)混合在一塊兒。
2.優勢:
因爲最大限度消除了重複,從而提升了開發效率和提升測試用例的可維護性。
3.缺點:
雖然模塊化的步驟相同,可是測試數據不一樣。好比說重複的登陸模塊,若是登陸用戶不一樣,依舊要重複編寫登陸腳本。
4.實例
公共模塊:對登錄和退出進行模塊化封裝
如下的用戶名密碼到時候本身去申請,就不將筆者的用戶密碼貼出來了。
# coding=utf-8 ''' Created on 2016-7-27 @author: Jennifer Project:模塊化驅動測試實例,將重複的登陸腳本放在單獨的腳本中供其餘用例調用 ''' import time class Login(): def user_login(self,driver): username=driver.find_element_by_name('email') username.clear() username.send_keys('username') time.sleep(0.1) userpasswd=driver.find_element_by_name('password') userpasswd.clear() userpasswd.send_keys('password') time.sleep(0.1) loginbt=driver.find_element_by_id('dologin') loginbt.click() time.sleep(3) def user_logout(self,driver): driver.find_element_by_link_text(u'退出').click() driver.quit()
寫信用例:如下代碼用了各類定位方法,值得學習,後續再從新對這部分進行總結
直接調用模塊的登陸和退出方法。
# coding=utf-8 ''' Created on 2016-7-27 @author: Jennifer Project:發送郵件 ''' from selenium import webdriver import time from test_5_2_public import Login #因爲公共模塊文件命名爲test_5_2_public driver=webdriver.Firefox() driver.implicitly_wait(30) driver.get(r'http://www.126.com/') #字符串加r,防止轉義。 time.sleep(3) driver.switch_to.frame('x-URS-iframe') #調用登陸模塊 Login().user_login(driver) time.sleep(10) #發送郵件 #點擊發件箱 #_mail_component_61_61是動態id,因此不能用於定位 #driver.find_element_by_css_selector('#_mail_component_61_61>span.oz0').click() #不能加u"//span[contains(text(),u'寫 信')]",不然定位不到。 #如下定位是查找span標籤有個文本(text)包含(contains)'寫 信' 的元素,該定位方法重要 driver.find_element_by_xpath("//span[contains(text(),'寫 信')]").click() #填寫收件人
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys(r'xxx@163.com') #填寫主題 #經過and鏈接更多的屬性來惟一地標誌一個元素 driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']").send_keys(u'自動化測試') #填寫正文 #經過switch_to_frame()將當前定位切換到frame/iframe表單的內嵌頁面中 driver.switch_to_frame(driver.find_element_by_class_name('APP-editor-iframe')) #在內嵌頁面中定位郵件內容位置 emailcontext=driver.find_element_by_class_name('nui-scroll') #填寫郵件內容 emailcontext.send_keys(u'這是第一封自動化測試郵件') #經過switch_to().default_content()跳回最外層的頁面 #注:不要寫成switch_to().default_content(),不然報AttributeError: SwitchTo instance has no __call__ method driver.switch_to.default_content() #driver.switch_to.parent_frame() #點擊發送 time.sleep(3) #有可能存在元素不可見(查看元素是灰色的),會報ElementNotVisibleException錯誤 #包含發送二字的元素不少,因此還得再加上其餘限制 #sendemails=driver.find_element_by_xpath("//span[contains(text(),'發送')]") sendemails=driver.find_element_by_xpath("//span[contains(text(),'發送') and @class='nui-btn-text']") time.sleep(3) #校驗郵件是否發送成功 try: assert '發送成功' in driver.page_source except AssertionError: print '郵件發送成功' else: print '郵件發送失敗' #調用退出模塊 Login().user_logout(driver)
收信用例:
直接調用模塊的登陸和退出方法。
# coding=utf-8 ''' Created on 2016-7-27 @author: Jennifer Project:接收郵件 ''' from selenium import webdriver import time from test_5_2_public import Login driver=webdriver.Firefox() driver.implicitly_wait(30) driver.get(r'http://www.126.com/') #字符串加r,防止轉義。 time.sleep(3) driver.switch_to.frame('x-URS-iframe') #調用登陸模塊 Login().user_login(driver) time.sleep(10) #接收郵件 #點擊收信 #如下定位是查找span標籤有個文本(text)包含(contains)'收 信' 的元素,該定位方法重要 driver.find_element_by_xpath("//span[contains(text(),'收 信')]").click() #校驗是否進入收件箱,沒報錯即進入 try: #點擊其中一封郵件 driver.find_element_by_xpath("//div[@sign='letter']").click() except Exception as e: print e else: print '成功收信' #調用退出模塊 Login().user_logout(driver)
三,數據驅動測試
1.概念:
它將測試中的測試數據和操做分離,數據存放在另一個文件中單獨維護。
經過數據的改變從而驅動自動化測試的執行,最終引發測試結果的改變。
操做+重複操做+數據分開。
2.優勢:
經過這種方式,將數據和重複操做分開,能夠快速增長類似測試,完成不一樣數據狀況下的測試。
3.缺點
暫無
4.實例
從excel表格讀取用戶名密碼,登陸郵箱。
如下的用戶名密碼到時候本身去申請,就不將筆者的用戶密碼貼出來了。
# coding=utf-8 ''' Created on 2016-7-28 @author: Jennifer Project:數據驅動測試,數據保存在excel中,須要導入xlrd模塊 ''' from selenium import webdriver import time import xlrd #將用戶密碼錶格轉換爲用戶密碼列表 def exceltolist(excelfile,colnameindex=0,by_index=0): excelfile=xlrd.open_workbook(excelfile) #打開excel表格 # table = excelfile.sheets()[by_index] #默認獲取sheet0頁 table = excelfile.sheet_by_index(by_index)#默認獲取sheet0頁 nrows=table.nrows #獲取excel的sheet0頁的行數 colnames=table.row_values(colnameindex) #默認獲取第0行的列表數據:name和password兩個值 list =[] #建一個空列表,用來存放用戶密碼字典 for rownum in range(1,nrows): #初始行爲0,從第1行開始 row = table.row_values(rownum) #獲取某一行的列表數據 if row: app = {} #創建一個空字典,存放某一組用戶密碼數據 for i in range(len(colnames)): #目前是2 app[colnames[i]] = row[i] #字典新增數據:循環兩次,字典新增兩對key-value list.append(app) #將新增的字典數據,添加到列表數據中 return list def Login(): file=r'D:\pythontest\rightpassword\userpassword.xls' userlist=exceltolist(file) for i in range(len(userlist)): driver=webdriver.Firefox() driver.get(r'http://www.126.com/') #字符串加r,防止轉義。 time.sleep(3) driver.switch_to.frame('x-URS-iframe') #同上面語句同樣,跳轉到iframe框架 username=driver.find_element_by_name('email') username.clear() username.send_keys(userlist[i]['name']) time.sleep(0.1) userpasswd=driver.find_element_by_name('password') userpasswd.clear() userpasswd.send_keys(userlist[i]['password']) time.sleep(0.1) loginbt=driver.find_element_by_id('dologin') loginbt.click() time.sleep(3) try: assert '網易郵箱' in driver.title except AssertionError: print '用戶%s郵箱登陸失敗'%(userlist[i]['name']) else: print '用戶%s郵箱登陸成功'%(userlist[i]['name']) finally: driver.quit() if __name__=='__main__': Login()
四,關鍵字驅動測試
1.概念:
經過關鍵字的改變從而驅動自動化測試的執行,最終引發測試結果的改變。關鍵字驅動工具備:RobotFramework(RIDE)。
2.優勢
未完待續
(尊重筆者的勞動哦,轉載請說明出處哦。)