pythonwebdriver自動化測試實戰(zhàn)2_第1頁
pythonwebdriver自動化測試實戰(zhàn)2_第2頁
pythonwebdriver自動化測試實戰(zhàn)2_第3頁
pythonwebdriver自動化測試實戰(zhàn)2_第4頁
pythonwebdriver自動化測試實戰(zhàn)2_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

/項目實戰(zhàn)第5章測試模型及測試腳本優(yōu)化第一節(jié)、測試模型介紹線性測試通過錄制或編寫腳本,一個腳本完成用戶一套完整的操作,通過對腳本的回放來進行自動化測試。這是早期進行自動化測試的一種形式;我們在上一章中練習使用所編寫的腳本也是這種形式。腳本一=()("")("")("")("")("123456")("")()#執(zhí)行具體用例操作()腳本二=()("")("")("")("")("123456")("")()#執(zhí)行具體用例操作()通過上面的兩個腳本,我們很明顯的發(fā)現(xiàn)它的問題:一個用例對應一個腳本,假如界面發(fā)生變化,用戶名的屬性發(fā)生改變,不得不需要對每一個腳本進行修改,測試用例形成一種規(guī)模,我們可能將大量的工作用于腳本的維護,從而失去自動化的意義。這種模式下數(shù)據(jù)和腳本是混在一起的,如果數(shù)據(jù)發(fā)生變也也需要對腳本進行修改。這種模式下腳本的可重復使用率很低。模塊化及庫我們會清晰的發(fā)現(xiàn)在上面的腳本中,其實有不少內容是重復的;于是就有了下面的改進。#登錄模塊():("")("")("")("456123")("")()#退出模塊():測試用例:8#調用登錄、退出模塊=()("")#調用登錄模塊()#其它個性化操作#調用退出模塊()注意,上面代碼并非完整代碼,不能運行。通過上面的代碼發(fā)現(xiàn),我們可以把腳本中相同的部分獨立出來,形成模塊或庫;當腳本需要進行調用。這樣做有兩個好處:一方面提高了開發(fā)效率,不用重復的編寫相同的腳本;另一方面提高了代碼的復用。數(shù)據(jù)驅動數(shù)據(jù)驅動應該是自動化的一個進步;從它的本意來講,數(shù)據(jù)的改變(更新)驅動自動化的執(zhí)行,從而引起結果改變。這顯然是一個非常高級的概念和想法。其實,我們能做到的是下面的形式。d:\\圖48=("D:\\\\","r")=()()#執(zhí)行循環(huán):=()("")("")()不管我們讀取的是文件,還是、文件的之類,又或者是數(shù)組、字典函數(shù)。我們實現(xiàn)了數(shù)據(jù)及腳本的分離,換句話說,我們實現(xiàn)了參數(shù)化。我們仍一千條數(shù)據(jù),通過腳本的執(zhí)行,可以返回一千條結果出來。同樣的腳本執(zhí)行不同的數(shù)據(jù)從而得到了不同的結構。是不是增強的腳本的復用性呢!其實,這對開發(fā)來說是完全沒有什么技術含量的;對于當初自動化工具來說確是一個買點,因為它面對的大多是不懂開發(fā)的測試。關鍵字驅動理解了數(shù)據(jù)驅動,無非是把“數(shù)據(jù)”換成“關鍵字”,關鍵字的改變引起測試結果的改變。關鍵字驅動用編程方式就不太容易表現(xiàn)了。、等自動化工具都提供了關鍵字驅動(填表格)。好吧!我能說也是關鍵字驅動么?圖5轉化成表格是這樣的:圖4腳本分:命令()、對象()、值()格式就那里不偏不移,通過這樣的格式去描述不同的對象,從而引起最終結果的改變。也就是說一切以對象為出發(fā)點。當然,這樣的腳本,顯然對于不懂代碼的同學非常直觀!我要找誰(對象)?怎么做(命令)?做什么(值)?更高級的關鍵字驅動,可以自己定義然后“注冊”到框架;從而實現(xiàn)更強大的功能和擴展性。關鍵字更詳細的理解可以看我偶像的那偏文章。 這里簡單介紹了自動化測試的幾種不同的模型,雖然簡單闡述了他們的優(yōu)缺點,但他們并非后后者淘汰前者的關系,在實施自動化更多的是以需求為出發(fā)點,混合的來使用以上模型去解決問題;使我們的腳本更易于開發(fā)及維護。第二節(jié)、登錄模塊化通過上一節(jié)對測試模型的學習可以看到,在我們的目前的腳本中還是有很多可以模塊化的地方,比如登錄模塊。我們的每一個用例的執(zhí)行都需要登錄腳本,那可我們是否可以將登錄腳本獨立到單獨的文件調用。下面以快播私有云的登錄退出測試用例為例:8,():():=()(30)=""=[]=#私有云登錄用例():=(+"3222F")()#登陸("")()("")("")("")()("")("123456")("")()(3)#新功能引導("")()(3)#退出("")()(2)("退出")()(2)():()([],)"":()從業(yè)務流程及用例分析,每一個自動化測試用例的執(zhí)行過程為:先執(zhí)行登錄操作,然后執(zhí)行具體的操作(如文件/文件夾的創(chuàng)建、刪除、移動、重命名等操作),最后執(zhí)行退出操作。如上面的測試用例,登錄及退出操作是相對固定的,那么我們可以把登錄及退出操作模塊化出去,然后調用,一方面不用寫重復代碼,另一方面可以使測試用例更關注具體的用例代碼。在及相同的文件夾下創(chuàng)建文件:8,():=()("")()("")("")("")()("")("123456")("")()(3)8,#導入登錄文件():():=()(30)=""=[]=#私有云登錄用例():=(+"3222F")#調用登錄模塊()#新功能引導("")()(3)#退出("")()(2)("退出")()(2)():()([],)"":()進行到這里,我們有必要補充一下語言中函數(shù)、類、方法的使用,這將有助于我們自動化測試腳本的開發(fā)。下面打開:函數(shù)的使用:#例1>>>(): c>>>(1,3)4#例2>>>2(13): c>>>2()>>>d4通過關鍵字可創(chuàng)建函數(shù),在例1中我們創(chuàng)建了()函數(shù),默認接收兩個參數(shù)化a、b,對a、b相加結果給c,并將結果函數(shù)內打印。例2中創(chuàng)建了2()函數(shù),這一次對a、b設置了默認值,同樣對a、b做加法,并將結果用返回;d在接收2()時用的是默認值,將后將d接收的結果打印。類及方法的使用:>>>: (): c (): c>>>()>>>(5,3)8>>>(5,3)2通過關鍵字我們創(chuàng)建了一個類,定義了()和()兩個方法分別來完成加法和減法運算,并將計算結果打印。通過上面的例子我們明顯的發(fā)現(xiàn)類的方法及函數(shù)有一個明顯的區(qū)別,在類的方法中必須有個額外的第一個參數(shù)(),但在調用類的方法時卻不必為這個參數(shù)賦值。參數(shù)所指的是對象本身,所以習慣性地命名為。為何給賦值而你不必給賦值?創(chuàng)建了一個類,實例化得到了這個對象,然后調用這個對象的方法(),在這個過程中,會自動轉為(),這就是的的原理。即使你的類的方法不需要任何參數(shù),但還是得給這個方法定義一個參數(shù),雖然我們在實例化調用的時候不用理會這個參數(shù)。下面回到用例本身來討論如何模塊化和調用的,在文件中:():=這里用到的是方法,(=)為對象身的,這一句很重要,否則我們無法在()方法中使用操作瀏覽器。在文件中:#導入登錄文件...#調用登錄模塊()...首先導入文件,然后對文件中的()方法進行調用。下面筆者動手把退出的相關操作也模塊化出去吧!第三節(jié)、數(shù)據(jù)驅動(參數(shù)化)在測試模型一節(jié)的數(shù)據(jù)驅動中我們已經介紹了如何通過的()函數(shù)對百度輸入信息進行參數(shù)化設置,將其它循環(huán)的讀取文件中每一行數(shù)據(jù)。這里再回顧一下實現(xiàn)參數(shù)化的方式。8=("D:\\\\","r")=()()#執(zhí)行循環(huán):=()("")("")()("")()()方法以只讀方式(r)打開本地的文件,方法是逐行的讀取文件內容。通過循環(huán),可以每次獲取到文件中的一行數(shù)據(jù),在定位到百度的輸入框后,將數(shù)據(jù)傳入()。這樣通過循環(huán)調用,直到文件的中的所有內容全被讀取。登錄參數(shù)化(讀取文件)現(xiàn)在按照上面的思路,對自動化腳本中用戶、名密碼進行參數(shù)化,通過文檔我們發(fā)現(xiàn)讀取文件的方式有:整個文件讀取、逐行讀取、固定字節(jié)讀取。并沒有找到一次讀取兩條數(shù)據(jù)的好方法。創(chuàng)建兩個文件,分別存放用戶名密碼,如圖6:圖6打開之前編寫的文件,做如下修改:8,,=("D:\\\\\","r")#用戶名文件=()#讀取用戶名()2=("D:\\\\\","r")#密碼文件=2()#讀取密碼2()():=()("")()("")()("")()("")()("")()(3)分別打開兩個文件,通過和來接收用戶名和密碼信息,將接收的數(shù)據(jù)通過()轉入到執(zhí)行程序中。運行我們前面創(chuàng)建的文件,程序可以正常的執(zhí)行。雖然這樣做比較丑,但是確實達到了數(shù)據(jù)及腳本分離的目的。缺點:雖然目的達到了這,但這樣的實現(xiàn)有很多問題:用戶名密碼分別在不同的文件里,修改用戶名和密碼比較麻煩。和文件中只能保存一個用戶密碼,無能很好的循環(huán)讀取。登錄參數(shù)化(函數(shù))函數(shù)是我們前面剛介紹的知識,函數(shù)可以預先給參數(shù)化賦值,借助這個特性,我們可以通過調用函數(shù)的方式對用戶名密碼進行參數(shù)化(''123456):"!!" 我們?yōu)閮蓚€參數(shù)和賦了初值,賦值內容如果是字符串需要加引號,如果是數(shù)字可以不需要引號。再次打開文件,做如下修改:8,#導入函數(shù)#通過兩個變量,來接收調用函數(shù)獲得用戶名&密碼=()#打印兩個變量():=()("")()("")()("")()("")()("")()(3)單獨運行文件:>>>>>>!!123456說明我們對函數(shù)的參數(shù)調用是成功的,將、兩個變量的值傳入用戶名密碼的()方法中即可。登錄參數(shù)化(讀取字典)既然我們是固定的讀取用戶名和密碼兩個值,那么可以借助字典的方式來完成這個需求。字典由大括號內的多鍵值對組成;下面繼續(xù)在交互模式下演示字典的創(chuàng)建及使用。>>>={'':'123','':'456'}>>>{'':'123','':'456'}>>>()['','']>>>()['123','456']>>>()[('','123'),('','456')]創(chuàng)建字典用大括號,數(shù)據(jù)由鍵值對組成,()方法返回字典中的鍵列表。()返回字典中的值列表,()返回(,)元組。下面創(chuàng)建一個存放字典的函數(shù)文件:():{'':'123456','360':'123123'}"!!"字典的可以方便的存放鍵值對,一個鍵對應一個值;注意,如果密碼中有非數(shù)字,需要加引號。需要說明的是我們的需求并不適合循環(huán)的讀取用戶名密碼,不過我們可以寫一小程序單獨驗證這種循環(huán)讀取的方式:8#導入函數(shù)#獲取字典數(shù)據(jù)=()#通過()循環(huán)讀取元組(鍵/值對)():運行結果如下:>>>>>>!!123456360123456在實際使用中,可以將、兩個變量循環(huán)獲得的值傳入相應的()方法中。目前方式解決了兩個問題:一次傳入兩個值,以及循環(huán)讀取。表單參數(shù)化()假如我有自動化腳本中要參數(shù)化一張表單,表單需要填寫用戶名、郵箱,年齡,性別等信息,使用上面的方法就很難來解決這個問題,下面通過讀取文件的方法來解決這個問題。創(chuàng)建文件,如圖5圖5通過或創(chuàng)建表格,文件另存為選擇格式,下面修改文件進行循環(huán)讀?。?#導入包#讀取本地文件'D:\\\\\\'((,''))#循環(huán)輸出每一行信息:[0][1][2][3]運行結果:>>>>>>123456@12623男212312318女345612329女()用于讀取文件,[0]表示表格中第一列的數(shù)據(jù)(用戶名),[0]表示表格中第二列的數(shù)據(jù)(郵箱),后面類推。通過讀取文件比較靈活,可以循環(huán)讀取每一條數(shù)據(jù),從而又不局限每次所讀取數(shù)據(jù)的個數(shù)。我們這里舉例了多種方式來進行參數(shù)化,雖然最終看來的方式最靈活,這里更多的是想告訴讀者解決問題的方法是多樣的,我們可以用的各種技巧來選擇最簡單的方法來解決問題。從這個過程中我們也學到了不少編程技術。我這里可以說是用最基礎的知識點解決了問題,這里只算提供一個思路,溫習一下,你一定可以找到更完美優(yōu)雅的方法;解決問題的方法是多樣的,使用最貼合需求的方法,簡單解決問題。這一節(jié)寫的比較多,對構建自動化框架來說,參數(shù)化是非常重要的一個知識點。腳本的模塊化及參數(shù)化是我們在自動化腳本開發(fā)中用到最多的兩個技巧,希望讀者能認真體會,靈活的運行到具體的項目中。再說那個分層測試。。。吳博士的分層和乙醇的測試金字塔是一個道理就是從>越是往層投入產出比越低

上??尚?372499885)18:46:07

你用一天時間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論