版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第18章測(cè)試策略模模式18.1 記錄錄測(cè)試(也稱為為記錄與與回放測(cè)測(cè)試、機(jī)機(jī)器人用用戶測(cè)試、捕獲獲/回放測(cè)測(cè)試)如何準(zhǔn)備軟軟件的自自動(dòng)化測(cè)測(cè)試?通過記錄與與應(yīng)用程程序的交交互并使使用測(cè)試試工具回回放它們們來自動(dòng)動(dòng)化測(cè)試試。圖18-11 記記錄測(cè)試試示意圖圖自動(dòng)化測(cè)試試有幾個(gè)個(gè)目的。在在回歸測(cè)測(cè)試軟件件更改之之后,它們可可以用于于這些軟軟件。它它們有助助于歸檔檔軟件的的行為。在在寫軟件件之前,它它們可以以指定其其行為。如如何準(zhǔn)備備自動(dòng)化化測(cè)試腳腳本,對(duì)對(duì)可以將將它們用用于什么么目的、它它們對(duì)SSUT中中的變更更有多健健壯以及及準(zhǔn)備它它們需要要多少技技能與努努力等產(chǎn)產(chǎn)生影響響。記錄測(cè)試使使得能夠夠
2、在構(gòu)建建SUTT之后、改改變它之之前迅速速創(chuàng)建回回歸測(cè)試試。18.1.1 運(yùn)行原原理我們使用一一種工具具,它會(huì)監(jiān)監(jiān)控我們們與SUUT的交交互。這這種工具具記錄大大多數(shù)SSUT對(duì)對(duì)我們的的通信以以及我們們對(duì)SUUT的響響應(yīng)。錄錄音會(huì)話話完成之之后,可可以將它它保存在在文件里里以便稍稍后回放放。準(zhǔn)備備運(yùn)行測(cè)測(cè)試時(shí),可可以從工工具的“回放”部分開開始,并并讓它指指向錄音音會(huì)話。它它啟動(dòng)SSUT,并并給它提提供響應(yīng)應(yīng)SUTT輸出的的記錄輸輸入。在在錄音會(huì)會(huì)話內(nèi),它也可可以比較較SUTT的輸出出及其響響應(yīng)。錯(cuò)錯(cuò)誤匹配配可能導(dǎo)導(dǎo)致測(cè)試試失敗。有些記錄測(cè)測(cè)試工具具允許調(diào)調(diào)整錄音音會(huì)話內(nèi)內(nèi)SUTT表現(xiàn)與與回放
3、過過程中SSUT表表現(xiàn)之間間比較的的敏感性性。大多多數(shù)記錄錄測(cè)試工工具通過過用戶界界面與SSUT交交互。18.1.2 使用時(shí)時(shí)機(jī)如果應(yīng)用程程序正在在運(yùn)行,但不希希望對(duì)它它進(jìn)行太太多變更更,就可以以使用記記錄測(cè)試試進(jìn)行回回歸測(cè)試試?,F(xiàn)有有應(yīng)用程程序需要要重構(gòu)(預(yù)計(jì)修修改功能能性)而而沒有可可用的腳腳本測(cè)試試用作回回歸測(cè)試試時(shí),也也可以使使用記錄錄測(cè)試。通通常,生生成一組組記錄測(cè)測(cè)試比準(zhǔn)準(zhǔn)備具有有相同功功能性的的腳本測(cè)測(cè)試更快快。在理理論上,任任何知道道如何運(yùn)運(yùn)行應(yīng)用用程序的的人都可可以完成成測(cè)試記記錄,幾幾乎不需需要專業(yè)業(yè)技術(shù)。實(shí)實(shí)際上,許許多商業(yè)業(yè)工具都都值得深深入學(xué)習(xí)習(xí)。同時(shí)時(shí),需要要一些專
4、專業(yè)技術(shù)術(shù)來添加加“檢查點(diǎn)點(diǎn)”,以便便調(diào)整回回放工具具的敏感感性,或或者調(diào)整整測(cè)試腳腳本(如如果記錄錄工具記記錄了錯(cuò)錯(cuò)誤信息息)。大多數(shù)記錄錄測(cè)試工工具通過過用戶界界面與SSUT交交互。如如果SUUT的用用戶界面面不斷發(fā)發(fā)展,這這種方法法特別容容易讓它它們變得得脆弱(接口敏敏感性,參參見“脆弱測(cè)測(cè)試”)。甚甚至是小小的變更更(例如如改變按按鈕或字字段的內(nèi)內(nèi)部名稱稱)也足足以讓回回放工具具產(chǎn)生錯(cuò)錯(cuò)誤。這這些工具具也傾向向于在低低級(jí)別詳詳細(xì)記錄錄信息,這這樣會(huì)讓讓測(cè)試難難以理解解(參見見“模糊測(cè)測(cè)試”)。因因此,如如果對(duì)SSUT的的變更中中止了這這些工具具,也很很難手動(dòng)動(dòng)修復(fù)它它們。所所以,如如果
5、SUUT不斷斷發(fā)展,就就要準(zhǔn)備備有規(guī)律律地再記記錄測(cè)試試。如果要使用用作為文文檔的測(cè)測(cè)試或者者要使用用這些測(cè)測(cè)試驅(qū)動(dòng)動(dòng)新的開開發(fā),就應(yīng)該該考慮使使用腳本本測(cè)試。使使用商業(yè)業(yè)記錄測(cè)測(cè)試工具具難以實(shí)實(shí)現(xiàn)這些些目標(biāo),因因?yàn)榇蠖喽鄶?shù)工具具不允許許定義用用于測(cè)試試記錄的的高級(jí)語語言。將將記錄測(cè)測(cè)試性能能構(gòu)建到到應(yīng)用程程序本身身之中或或者使用用重構(gòu)的的記錄測(cè)測(cè)試可以以解決這這個(gè)問題題。變體:重構(gòu)構(gòu)的記錄錄測(cè)試這兩種策略略的混合合是,使使用“記錄、重重構(gòu)、回回放”1 名稱“記錄、重構(gòu)、回放”是Adam Geras提出來的。順序從從最新記記錄測(cè)試試中提取取一組“動(dòng)作組組件”或“動(dòng)詞”,然后通通過測(cè)試試用例來來
6、調(diào)用這這些“動(dòng)作組組件”(而不是是使用詳詳細(xì)的內(nèi)內(nèi)聯(lián)代碼碼)。大大多數(shù)商商業(yè)捕獲獲/回放工工具提供供將字面面值轉(zhuǎn)換換為參數(shù)數(shù)的方法法,主要要的測(cè)試試用例可可以將這這些參數(shù)數(shù)傳遞到到“動(dòng)作組組件”。屏幕幕改變時(shí)時(shí),只需需再記錄錄“動(dòng)作組組件”,所有有測(cè)試用用例自動(dòng)動(dòng)使用新新的“動(dòng)作組組件”定義繼繼續(xù)運(yùn)行行。這種種策略在在效能上上與使用用測(cè)試實(shí)實(shí)用程序序方法與與單元測(cè)測(cè)試中的的SUTT交互相相同。它它允許使使用重構(gòu)構(gòu)的記錄錄測(cè)試組組件作為為腳本測(cè)測(cè)試中的的高級(jí)語語言。像像Merrcurry IInteeracctivve的BPTT2 BPT是“業(yè)務(wù)進(jìn)程測(cè)試(Business Process Tes
7、ting)”的縮寫。這樣的的工具以以自頂向向下的方方法將這這一范式式用于腳腳本測(cè)試試。開發(fā)發(fā)完高級(jí)級(jí)腳本并并指定了了測(cè)試步步驟所需需的組件1 名稱“記錄、重構(gòu)、回放”是Adam Geras提出來的。2 BPT是“業(yè)務(wù)進(jìn)程測(cè)試(Business Process Testing)”的縮寫。18.1.3 實(shí)現(xiàn)方方式說明明使用記錄測(cè)測(cè)試策略略時(shí),有兩種種基本選選擇:可可以獲得得第三方方工具,它它記錄與與應(yīng)用程程序交互互時(shí)發(fā)生生的通信信;可以以將“記錄與與回放”機(jī)制內(nèi)內(nèi)置于應(yīng)應(yīng)用程序序。1. 變體體:外部測(cè)測(cè)試記錄錄在商業(yè)上有有許多測(cè)測(cè)試記錄錄工具可可用,每種工工具都有有自身的的優(yōu)缺點(diǎn)點(diǎn)。最好好的選擇擇
8、取決于于應(yīng)用程程序用戶戶接口的的性質(zhì)、預(yù)預(yù)算、要要驗(yàn)證的的功能性性的復(fù)雜雜性以及及其他可可能的因因素。如果要使用用測(cè)試來來驅(qū)動(dòng)開開發(fā),就需要要挑選使使用測(cè)試試記錄文文件格式式的工具具,這種格格式可以以手動(dòng)編編輯且易易于理解解。需要要手動(dòng)編編寫內(nèi)容容,如果果使用“記錄與與回放”工具來來執(zhí)行測(cè)測(cè)試,這這種情況況也還是是腳本測(cè)測(cè)試的示示例。2. 變體體:內(nèi)置測(cè)測(cè)試記錄錄也可以將記記錄測(cè)試試性能內(nèi)內(nèi)置于SSUT。在在那種情情況下,可可以用相相當(dāng)高的的級(jí)別定定義測(cè)試試腳本“語言”,級(jí)別別足夠高高,就可可以在構(gòu)構(gòu)建系統(tǒng)統(tǒng)之前手手動(dòng)編寫寫測(cè)試。實(shí)實(shí)際上,有有報(bào)告說說Miccrossoftt Exxcell電
9、子數(shù)數(shù)據(jù)表的的VBA宏宏性能是是Exccel自自動(dòng)化測(cè)測(cè)試機(jī)制制的開端端。18.1.4 示例:內(nèi)置測(cè)測(cè)試記錄錄從表面上看看,提供記記錄測(cè)試試的代碼碼樣本沒沒有意義義,因?yàn)檫@這種模式式處理生生成測(cè)試試的方法法,而不是是表示它它的方法法?;胤欧艤y(cè)試時(shí)時(shí),實(shí)際際上就是是數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試。同樣樣,通常常不重構(gòu)構(gòu)到記錄錄測(cè)試,因因?yàn)樗?jīng)經(jīng)常是項(xiàng)項(xiàng)目嘗試試的第一一種測(cè)試試自動(dòng)化化策略。而而且,如如果發(fā)現(xiàn)現(xiàn)有過多多遺漏的的測(cè)試,還還可以在在嘗試腳腳本測(cè)試試之后引引入記錄錄測(cè)試,因因?yàn)槭謩?dòng)動(dòng)自動(dòng)化化的成本本太高。在在那種情情況下,不不應(yīng)該試試圖將現(xiàn)現(xiàn)有腳本本測(cè)試轉(zhuǎn)轉(zhuǎn)換為記記錄測(cè)試試,應(yīng)該該記錄新新測(cè)試。下面是
10、應(yīng)用用程序本本身記錄錄的測(cè)試試的示例例。該測(cè)測(cè)試用來來回歸測(cè)測(cè)試安全全關(guān)鍵的的應(yīng)用程程序,并并且在它它從OSS2上的的C移植到到Winndowws上的的C+之后。請(qǐng)請(qǐng)注意,記記錄的信信息如何何形成用用戶易于于理解的的域?qū)S糜酶呒?jí)語語言。 55566 SOOUTHH SSOUTTH NNORTTH SSOUTTH NNORTTH 該樣本表示示回放測(cè)測(cè)試的輸輸出。內(nèi)內(nèi)置回放放機(jī)制插插入了aactuual元元素。sstattus屬屬性表示示這些元元素是否否匹配eexpeecteed值。將樣樣式表應(yīng)應(yīng)用于這這些文件件來格式式化它們們,就像像具有彩彩色編碼碼結(jié)果的的Fitt測(cè)試一一樣。然然后項(xiàng)目目的商業(yè)
11、業(yè)用戶可可以進(jìn)行行記錄、回回放和結(jié)結(jié)果分析析。在軟件的表表示層插插入掛鉤鉤可以記記錄用戶戶和用戶戶響應(yīng)提提供的選選項(xiàng)列表表。其中中一個(gè)掛掛鉤的示示例如下下所示:if (pplayybacck_iis_oon() choicce = geet_cchoiice_forr_pllaybbackk(diialoog_iid, chooicees_llistt); elsse choicce = diispllay_diaalogg(chhoicces_lisst, roww, ccol, tiitlee, kkey); if (rrecoordiing_is_on() recorrd_cchoiic
12、e(diaalogg_idd, cchoiicess_liist, chhoicce, keyy); 方法gett_chhoicce_ffor_plaaybaack檢檢索ussed-vallue元元素的內(nèi)內(nèi)容,而不是是要求用用戶從選選項(xiàng)列表表中選取取。方法法reccordd_chhoicce生成成acttuall元素并并“斷言”exppectted元元素,記錄各各元素sstattus屬屬性的結(jié)結(jié)果。注注意,當(dāng)處于于回放模模式時(shí),recording_is_on()返回true以便記錄測(cè)試結(jié)果。18.1.5 示例:商業(yè)記記錄與回回放測(cè)試試工具幾乎有所商商業(yè)測(cè)試試工具都都使用“記錄與與回放”隱喻。每
13、每種工具具都定義義自己的的記錄測(cè)測(cè)試文件件格式,其其中大多多數(shù)都非非常冗長(zhǎng)長(zhǎng)。下面面是使用用Merrcurry IInteeracctivve的QuiickTTestt Prrofeessiionaal QTPP工具具記錄的的測(cè)試的的“簡(jiǎn)短”摘要。它它顯示于于“專家視視圖”中,該視圖圖表示真真正記錄錄的內(nèi)容容:VbSScriipt程程序!該該示例包包括手動(dòng)動(dòng)插入的的注釋(前綴為為)來說明明測(cè)試在在做什么么,如果改改變導(dǎo)致致測(cè)試不不再運(yùn)行行的應(yīng)用用程序之之后記錄錄測(cè)試,那么就就會(huì)丟失失這些注注釋。 GooToPPageeMaiintaainTTaxoonommy()Browsser(Innf).
14、Paage(Innf).WeebBuuttoon(Loggin).CClicckBrowsser(Innf).Paage(Innf_22).Cheeck CheeckPPoinnt(Inff_2)Browsser(Innf).Paage(Innf_22).Liink(TAAXONNOMYY LIINKIING).CClicckBrowsser(Innf).Paage(Innf_33).Cheeck CheeckPPoinnt(Inff_3)Browsser(Innf).Paage(Innf_33).Linnk(MAIINTAAIN TAXXONOOMY).CClicckBrowsser(Inn
15、f).Paage(Innf_44).Cheeck CheeckPPoinnt(Inff_4) AdddTeerm(A,TTop Levvel, Topp Leevell Deefinnitiion)Browsser(Innf).Paage(Innf_44).Linnk(Addd).Cliickwait 4Browsser(Innf_22).Pagge(Inff).Cheeck CheeckPPoinnt(Inff_5)Browsser(Innf_22).Pagge(Inff).WebbEdiit(chiildCCodeeSufffi x).Seet ABrowsser(Innf_22).Pag
16、ge(Inff).WebEddit(taaxonnomyyDtoo.deescrriptt).Sett TTop Levvel Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deefinnitii).Sett TTop Levvel Deffiniitioon Browsser(Innf_22).Pagge(Inff).WebbButttonn(SSavee).Cliick wait 4Browsser(Innf).Paage(Innf_55).Cheeck CheeckPPoinnt(Inff_5_2) SeelecctTeer
17、m(AA-TTop Levvel) Browsser(Innf).Paage(Innf_55).WebLiist(seeleccteddTaxxonoomyCCodee).Sellectt A-Topp Leevell AdddTeerm(B,SSecoond Topp Leevell, Seeconnd TTop Levvel Deffiniitioon)Browsser(Innf).Paage(Innf_55).Linnk(Addd).Cliick wait 4 Browsser(Innf_22).Pagge(Inff_2).CChecck CChecckPoointt(IInf_2_22
18、)infoffi lle_;_Innforrm_AAlbeertaa_211.innf_;_hiighttligght id_; _Browwserr(IInf_2).Paage(Innf_22)_;_ annd iit ggoess onn, aand on, annd oon 注意,測(cè)試試依據(jù)應(yīng)應(yīng)用程序序用戶界界面描述述所有輸輸入和輸輸出的方方法。這這樣主要要會(huì)產(chǎn)生生兩個(gè)問問題:模模糊測(cè)試試(由記記錄信息息的具體體性質(zhì)所所導(dǎo)致)和接口口敏感性性(導(dǎo)致致脆弱測(cè)測(cè)試)。18.1.6 重構(gòu)說說明讓該測(cè)試作作為文檔檔可以使使之更有有用,能能夠降低低或避免免高測(cè)試試維護(hù)成成本,支持使使用一系系列提取
19、取方法Fowwlerr重構(gòu)構(gòu)組成使使用高級(jí)級(jí)語言的的其他測(cè)測(cè)試。18.1.7 示例:重構(gòu)的的商業(yè)記記錄測(cè)試試下面的示例例顯示重重構(gòu)來交交流意圖圖的相同同測(cè)試:GoToPPagee_MaainttainnTaxxonoomy()AddTeerm(A,TTop Levvel, Topp Leevell Deefi nittionn)SelecctTeerm(AA-TTop Levvel)AddTeerm(B,SSecoond Topp Leevell, Seeconnd TTop Levvel Deffi nnitiion)注意,該測(cè)測(cè)試的意意圖變得得非常明明顯。提提取的測(cè)測(cè)試實(shí)用用程序方方法如下
20、下所示:Methood GGoTooPagge_MMainntaiinTaaxonnomyy()Browsser(Innf).Paage(Innf).WeebBuuttoon(Loggin).CClicck Browsser(Innf).Paage(Innf_22).Cheeck CheeckPPoinnt(Inff_2) Browsser(Innf).Paage(Innf_22).Linnk(TAXXONOOMY LINNKINNG).Cllickk Browsser(Innf).Paage(Innf_33).Cheeck CheeckPPoinnt(Inff_3) Browsser(Inn
21、f).Paage(Innf_33).Linnk(MAIINTAAIN TAXXONOOMY).CClicck Browsser(Innf).Paage(Innf_44).Cheeck CheeckPPoinnt(Inff_4)EndMethood AAddTTermm( ccodee, nnamee, ddesccripptioon)Browsser(Innf).Paage(Innf_44).Linnk(Addd).Cliickwait 4Browsser(Innf_22).Pagge(Inff).Cheeck CheeckPPoinnt(Inff_5)Browsser(Innf_22).Pa
22、gge(Inff).WebEddit(chhilddCoddeSuuffii x).SSet codde Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deescrriptt).Sett naame Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deefi nitti).Seet ddesccripptioon Browsser(Innf_22).Pagge(Inff).WebbButttonn(SSavee).Cliick wait 4Browsser(Innf).
23、Paage(Innf_55).Cheeck CheeckPPoinnt(Inff_5_2) endMethood SSeleectTTermm( ppathh )Browsser(Innf).Paage(Innf_55).WebLiist(seeleccteddTaxxonoomyCCodee).Sellectt paathBrowsser(Innf).Paage(Innf_55).Linnk(Addd).Cliickwait 4 end我將這個(gè)示示例編在在一起是是為了說說明與xxUniit中做做法的類類似之處處。不要要隨便運(yùn)運(yùn)行該示示例,因因?yàn)樵谡Z語句構(gòu)成成上它可可能不正正確。18.1.8
24、高級(jí)閱閱讀論文“Aggilee Reegreessiion Tesstinng UUsinng RRecoord andd PllayBBackk”ARRTRPP介紹紹了將記記錄測(cè)試試機(jī)制內(nèi)內(nèi)置于應(yīng)應(yīng)用程序序以利于于將它導(dǎo)導(dǎo)出到其其他平臺(tái)臺(tái)的經(jīng)驗(yàn)驗(yàn)。18.2 腳本本測(cè)試(也稱為為手寫測(cè)測(cè)試、手手動(dòng)編碼碼測(cè)試、程程序測(cè)試、自動(dòng)動(dòng)化單元元測(cè)試)如何準(zhǔn)備軟軟件的自自動(dòng)化測(cè)測(cè)試?通過手動(dòng)寫寫測(cè)試程程序來自自動(dòng)化測(cè)測(cè)試。圖18-22 腳腳本測(cè)試試示意圖圖自動(dòng)化測(cè)試試有幾個(gè)個(gè)目的。在在回歸測(cè)測(cè)試軟件件更改之之后,它們可可以用于于這些軟軟件。它它們有助助于歸檔檔軟件的的行為。在在寫軟件件之前,它它們可以以指
25、定其其行為。如如何準(zhǔn)備備自動(dòng)化化測(cè)試腳腳本,這這將影響響可以將將它們用用于什么么目的、它它們對(duì)SSUT中中的變更更有多健健壯以及及準(zhǔn)備它它們需要要多少技技能與努努力。腳本測(cè)試允允許在開開發(fā)軟件件之前準(zhǔn)準(zhǔn)備測(cè)試試,以便它它們有助助于驅(qū)動(dòng)動(dòng)設(shè)計(jì)。18.2.1 運(yùn)行原原理通過寫測(cè)試試程序來來自動(dòng)化化測(cè)試,這些測(cè)測(cè)試程序序?yàn)榱藞?zhí)執(zhí)行其功功能性而而與SUUT交互互。和記記錄測(cè)試試不一樣樣,這些些測(cè)試可可以是客客戶測(cè)試試或單元元測(cè)試。這這些測(cè)試試程序通通常稱為為“測(cè)試腳腳本”,以便便與它們們測(cè)試的的產(chǎn)品代代碼區(qū)分分開來。18.2.2 使用時(shí)時(shí)機(jī)準(zhǔn)備軟件的的單元測(cè)測(cè)試時(shí),通常使使用腳本本測(cè)試。因因?yàn)樗?/p>
26、易從從用相同同編程語語言寫的的軟件中中直接訪訪問單個(gè)個(gè)單元。它它也允許許執(zhí)行所所有代碼碼路徑,包包括“不合理理的”??蛻魷y(cè)試稍稍微有些些復(fù)雜。當(dāng)使用用自動(dòng)化化故事測(cè)測(cè)試來驅(qū)驅(qū)動(dòng)軟件件開發(fā)時(shí)時(shí),應(yīng)該使使用腳本本測(cè)試。記記錄測(cè)試試不能很很好滿足足這種需需要,因因?yàn)闆]有有用來記記錄它們們的應(yīng)用用程序時(shí)時(shí)它難以以記錄測(cè)測(cè)試。準(zhǔn)準(zhǔn)備腳本本測(cè)試可可以使用用編程經(jīng)經(jīng)驗(yàn)以及及測(cè)試方方法中的的經(jīng)驗(yàn)。項(xiàng)項(xiàng)目上的的大多數(shù)數(shù)業(yè)務(wù)用用戶不可可能對(duì)學(xué)學(xué)習(xí)如何何準(zhǔn)備腳腳本測(cè)試試感興趣趣。在編編程語言言中進(jìn)行行腳本測(cè)測(cè)試的方方法之一一是,定定義測(cè)試試SUTT的高級(jí)級(jí)語言,然然后作為為數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試解釋程程序GGOF實(shí)現(xiàn)該該
27、語言。一一種定義義數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試的開源源架構(gòu)是是Fitt及FittNessse。Cannoo WebbTesst是支支持這種種類型測(cè)測(cè)試的另另一種工工具。在現(xiàn)有遺留留應(yīng)用程程序3 在測(cè)試驅(qū)動(dòng)程序中,遺留應(yīng)用程序是缺乏自動(dòng)化測(cè)試安全網(wǎng)的系統(tǒng)。中,可以考考慮使用用記錄測(cè)測(cè)試作為為快速創(chuàng)創(chuàng)建一組組回歸測(cè)測(cè)試的方方法,這些回回歸測(cè)試試在重構(gòu)構(gòu)代碼引引入易測(cè)測(cè)性時(shí)可可以起到到保護(hù)作作用。隨隨后可以以準(zhǔn)備可可測(cè)試應(yīng)應(yīng)用程序3 在測(cè)試驅(qū)動(dòng)程序中,遺留應(yīng)用程序是缺乏自動(dòng)化測(cè)試安全網(wǎng)的系統(tǒng)。18.2.3 實(shí)現(xiàn)方方式說明明傳統(tǒng)上腳本本測(cè)試寫寫作“測(cè)試程程序”,通常使使用特定定的測(cè)試試腳本語語言?,F(xiàn)現(xiàn)在,我我們更
28、喜喜歡使用用測(cè)試自自動(dòng)化架架構(gòu)來寫寫腳本測(cè)測(cè)試,例例如,用用與SUUT相同同的語言言寫的xxUniit。在在這種情情況下,通通常以測(cè)測(cè)試用例例類上測(cè)測(cè)試方法法的形式式捕獲各各測(cè)試程程序。要要最小化化手動(dòng)干干預(yù),各各測(cè)試方方法應(yīng)該該實(shí)現(xiàn)自自檢測(cè)試試(也就就是可重重復(fù)的測(cè)測(cè)試)。18.2.4 示例:腳本測(cè)測(cè)試下面是用JJUniit寫的的腳本測(cè)測(cè)試的示示例:publiic vvoidd teestAAddLLineeIteem_qquanntittyOnne()finall BiigDeecimmal BASSE_PPRICCE = UNNIT_PRIICE;finall BiigDeecimmal
29、 EXTTENDDED_PRIICE = BBASEE_PRRICEE;/ SSet Up FixxturreCustoomerr cuustoomerr = creeateeACuustoomerr(NOO_CUUST_DISSCOUUNT);Invoiice invvoicce = crreatteInnvoiice(cusstommer);/ EExerrcisse SSUTinvoiice.adddIteemQuuanttityy(PRRODUUCT, QUUAN_ONEE);/ Veeriffy OOutccomeeLineIItemm exxpecctedd =creatteLii
30、neIItemm( QQUANN_ONNE, NO_CUSST_DDISCCOUNNT,EXTENNDEDD_PRRICEE, PPRODDUCTT, iinvooicee);asserrtCoontaainssExaactllyOnneLiineIItemm( iinvooicee, eexpeecteed );publiic vvoidd teestCChanngeQQuanntitty_sseveerallQuaantiity()finall innt OORIGGINAAL_QQUANNTITTY = 3;finall innt NNEW_QUAANTIITY = 55;finall
31、BiigDeecimmal BASSE_PPRICCE =UNIT_PRIICE.mulltipply( nnew BiggDeccimaal(NNEW_QUAANTIITY);finall BiigDeecimmal EXTTENDDED_PRIICE =BASE_PRIICE.subbtraact(BASSE_PPRICCE.mmulttiplly(CUST_DISSCOUUNT_PC.movvePoointtLefft(22);/ SSet Up FixxturreCustoomerr cuustoomerr = creeateeACuustoomerr(CUUST_DISSCOUUNT
32、_PC);Invoiice invvoicce = crreatteInnvoiice(cusstommer);Produuct prooducct = crreatteAPProdductt( UUNITT_PRRICEE);invoiice.adddIteemQuuanttityy(prroduuct, ORRIGIINALL_QUUANTTITYY);/ Exxerccisee SUUTinvoiice.chaangeeQuaantiityFForPProdductt(prroduuct, NEEW_QQUANNTITTY);/ Veeriffy OOutccomeeLineIItemm
33、 exxpecctedd = creeateeLinneIttem( NEEW_QQUANNTITTY,CUST_DISSCOUUNT_PC, EXXTENNDEDD_PRRICEE, PPRODDUCTT, iinvooicee);asserrtCoontaainssExaactllyOnneLiineIItemm( iinvooicee, eexpeecteed ); 18.2.5 關(guān)于名名稱自動(dòng)化測(cè)試試程序通通常稱為為“測(cè)試腳腳本”,可能是是因?yàn)槔^繼承了這這些測(cè)試試程序,這這些程序序最初在在解釋性性測(cè)試腳腳本語言言(例如Tccl)中實(shí)現(xiàn)現(xiàn)。稱它它們?yōu)槟_腳本測(cè)試試的不利利之處是是,該術(shù)術(shù)語
34、容易易將手動(dòng)動(dòng)測(cè)試過過程中應(yīng)應(yīng)遵循的的腳本與與不用腳腳本的測(cè)測(cè)試(例例如探測(cè)測(cè)測(cè)試)相混淆淆。18.2.6 高級(jí)閱閱讀介寫測(cè)及它動(dòng)T的最以T-或TDDD-AAPG開始。18.3 數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試如何準(zhǔn)備軟軟件的自自動(dòng)化測(cè)測(cè)試?如何減減少測(cè)試試碼復(fù)制制?將各測(cè)試所所需的信信息存儲(chǔ)儲(chǔ)在數(shù)據(jù)據(jù)文件里里,并寫閱閱讀文件件和執(zhí)行行測(cè)試的的解釋程程序。圖18-33 數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試示示意圖測(cè)試可能有有很多重重復(fù),不僅因因?yàn)楸仨氻毝啻芜\(yùn)運(yùn)行相同同測(cè)試,而且因因?yàn)樵S多多測(cè)試只只是略有有不同。例例如,要要運(yùn)行本本質(zhì)上相相同但系系統(tǒng)輸入入略有不不同的測(cè)測(cè)試,并并驗(yàn)證實(shí)實(shí)際輸出出是不是是具有相相應(yīng)改變變。每個(gè)個(gè)測(cè)試
35、都都由相同同的步驟驟組成。擁擁有這么么多測(cè)試試是確保保完好功功能性覆覆蓋率的的好方法法,但對(duì)對(duì)于測(cè)試試可維護(hù)護(hù)性而言言它卻不不是好方方法,因因?yàn)閷?duì)某某個(gè)測(cè)試試算法的的變更一一定會(huì)傳傳播給所所有類似似測(cè)試。數(shù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試可以以獲得好好的覆蓋蓋率同時(shí)時(shí)又能最最小化需需要編寫寫和維護(hù)護(hù)的測(cè)試試碼的數(shù)數(shù)量。18.3.1 運(yùn)行原原理寫數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序,它包含含測(cè)試的的所有公公共邏輯輯。可以以將隨著著測(cè)試改改變而改改變的數(shù)數(shù)據(jù)放置置到數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試文件件中,解解釋程序序讀取該該文件來來執(zhí)行測(cè)測(cè)試。對(duì)對(duì)于每個(gè)個(gè)測(cè)試而而言,它它實(shí)現(xiàn)相相同系列列的動(dòng)作作來實(shí)現(xiàn)現(xiàn)四階段段測(cè)試。第第一階段段,解釋程程序
36、檢索索文件中中的測(cè)試試數(shù)據(jù),然后使使用文件件中的數(shù)數(shù)據(jù)建立立測(cè)試夾夾具。第第二階段段,它執(zhí)執(zhí)行具有有文件指指定參數(shù)數(shù)的SUUT。第第三階段段,它比比較SUUT生成成的實(shí)際際結(jié)果(例如返返回值、測(cè)測(cè)試后狀狀態(tài))與與文件的的預(yù)期結(jié)結(jié)果。如如果結(jié)果果不匹配配,它將將測(cè)試標(biāo)標(biāo)記為失失?。蝗缛绻鸖UUT拋出出異常,它它捕獲異異常并相相應(yīng)地標(biāo)標(biāo)記測(cè)試試然后繼繼續(xù)。第第四階段段,解釋釋程序進(jìn)進(jìn)行必要要的夾具具拆卸,然然后繼續(xù)續(xù)執(zhí)行文文件中的的下一個(gè)個(gè)測(cè)試。需要一系列列復(fù)雜步步驟的測(cè)測(cè)試可以以簡(jiǎn)化為為數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試文件中中的一行行數(shù)據(jù)。Fit是寫數(shù)據(jù)驅(qū)動(dòng)測(cè)試架構(gòu)的普遍示例。18.3.2 使用時(shí)時(shí)機(jī)數(shù)據(jù)驅(qū)動(dòng)測(cè)
37、測(cè)試是記記錄測(cè)試試和腳本本測(cè)試的的可選策策略。然然而,它它也可以以用作腳腳本測(cè)試試策略的的一部分分。實(shí)際際上,回回放記錄錄測(cè)試時(shí)時(shí),它們們就是數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試。數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試是是讓業(yè)務(wù)務(wù)人員寫寫自動(dòng)化化測(cè)試的的理想策策略。保保持?jǐn)?shù)據(jù)據(jù)文件格格式簡(jiǎn)單單,就可可能讓業(yè)業(yè)務(wù)人員員用數(shù)據(jù)據(jù)填充文文件并執(zhí)執(zhí)行測(cè)試試,而無無需要求求技術(shù)人人員寫各各種測(cè)試試的測(cè)試試碼。當(dāng)有許多不不同的數(shù)數(shù)據(jù)值,同時(shí)又又希望使使用這些些值來執(zhí)執(zhí)行SUUT(其中每每個(gè)數(shù)據(jù)據(jù)值都要要執(zhí)行相相同系列列的步驟驟)時(shí),可以考考慮使用用數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試作為腳腳本測(cè)試試的一部部分。通通常會(huì)發(fā)發(fā)現(xiàn)這種種相似性性會(huì)隨著著時(shí)間的的推移而而變化
38、,因因此要先先重構(gòu)到到參數(shù)化化測(cè)試,然然后重構(gòu)構(gòu)到數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試。也也可能在在具有不不同數(shù)據(jù)據(jù)值的不不同序列列中安排排一組標(biāo)標(biāo)準(zhǔn)步驟驟,和在在遞增的的表格測(cè)測(cè)試(參參見“參數(shù)化化測(cè)試”)中一一樣。這這種方法法具有最最好的覆覆蓋率,同同時(shí)需要要維護(hù)的的測(cè)試碼碼數(shù)量也也最少,如如果需要要,還可可以很方方便地添添加更多多測(cè)試。決定是否使使用數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試的另另一個(gè)因因素,是是配置數(shù)數(shù)據(jù)是不不是硬編編碼或驅(qū)驅(qū)動(dòng)要測(cè)測(cè)試的行行為。如如果使用用腳本測(cè)測(cè)試自動(dòng)動(dòng)化用于于數(shù)據(jù)驅(qū)驅(qū)動(dòng)行為為的測(cè)試試,當(dāng)配配置數(shù)據(jù)據(jù)改變時(shí)時(shí),就必必須更新新測(cè)試程程序。這種行行為很不不正常,因因?yàn)樗肀硎?,?dāng)當(dāng)改變配配置數(shù)據(jù)據(jù)庫
39、中的的數(shù)據(jù)時(shí)時(shí),必須須將變更更提交給給源代碼碼庫SSCM4 當(dāng)然,也應(yīng)該管理在版本控制庫里的測(cè)試數(shù)據(jù),但這個(gè)主題在另一本書中討論,詳情請(qǐng)參見RDb。讓測(cè)測(cè)試變成成數(shù)據(jù)驅(qū)驅(qū)動(dòng),對(duì)對(duì)配置數(shù)數(shù)據(jù)或元元對(duì)象的的變更就就由對(duì)數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試的的變更驅(qū)驅(qū)動(dòng),這這是一4 當(dāng)然,也應(yīng)該管理在版本控制庫里的測(cè)試數(shù)據(jù),但這個(gè)主題在另一本書中討論,詳情請(qǐng)參見RDb。18.3.3 實(shí)現(xiàn)方方式說明明實(shí)現(xiàn)方式選選擇取決決于是否否使用數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試作作為不同同的測(cè)試試策略或或作為基基于xUUnitt策略的的一部分分。使用用數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試作為獨(dú)獨(dú)立的測(cè)測(cè)試策略略通常使使用開源源工具(例如FFit)或商業(yè)業(yè)記錄測(cè)測(cè)試工具具
40、(例如如QTPP)。使使用數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試作為為腳本測(cè)測(cè)試策略略的一部部分可能能要實(shí)現(xiàn)現(xiàn)xUnnit內(nèi)內(nèi)的數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試解釋釋程序。不管選擇哪哪種策略略,如果可可能,都應(yīng)該該使用相相應(yīng)的測(cè)測(cè)試自動(dòng)動(dòng)化架構(gòu)構(gòu)。這樣樣做可以以有效地地將測(cè)試試轉(zhuǎn)換為為兩個(gè)部部分:數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序和數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試文件件。這兩兩個(gè)部分分都應(yīng)該該保持在在版本控控制之下下,以便便可以知知道它們們隨著時(shí)時(shí)間推移移如何演演變,同同時(shí)還允允許收回回所有錯(cuò)錯(cuò)誤的變變更。將將數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試文件存存儲(chǔ)在某某種類型型的庫中中至關(guān)重重要,雖雖然這種種概念與與業(yè)務(wù)用用戶不相相關(guān)。給給用戶提提供數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試文件件授權(quán)工工
41、具(例例如FiitNeessee)可以以讓這種種操作透透明,或或者可以以建立“用戶友友好”庫,例例如剛好好支持版版本控制制的文檔檔管理系系統(tǒng)。作為持續(xù)集集成過程程的一部部分運(yùn)行行這些測(cè)測(cè)試,以便確確定曾經(jīng)經(jīng)通過的的測(cè)試沒沒有突然然失敗,這樣至至關(guān)重要要。沒有有這樣做做可能導(dǎo)導(dǎo)致缺陷陷進(jìn)入未未檢測(cè)到到的軟件件,一旦旦檢測(cè)到到缺陷,就就要付出出更多努努力來檢檢修。在在持續(xù)集集成過程程中包含含客戶測(cè)測(cè)試要求求能夠記記錄通過過的客戶戶測(cè)試,因因?yàn)樘峤唤凰写a之前前不能確確保所有有客戶測(cè)測(cè)試都通通過。一一種選擇擇是保持持兩組輸輸入文件件,將通通過的測(cè)測(cè)試從“仍是紅紅色”文件遷遷移到“都是綠綠色”文件
42、中中,該文文件作為為自動(dòng)構(gòu)構(gòu)建過程程一部分分用于回回歸測(cè)試試。1. 變體體:數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試架構(gòu)(Fitt)使用數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試作為測(cè)測(cè)試策略略時(shí),應(yīng)該考考慮使用用預(yù)制數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試架架構(gòu)。WWardd Cuunniinghham最最初將FFit這這種架構(gòu)構(gòu)作為在在自動(dòng)化化測(cè)試中中包含業(yè)業(yè)務(wù)用戶戶的方法法。雖然然Fitt通常用用于自動(dòng)動(dòng)化客戶戶測(cè)試,但但如果測(cè)測(cè)試數(shù)量量授權(quán)構(gòu)構(gòu)建必需需的夾具具,它也也可用于于單元測(cè)測(cè)試。FFit由由兩部分分組成:架構(gòu)和和用戶創(chuàng)創(chuàng)建的夾夾具。FFit架架構(gòu)是通通用數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試解釋釋程序,該解釋釋程序讀讀取輸入入文件并并找出其其中的所所有表。它它在每個(gè)個(gè)表的
43、左左上單元元查找夾夾具類名名,然后后搜索該該類的可可執(zhí)行測(cè)測(cè)試。當(dāng)當(dāng)它找到到類并讀讀取該表表的行和和列時(shí),它它會(huì)創(chuàng)建建該類的的實(shí)例并并將控件件傳遞給給該實(shí)例例。可以以重寫架架構(gòu)定義義的方法法來指定定表中各各單元出出現(xiàn)的情情況。因因此,F(xiàn)Fit夾夾具是適適配器,F(xiàn)it調(diào)用它來解釋數(shù)據(jù)表并調(diào)用SUT上的方法。Fit表也也可以包包含SUUT的預(yù)預(yù)期結(jié)果果。Fiit將指指定的值值與SUUT返回回的實(shí)際際值進(jìn)行行比較。然而,與xUnit中的斷言方法不一樣,F(xiàn)it在遇到第一個(gè)不匹配預(yù)期值的值時(shí)不會(huì)終止測(cè)試。相反,它給表中的各個(gè)單元涂上顏色,綠色單元表示與預(yù)期值相匹配的實(shí)際值,紅色單元表示錯(cuò)誤的或意料之外的
44、值。使用Fitt有幾個(gè)個(gè)好處:與構(gòu)建自己己的測(cè)試試解釋程程序GGOF相比,要要寫的代代碼更少少。輸出對(duì)業(yè)務(wù)務(wù)人員也也有意義義,而不不只是對(duì)對(duì)技術(shù)人人員有意意義。測(cè)試不會(huì)在在遇到第第一個(gè)失失敗的斷斷言時(shí)停停止。FFit可可以用一一種能夠夠很容易易看出失失敗模式式的方法法傳達(dá)多多種失敗敗/錯(cuò)誤。照現(xiàn)在的樣樣子,有有大量夾夾具類型型可以用用來子類類化或使使用。那么,為什什么不在在所有單單元測(cè)試試中都使使用Fiit取代代xUnnit呢呢?使用用Fitt的主要要不足如如下所述述:在構(gòu)建Fiit夾具具之前,測(cè)測(cè)試場(chǎng)景景必須非非常易于于理解。因此需要將各種測(cè)試邏輯轉(zhuǎn)換為表格表示法,這不太合適,特別是對(duì)習(xí)慣于
45、從過程思考的開發(fā)人員而言尤其如此。它適合擁有可以為客戶測(cè)試寫Fit夾具的測(cè)試者的情況,但這種方法不適合于真正的單元測(cè)試,除非測(cè)試者與開發(fā)人員的比例為11。這些測(cè)試在在每個(gè)測(cè)測(cè)試中都都要采用用相同的的SUTT交互邏邏輯5 表格數(shù)據(jù)必須在夾具建立或執(zhí)行SUT階段注入SUT,或者在結(jié)果驗(yàn)證階段從SUT中檢索。要要運(yùn)行幾幾種不同同類型的的測(cè)試,很很可能就就必須為為每種類類型的測(cè)測(cè)試構(gòu)建建一個(gè)或或多個(gè)不不同的夾夾具。構(gòu)構(gòu)建新的的夾具通通常比寫寫一些測(cè)測(cè)試方法法更復(fù)雜雜。雖然然現(xiàn)在有有許多不不同夾具具類型可可以用來來子類化化或使用用,但這種種使用方方法與要要求開發(fā)發(fā)人員學(xué)學(xué)習(xí)以便便完成任任務(wù)的方方法不同同
46、。盡管管這樣,也也不是所所有單元元測(cè)試都都要使用用Fi5 表格數(shù)據(jù)必須在夾具建立或執(zhí)行SUT階段注入SUT,或者在結(jié)果驗(yàn)證階段從SUT中檢索。Fit測(cè)試試通常沒沒有集成成到開發(fā)發(fā)人員通通過xUUnitt運(yùn)行的的回歸測(cè)測(cè)試中。相反,這些測(cè)試必須單獨(dú)運(yùn)行,這樣每次檢入時(shí)它們有可能不運(yùn)行。有些團(tuán)隊(duì)將Fit測(cè)試作為其持續(xù)集成構(gòu)建過程的一部分,以部分解決這個(gè)問題。有的團(tuán)隊(duì)報(bào)告已經(jīng)擁有輔助“客戶”構(gòu)建服務(wù)或運(yùn)行所有客戶測(cè)試的服務(wù)器。當(dāng)然,這些些問題都都是可以以克服的的??偟牡膩碚f,xUnnit架架構(gòu)比FFit架架構(gòu)更適適合于單單元測(cè)試試;Fitt架構(gòu)比比xUnnit架架構(gòu)更適適合于客客戶測(cè)試試。2. 變體
47、體:天真xUUnitt測(cè)試解解釋程序序當(dāng)需要作為為基于xxUniit的腳腳本測(cè)試試策略的的一部分分運(yùn)行的的數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試的數(shù)量量較小時(shí)時(shí),最簡(jiǎn)單單的實(shí)現(xiàn)現(xiàn)方式是是寫包含含循環(huán)的的測(cè)試方方法,該循環(huán)環(huán)從文件件讀取一一組輸入入數(shù)據(jù)值值以及預(yù)預(yù)期結(jié)果果。這與與將單個(gè)個(gè)參數(shù)化化測(cè)試及及其所有有調(diào)用者者轉(zhuǎn)換為為表格測(cè)測(cè)試(參參見“參數(shù)化化測(cè)試”)具有有相同意意義。和和表格測(cè)測(cè)試一樣樣,這種種構(gòu)建數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序的方法法會(huì)產(chǎn)生生具有許許多斷言言的單個(gè)個(gè)測(cè)試用用例對(duì)象象。它有有以下幾幾種結(jié)果果:整組數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試將計(jì)算算為單個(gè)個(gè)測(cè)試。因因此,將將一組參參數(shù)化測(cè)測(cè)試轉(zhuǎn)換換為單個(gè)個(gè)數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試
48、試會(huì)減少少執(zhí)行的的測(cè)試數(shù)數(shù)量。當(dāng)遇到第一一個(gè)失敗敗或錯(cuò)誤誤時(shí)會(huì)停停止執(zhí)行行數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試。因此此,遺漏漏了許多多缺陷定定位。有有些xUUnitt變體允允許指定定失敗的的斷言不不中止測(cè)測(cè)試方法法的執(zhí)行行。需要確保出出現(xiàn)失敗敗時(shí),斷言失失敗能說說出正在在執(zhí)行哪哪個(gè)子測(cè)測(cè)試。在循環(huán)中包包含trry/ccatcch語句句,同時(shí)包包含測(cè)試試邏輯然然后繼續(xù)續(xù)代碼執(zhí)執(zhí)行,這樣可可以解決決最后兩兩個(gè)問題題。然而而,仍然然需要能能夠以一一種有意意義的方方法報(bào)告告測(cè)試結(jié)結(jié)果(例例如,“失敗子子測(cè)試11、3和6以及”)。要更方便地地?cái)U(kuò)充數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序來處理理相同數(shù)數(shù)據(jù)文件件中幾種種不同類類型的測(cè)測(cè)試
49、,可以包包含“動(dòng)詞”或“動(dòng)作單單詞”作為數(shù)數(shù)據(jù)文件件中各條條目的一一部分。解解釋程序序可以依依據(jù)動(dòng)作作單詞分分派給不不同的參參數(shù)化測(cè)測(cè)試。3. 變體體:測(cè)試套套件對(duì)象象生成器器讓測(cè)試套件件工廠(參見“測(cè)試枚枚舉”)上的suitte方法法偽造與與測(cè)試發(fā)發(fā)現(xiàn)內(nèi)置置機(jī)制相相同的測(cè)測(cè)試套件件對(duì)象結(jié)結(jié)構(gòu),就可以以避免與與天真xxUniit測(cè)試試解釋程程序相關(guān)關(guān)的“第一次次失敗時(shí)時(shí)就停止止”這個(gè)問問題。要要這樣做做,可以以為數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試文件件中的每每個(gè)條目目構(gòu)建測(cè)測(cè)試用例例對(duì)象,然然后用特特定測(cè)試試的測(cè)試試數(shù)據(jù)初初始化每每個(gè)對(duì)象象6 這與xUnit的內(nèi)置測(cè)試方法發(fā)現(xiàn)(參見“測(cè)試發(fā)現(xiàn)”)機(jī)制的運(yùn)行原理類
50、似,但后者接受的是測(cè)試數(shù)據(jù)和測(cè)試方法名稱。構(gòu)建建測(cè)試套套件時(shí),該該對(duì)象知知道如何何執(zhí)行具具有加載載數(shù)據(jù)的的參數(shù)化化測(cè)試。這這樣即使使第一個(gè)個(gè)測(cè)試用用例對(duì)象象遇到斷斷言失敗敗,也可可以確保保數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試能夠繼繼續(xù)執(zhí)行行。因此此,可以以讓測(cè)試6 這與xUnit的內(nèi)置測(cè)試方法發(fā)現(xiàn)(參見“測(cè)試發(fā)現(xiàn)”)機(jī)制的運(yùn)行原理類似,但后者接受的是測(cè)試數(shù)據(jù)和測(cè)試方法名稱。4. 變體體:測(cè)試套套件對(duì)象象模擬器器構(gòu)建測(cè)試套套件對(duì)象象的方法法之一是是創(chuàng)建像像一個(gè)對(duì)對(duì)象那樣樣運(yùn)行的的測(cè)試用用例對(duì)象象。要求求運(yùn)行時(shí)時(shí)該對(duì)象象會(huì)閱讀讀數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試文件并并重新執(zhí)執(zhí)行所有有測(cè)試。它它必須捕捕獲參數(shù)數(shù)化測(cè)試試拋出的的所有異異
51、常,然然后繼續(xù)續(xù)執(zhí)行后后面的測(cè)測(cè)試。完完成后,測(cè)測(cè)試用例例對(duì)象必必須給測(cè)測(cè)試運(yùn)行行器報(bào)告告測(cè)試、失失敗和錯(cuò)錯(cuò)誤的準(zhǔn)準(zhǔn)確數(shù)量量。它也也要實(shí)現(xiàn)現(xiàn)測(cè)試運(yùn)運(yùn)行器依依賴的標(biāo)標(biāo)準(zhǔn)測(cè)試試接口上上的其他他方法,例例如返回回“套件”中測(cè)試試的數(shù)量量、返回回套件中中每個(gè)測(cè)測(cè)試的名名稱和狀狀態(tài)(關(guān)關(guān)于圖形形測(cè)試樹樹探測(cè)器器,參見見“測(cè)試運(yùn)運(yùn)行器”)。18.3.4 啟發(fā)示示例假設(shè)有一組組測(cè)試如如下所示示:def ttestt_exxtreefsourcceXmml = expeccteddHtmml = abccgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHH
52、tmll,)enddef ttestt_teestttermm_noormaalsourcceXmml = expeccteddHtmml = abccgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHHtmll,)enddef ttestt_teestttermm_plluraalsourcceXmml = expeccteddHtmml = abccsgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHHtmll,)end如下定義參參數(shù)化測(cè)測(cè)試可以以簡(jiǎn)化這這些測(cè)試試:def ggene
53、eratteAnndVeeriffyHttml( soourcceXmml, exppecttedHHtmll,messaage, &bblocck) mockFFilee = MocckFiile.neww sourcceXmml.ddeleete!(t)handdlerr = settupHHanddlerr(soourcceXmml, mocckFiile )blockk.caall unllesss bllockk = niil handdlerr.prrinttBoddyCoonteentss actuaal_hhtmll = mocckFiile.outtputt asserrt_
54、eequaal_hhtmll(exppecttedHHtmll, actuaal_hhtmll, messaage + htmml ooutpput) actuaal_hhtmll end這些測(cè)試存存在的主主要問題題是,這些測(cè)測(cè)試還是是用代碼碼寫的,而而實(shí)際上上它們之之間的唯唯一不同同是用作作輸入的的數(shù)據(jù)。18.3.5 重構(gòu)說說明當(dāng)然,解決決方案是是將參數(shù)數(shù)化測(cè)試試的公共共邏輯提提取到數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序中,并將所所有參數(shù)數(shù)集合到到任何人人都可以以編輯的的單個(gè)數(shù)數(shù)據(jù)文件件中。需需要寫“主”測(cè)試,它它知道從從哪個(gè)文文件閱讀讀測(cè)試數(shù)數(shù)據(jù),知知道閱讀讀和分析析測(cè)試文文件的一一些邏輯輯。該邏邏
55、輯可以以調(diào)用現(xiàn)現(xiàn)有的參參數(shù)化測(cè)測(cè)試邏輯輯,并讓讓xUnnit記記錄測(cè)試試執(zhí)行統(tǒng)統(tǒng)計(jì)。18.3.6 示例:使用XMML數(shù)據(jù)據(jù)文件的的xUnnit數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試本示例中,使用XMML形式式文件。每每個(gè)測(cè)試試都由ttestt元素組組成,它它有三個(gè)個(gè)主要部部分:告訴數(shù)據(jù)驅(qū)驅(qū)動(dòng)測(cè)試試解釋程程序要運(yùn)運(yùn)行哪種種測(cè)試邏邏輯的動(dòng)動(dòng)作(例例如,ccrosssreef)。傳遞給SUUT的輸輸入,這這里是ssourrceXXml元元素希望SUTT(在exxpeccteddHtmml元素素中)生生成的HHTMLL這三個(gè)部分分包裝在在tesstsuuitee元素里里: croossrref aabc croossrre
56、f aabc croossrref aabcss 所有擁有XXML編編輯器的的人都可可以編輯輯這個(gè)XXML文文件,而不必必?fù)?dān)心引引入測(cè)試試邏輯錯(cuò)錯(cuò)誤。數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試解解釋程序序封裝用用來驗(yàn)證證預(yù)期結(jié)結(jié)果的所所有邏輯輯,使用用的方法法與參數(shù)數(shù)化測(cè)試試使用的的方法相相同。出出于查看看的目的的,通過過定義樣樣式表對(duì)對(duì)用戶隱隱藏了XXML的的結(jié)構(gòu)。另另外,許許多XMML編輯輯器會(huì)將將XMLL轉(zhuǎn)換為為基于表表格的輸輸入以簡(jiǎn)簡(jiǎn)化編輯輯。為了避免處處理操作作XMLL的復(fù)雜雜性,解釋程程序也可可以使用用CSVV文件作作為輸入入。18.3.7 示例:使用CSSV輸入文文件的xxUniit數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試使用C
57、SVV文件,前面示示例中的的測(cè)試則則如下所所示:ID, Acttionn, SSourrceXXml, ExxpeccteddHtmml Extreef,ccrosssreef,abbc TTermm,crrosssreff,aabc TTermms,ccrosssreef,abbcs這個(gè)解釋程程序相對(duì)對(duì)簡(jiǎn)單,并且建建立在為為參數(shù)化化測(cè)試而而開發(fā)的的邏輯之之上。它它閱讀CCSV文文件,并并使用RRubyy的spllit函函數(shù)分析析各行。def ttestt_crrosssreffexecuuteDDataaDriivennTesst CroossrrefHHanddlerrTesst.ttxt
58、 enddef eexeccuteeDattaDrriveenTeest fillenaame dataFFilee = Fille.oopenn(fiilennamee) dataFFilee.eaach_linne ddo | liine |desc, acctioon, parrt2 = llinee.spplitt(,) sourcceXmml, exppecttedHHtmll, llefttOveer = paart22.spplitt(,) if ccrosssreef=acctioon.sstriipgenerrateeAnddVerrifyyHtmml ssourrceXXm
59、l, exxpeccteddHtmml, desscelse # nnew veerbss ggo bbefoore herre aas eelsiifssreporrt_eerroor( unnknoown acttionn + acctioon.sstriip ) end end end除非將geenerrateeAnddVerrifyyHtmml的實(shí)實(shí)現(xiàn)方式式改變?yōu)闉椴东@斷斷言失敗敗和增加加失敗計(jì)計(jì)數(shù)器,這種數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試才才會(huì)在遇遇到第一一個(gè)失敗敗斷言時(shí)時(shí)停止執(zhí)執(zhí)行。而而回歸測(cè)測(cè)試可以以接受這這種行為為,雖然然它沒有有提供很很好的缺缺陷定位位。18.3.8 示例:使用Fiit架構(gòu)構(gòu)的
60、數(shù)據(jù)據(jù)驅(qū)動(dòng)測(cè)測(cè)試如果要進(jìn)一一步控制制用戶的的行為,可以創(chuàng)創(chuàng)建Fiit“列夾具具”,其中有有id、acttionn、souurcee XMML和exppectted Htmml()各列,讓用戶戶編輯HHTMLL Weeb頁面面(如表188-1所所示)。表18-11 使用用Fitt架構(gòu)構(gòu)構(gòu)建的數(shù)數(shù)據(jù)驅(qū)動(dòng)動(dòng)測(cè)試Com.xxuniitpaatteens.fitt.CroossrrefHHandleerFiixtuureidactioonsourcce XXMLexpecctedd HttrnllOExtreefcrosssreff?abcc?TestTTermmcrosssreff?abbc?Test
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五創(chuàng)兩評(píng)活動(dòng)實(shí)施方案(5篇)
- 危險(xiǎn)化學(xué)品庫管理制度(2篇)
- 2024年手術(shù)室護(hù)士個(gè)人工作計(jì)劃(3篇)
- 2024年中學(xué)創(chuàng)建綠色學(xué)校工作總結(jié)例文(2篇)
- 2024年員工年度工作總結(jié)樣本(3篇)
- 關(guān)于各種藥房管理制度范文(2篇)
- 2024年甲基分餾塔工安全操作規(guī)程(2篇)
- 公司員工晉升管理制度完整(4篇)
- 2024年小學(xué)衛(wèi)生保健工作總結(jié)(2篇)
- 2024年助理年終工作總結(jié)模版(4篇)
- 二年級(jí)數(shù)學(xué)興趣小組活動(dòng)記錄全記錄
- 車輛維修保養(yǎng)服務(wù)方案(完整版)
- 中藥硬膏管理規(guī)定、操作流程及評(píng)分標(biāo)準(zhǔn)(共3頁)
- 單值移動(dòng)極差圖(空白表格)
- 電鍍生產(chǎn)工序
- 塔城地區(qū)事業(yè)單位專業(yè)技術(shù)各等級(jí)崗位基本任職資格條件指導(dǎo)意見
- 初中語文課外古詩文董仲舒《春秋繁露》原文及翻譯
- (完整)(電子商務(wù)軟件研發(fā)及產(chǎn)業(yè)化建設(shè)項(xiàng)目)監(jiān)理月報(bào)(201202)
- 旅游出行安全告知書
- (完整版)服裝生產(chǎn)工藝流程圖匯總,推薦文檔
- 優(yōu)秀團(tuán)支部申報(bào)表
評(píng)論
0/150
提交評(píng)論