




已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
_軟件測(cè)試面試必備第18章測(cè)試策略模式18.1 記錄測(cè)試(也稱(chēng)為記錄與回放測(cè)試、機(jī)器人用戶(hù)測(cè)試、捕獲/回放測(cè)試)如何準(zhǔn)備軟件的自動(dòng)化測(cè)試?通過(guò)記錄與應(yīng)用程序的交互并使用測(cè)試工具回放它們來(lái)自動(dòng)化測(cè)試。圖18-1 記錄測(cè)試示意圖自動(dòng)化測(cè)試有幾個(gè)目的。在回歸測(cè)試軟件更改之后,它們可以用于這些軟件。它們有助于歸檔軟件的行為。在寫(xiě)軟件之前,它們可以指定其行為。如何準(zhǔn)備自動(dòng)化測(cè)試腳本,對(duì)可以將它們用于什么目的、它們對(duì)SUT中的變更有多健壯以及準(zhǔn)備它們需要多少技能與努力等產(chǎn)生影響。記錄測(cè)試使得能夠在構(gòu)建SUT之后、改變它之前迅速創(chuàng)建回歸測(cè)試。18.1.1 運(yùn)行原理我們使用一種工具,它會(huì)監(jiān)控我們與SUT的交互。這種工具記錄大多數(shù)SUT對(duì)我們的通信以及我們對(duì)SUT的響應(yīng)。錄音會(huì)話(huà)完成之后,可以將它保存在文件里以便稍后回放。準(zhǔn)備運(yùn)行測(cè)試時(shí),可以從工具的“回放”部分開(kāi)始,并讓它指向錄音會(huì)話(huà)。它啟動(dòng)SUT,并給它提供響應(yīng)SUT輸出的記錄輸入。在錄音會(huì)話(huà)內(nèi),它也可以比較SUT的輸出及其響應(yīng)。錯(cuò)誤匹配可能導(dǎo)致測(cè)試失敗。有些記錄測(cè)試工具允許調(diào)整錄音會(huì)話(huà)內(nèi)SUT表現(xiàn)與回放過(guò)程中SUT表現(xiàn)之間比較的敏感性。大多數(shù)記錄測(cè)試工具通過(guò)用戶(hù)界面與SUT交互。18.1.2 使用時(shí)機(jī)如果應(yīng)用程序正在運(yùn)行,但不希望對(duì)它進(jìn)行太多變更,就可以使用記錄測(cè)試進(jìn)行回歸測(cè)試?,F(xiàn)有應(yīng)用程序需要重構(gòu)(預(yù)計(jì)修改功能性)而沒(méi)有可用的腳本測(cè)試用作回歸測(cè)試時(shí),也可以使用記錄測(cè)試。通常,生成一組記錄測(cè)試比準(zhǔn)備具有相同功能性的腳本測(cè)試更快。在理論上,任何知道如何運(yùn)行應(yīng)用程序的人都可以完成測(cè)試記錄,幾乎不需要專(zhuān)業(yè)技術(shù)。實(shí)際上,許多商業(yè)工具都值得深入學(xué)習(xí)。同時(shí),需要一些專(zhuān)業(yè)技術(shù)來(lái)添加“檢查點(diǎn)”,以便調(diào)整回放工具的敏感性,或者調(diào)整測(cè)試腳本(如果記錄工具記錄了錯(cuò)誤信息)。大多數(shù)記錄測(cè)試工具通過(guò)用戶(hù)界面與SUT交互。如果SUT的用戶(hù)界面不斷發(fā)展,這種方法特別容易讓它們變得脆弱(接口敏感性,參見(jiàn)“脆弱測(cè)試”)。甚至是小的變更(例如改變按鈕或字段的內(nèi)部名稱(chēng))也足以讓回放工具產(chǎn)生錯(cuò)誤。這些工具也傾向于在低級(jí)別詳細(xì)記錄信息,這樣會(huì)讓測(cè)試難以理解(參見(jiàn)“模糊測(cè)試”)。因此,如果對(duì)SUT的變更中止了這些工具,也很難手動(dòng)修復(fù)它們。所以,如果SUT不斷發(fā)展,就要準(zhǔn)備有規(guī)律地再記錄測(cè)試。如果要使用作為文檔的測(cè)試或者要使用這些測(cè)試驅(qū)動(dòng)新的開(kāi)發(fā),就應(yīng)該考慮使用腳本測(cè)試。使用商業(yè)記錄測(cè)試工具難以實(shí)現(xiàn)這些目標(biāo),因?yàn)榇蠖鄶?shù)工具不允許定義用于測(cè)試記錄的高級(jí)語(yǔ)言。將記錄測(cè)試性能構(gòu)建到應(yīng)用程序本身之中或者使用重構(gòu)的記錄測(cè)試可以解決這個(gè)問(wèn)題。變體:重構(gòu)的記錄測(cè)試這兩種策略的混合是,使用“記錄、重構(gòu)、回放”1 名稱(chēng)“記錄、重構(gòu)、回放”是Adam Geras提出來(lái)的。順序從最新記錄測(cè)試中提取一組“動(dòng)作組件”或“動(dòng)詞”,然后通過(guò)測(cè)試用例來(lái)調(diào)用這些“動(dòng)作組件”(而不是使用詳細(xì)的內(nèi)聯(lián)代碼)。大多數(shù)商業(yè)捕獲/回放工具提供將字面值轉(zhuǎn)換為參數(shù)的方法,主要的測(cè)試用例可以將這些參數(shù)傳遞到“動(dòng)作組件”。屏幕改變時(shí),只需再記錄“動(dòng)作組件”,所有測(cè)試用例自動(dòng)使用新的“動(dòng)作組件”定義繼續(xù)運(yùn)行。這種策略在效能上與使用測(cè)試實(shí)用程序方法與單元測(cè)試中的SUT交互相同。它允許使用重構(gòu)的記錄測(cè)試組件作為腳本測(cè)試中的高級(jí)語(yǔ)言。像Mercury Interactive的BPT2 BPT是“業(yè)務(wù)進(jìn)程測(cè)試(Business Process Testing)”的縮寫(xiě)。這樣的工具以自頂向下的方法將這一范式用于腳本測(cè)試。開(kāi)發(fā)完高級(jí)腳本并指定了測(cè)試步驟所需的組件之后,更多的技術(shù)人員就可以記錄或手動(dòng)編碼單個(gè)組件。18.1.3 實(shí)現(xiàn)方式說(shuō)明使用記錄測(cè)試策略時(shí),有兩種基本選擇:可以獲得第三方工具,它記錄與應(yīng)用程序交互時(shí)發(fā)生的通信;可以將“記錄與回放”機(jī)制內(nèi)置于應(yīng)用程序。1. 變體:外部測(cè)試記錄在商業(yè)上有許多測(cè)試記錄工具可用,每種工具都有自身的優(yōu)缺點(diǎn)。最好的選擇取決于應(yīng)用程序用戶(hù)接口的性質(zhì)、預(yù)算、要驗(yàn)證的功能性的復(fù)雜性以及其他可能的因素。如果要使用測(cè)試來(lái)驅(qū)動(dòng)開(kāi)發(fā),就需要挑選使用測(cè)試記錄文件格式的工具,這種格式可以手動(dòng)編輯且易于理解。需要手動(dòng)編寫(xiě)內(nèi)容,如果使用“記錄與回放”工具來(lái)執(zhí)行測(cè)試,這種情況也還是腳本測(cè)試的示例。2. 變體:內(nèi)置測(cè)試記錄也可以將記錄測(cè)試性能內(nèi)置于SUT。在那種情況下,可以用相當(dāng)高的級(jí)別定義測(cè)試腳本“語(yǔ)言”,級(jí)別足夠高,就可以在構(gòu)建系統(tǒng)之前手動(dòng)編寫(xiě)測(cè)試。實(shí)際上,有報(bào)告說(shuō)Microsoft Excel電子數(shù)據(jù)表的VBA宏性能是Excel自動(dòng)化測(cè)試機(jī)制的開(kāi)端。18.1.4 示例:內(nèi)置測(cè)試記錄從表面上看,提供記錄測(cè)試的代碼樣本沒(méi)有意義,因?yàn)檫@種模式處理生成測(cè)試的方法,而不是表示它的方法。回放測(cè)試時(shí),實(shí)際上就是數(shù)據(jù)驅(qū)動(dòng)測(cè)試。同樣,通常不重構(gòu)到記錄測(cè)試,因?yàn)樗?jīng)常是項(xiàng)目嘗試的第一種測(cè)試自動(dòng)化策略。而且,如果發(fā)現(xiàn)有過(guò)多遺漏的測(cè)試,還可以在嘗試腳本測(cè)試之后引入記錄測(cè)試,因?yàn)槭謩?dòng)自動(dòng)化的成本太高。在那種情況下,不應(yīng)該試圖將現(xiàn)有腳本測(cè)試轉(zhuǎn)換為記錄測(cè)試,應(yīng)該記錄新測(cè)試。下面是應(yīng)用程序本身記錄的測(cè)試的示例。該測(cè)試用來(lái)回歸測(cè)試安全關(guān)鍵的應(yīng)用程序,并且在它從OS2上的C移植到Windows上的C+之后。請(qǐng)注意,記錄的信息如何形成用戶(hù)易于理解的域?qū)S酶呒?jí)語(yǔ)言。 5566 SOUTH SOUTH NORTH SOUTH NORTH 該樣本表示回放測(cè)試的輸出。內(nèi)置回放機(jī)制插入了actual元素。status屬性表示這些元素是否匹配expected值。將樣式表應(yīng)用于這些文件來(lái)格式化它們,就像具有彩色編碼結(jié)果的Fit測(cè)試一樣。然后項(xiàng)目的商業(yè)用戶(hù)可以進(jìn)行記錄、回放和結(jié)果分析。在軟件的表示層插入掛鉤可以記錄用戶(hù)和用戶(hù)響應(yīng)提供的選項(xiàng)列表。其中一個(gè)掛鉤的示例如下所示:if (playback_is_on() choice = get_choice_for_playback(dialog_id, choices_list); else choice = display_dialog(choices_list, row, col, title, key); if (recording_is_on() record_choice(dialog_id, choices_list, choice, key); 方法get_choice_for_playback檢索used-value元素的內(nèi)容,而不是要求用戶(hù)從選項(xiàng)列表中選取。方法record_choice生成actual元素并“斷言”expected元素,記錄各元素status屬性的結(jié)果。注意,當(dāng)處于回放模式時(shí),recording_is_on()返回true以便記錄測(cè)試結(jié)果。18.1.5 示例:商業(yè)記錄與回放測(cè)試工具幾乎有所商業(yè)測(cè)試工具都使用“記錄與回放”隱喻。每種工具都定義自己的記錄測(cè)試文件格式,其中大多數(shù)都非常冗長(zhǎng)。下面是使用Mercury Interactive的QuickTest Professional QTP工具記錄的測(cè)試的“簡(jiǎn)短”摘要。它顯示于“專(zhuān)家視圖”中,該視圖表示真正記錄的內(nèi)容:VbScript程序!該示例包括手動(dòng)插入的注釋(前綴為)來(lái)說(shuō)明測(cè)試在做什么,如果改變導(dǎo)致測(cè)試不再運(yùn)行的應(yīng)用程序之后記錄測(cè)試,那么就會(huì)丟失這些注釋。 GoToPageMaintainTaxonomy()Browser(Inf).Page(Inf).WebButton(Login).ClickBrowser(Inf).Page(Inf_2).Check CheckPoint(Inf_2)Browser(Inf).Page(Inf_2).Link(TAXONOMY LINKING).ClickBrowser(Inf).Page(Inf_3).Check CheckPoint(Inf_3)Browser(Inf).Page(Inf_3).Link(MAINTAIN TAXONOMY).ClickBrowser(Inf).Page(Inf_4).Check CheckPoint(Inf_4) AddTerm(A,Top Level, Top Level Definition)Browser(Inf).Page(Inf_4).Link(Add).Clickwait 4Browser(Inf_2).Page(Inf).Check CheckPoint(Inf_5)Browser(Inf_2).Page(Inf).WebEdit(childCodeSuffi x).Set ABrowser(Inf_2).Page(Inf).WebEdit(taxonomyDto.descript).Set Top Level Browser(Inf_2).Page(Inf).WebEdit(taxonomyDto.definiti).Set Top Level Definition Browser(Inf_2).Page(Inf).WebButton(Save).Click wait 4Browser(Inf).Page(Inf_5).Check CheckPoint(Inf_5_2) SelectTerm(A-Top Level) Browser(Inf).Page(Inf_5).WebList(selectedTaxonomyCode).Select A-Top Level AddTerm(B,Second Top Level, Second Top Level Definition)Browser(Inf).Page(Inf_5).Link(Add).Click wait 4 Browser(Inf_2).Page(Inf_2).Check CheckPoint(Inf_2_2)infofi le_;_Inform_Alberta_21.inf_;_hightlight id_; _Browser(Inf_2).Page(Inf_2)_;_ and it goes on, and on, and on .注意,測(cè)試依據(jù)應(yīng)用程序用戶(hù)界面描述所有輸入和輸出的方法。這樣主要會(huì)產(chǎn)生兩個(gè)問(wèn)題:模糊測(cè)試(由記錄信息的具體性質(zhì)所導(dǎo)致)和接口敏感性(導(dǎo)致脆弱測(cè)試)。18.1.6 重構(gòu)說(shuō)明讓該測(cè)試作為文檔可以使之更有用,能夠降低或避免高測(cè)試維護(hù)成本,支持使用一系列提取方法Fowler重構(gòu)組成使用高級(jí)語(yǔ)言的其他測(cè)試。18.1.7 示例:重構(gòu)的商業(yè)記錄測(cè)試下面的示例顯示重構(gòu)來(lái)交流意圖的相同測(cè)試:GoToPage_MaintainTaxonomy()AddTerm(A,Top Level, Top Level Defi nition)SelectTerm(A-Top Level)AddTerm(B,Second Top Level, Second Top Level Defi nition)注意,該測(cè)試的意圖變得非常明顯。提取的測(cè)試實(shí)用程序方法如下所示:Method GoToPage_MaintainTaxonomy()Browser(Inf).Page(Inf).WebButton(Login).Click Browser(Inf).Page(Inf_2).Check CheckPoint(Inf_2) Browser(Inf).Page(Inf_2).Link(TAXONOMY LINKING).Click Browser(Inf).Page(Inf_3).Check CheckPoint(Inf_3) Browser(Inf).Page(Inf_3).Link(MAINTAIN TAXONOMY).Click Browser(Inf).Page(Inf_4).Check CheckPoint(Inf_4)EndMethod AddTerm( code, name, description)Browser(Inf).Page(Inf_4).Link(Add).Clickwait 4Browser(Inf_2).Page(Inf).Check CheckPoint(Inf_5)Browser(Inf_2).Page(Inf).WebEdit(childCodeSuffi x).Set code Browser(Inf_2).Page(Inf).WebEdit(taxonomyDto.descript).Set name Browser(Inf_2).Page(Inf).WebEdit(taxonomyDto.defi niti).Set description Browser(Inf_2).Page(Inf).WebButton(Save).Click wait 4Browser(Inf).Page(Inf_5).Check CheckPoint(Inf_5_2) endMethod SelectTerm( path )Browser(Inf).Page(Inf_5).WebList(selectedTaxonomyCode).Select pathBrowser(Inf).Page(Inf_5).Link(Add).Clickwait 4 end我將這個(gè)示例編在一起是為了說(shuō)明與xUnit中做法的類(lèi)似之處。不要隨便運(yùn)行該示例,因?yàn)樵谡Z(yǔ)句構(gòu)成上它可能不正確。18.1.8 高級(jí)閱讀論文“Agile Regression Testing Using Record and PlayBack”ARTRP介紹了將記錄測(cè)試機(jī)制內(nèi)置于應(yīng)用程序以利于將它導(dǎo)出到其他平臺(tái)的經(jīng)驗(yàn)。18.2 腳本測(cè)試(也稱(chēng)為手寫(xiě)測(cè)試、手動(dòng)編碼測(cè)試、程序測(cè)試、自動(dòng)化單元測(cè)試) 如何準(zhǔn)備軟件的自動(dòng)化測(cè)試?通過(guò)手動(dòng)寫(xiě)測(cè)試程序來(lái)自動(dòng)化測(cè)試。圖18-2 腳本測(cè)試示意圖自動(dòng)化測(cè)試有幾個(gè)目的。在回歸測(cè)試軟件更改之后,它們可以用于這些軟件。它們有助于歸檔軟件的行為。在寫(xiě)軟件之前,它們可以指定其行為。如何準(zhǔn)備自動(dòng)化測(cè)試腳本,這將影響可以將它們用于什么目的、它們對(duì)SUT中的變更有多健壯以及準(zhǔn)備它們需要多少技能與努力。腳本測(cè)試允許在開(kāi)發(fā)軟件之前準(zhǔn)備測(cè)試,以便它們有助于驅(qū)動(dòng)設(shè)計(jì)。18.2.1 運(yùn)行原理通過(guò)寫(xiě)測(cè)試程序來(lái)自動(dòng)化測(cè)試,這些測(cè)試程序?yàn)榱藞?zhí)行其功能性而與SUT交互。和記錄測(cè)試不一樣,這些測(cè)試可以是客戶(hù)測(cè)試或單元測(cè)試。這些測(cè)試程序通常稱(chēng)為“測(cè)試腳本”,以便與它們測(cè)試的產(chǎn)品代碼區(qū)分開(kāi)來(lái)。18.2.2 使用時(shí)機(jī)準(zhǔn)備軟件的單元測(cè)試時(shí),通常使用腳本測(cè)試。因?yàn)樗菀讖挠孟嗤幊陶Z(yǔ)言寫(xiě)的軟件中直接訪(fǎng)問(wèn)單個(gè)單元。它也允許執(zhí)行所有代碼路徑,包括“不合理的”??蛻?hù)測(cè)試稍微有些復(fù)雜。當(dāng)使用自動(dòng)化故事測(cè)試來(lái)驅(qū)動(dòng)軟件開(kāi)發(fā)時(shí),應(yīng)該使用腳本測(cè)試。記錄測(cè)試不能很好滿(mǎn)足這種需要,因?yàn)闆](méi)有用來(lái)記錄它們的應(yīng)用程序時(shí)它難以記錄測(cè)試。準(zhǔn)備腳本測(cè)試可以使用編程經(jīng)驗(yàn)以及測(cè)試方法中的經(jīng)驗(yàn)。項(xiàng)目上的大多數(shù)業(yè)務(wù)用戶(hù)不可能對(duì)學(xué)習(xí)如何準(zhǔn)備腳本測(cè)試感興趣。在編程語(yǔ)言中進(jìn)行腳本測(cè)試的方法之一是,定義測(cè)試SUT的高級(jí)語(yǔ)言,然后作為數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序GOF實(shí)現(xiàn)該語(yǔ)言。一種定義數(shù)據(jù)驅(qū)動(dòng)測(cè)試的開(kāi)源架構(gòu)是Fit及FitNesse。Canoo WebTest是支持這種類(lèi)型測(cè)試的另一種工具。在現(xiàn)有遺留應(yīng)用程序3 在測(cè)試驅(qū)動(dòng)程序中,遺留應(yīng)用程序是缺乏自動(dòng)化測(cè)試安全網(wǎng)的系統(tǒng)。中,可以考慮使用記錄測(cè)試作為快速創(chuàng)建一組回歸測(cè)試的方法,這些回歸測(cè)試在重構(gòu)代碼引入易測(cè)性時(shí)可以起到保護(hù)作用。隨后可以準(zhǔn)備可測(cè)試應(yīng)用程序的腳本測(cè)試。18.2.3 實(shí)現(xiàn)方式說(shuō)明傳統(tǒng)上腳本測(cè)試寫(xiě)作“測(cè)試程序”,通常使用特定的測(cè)試腳本語(yǔ)言。現(xiàn)在,我們更喜歡使用測(cè)試自動(dòng)化架構(gòu)來(lái)寫(xiě)腳本測(cè)試,例如,用與SUT相同的語(yǔ)言寫(xiě)的xUnit。在這種情況下,通常以測(cè)試用例類(lèi)上測(cè)試方法的形式捕獲各測(cè)試程序。要最小化手動(dòng)干預(yù),各測(cè)試方法應(yīng)該實(shí)現(xiàn)自檢測(cè)試(也就是可重復(fù)的測(cè)試)。18.2.4 示例:腳本測(cè)試下面是用JUnit寫(xiě)的腳本測(cè)試的示例:public void testAddLineItem_quantityOne()final BigDecimal BASE_PRICE = UNIT_PRICE;final BigDecimal EXTENDED_PRICE = BASE_PRICE;/ Set Up FixtureCustomer customer = createACustomer(NO_CUST_DISCOUNT);Invoice invoice = createInvoice(customer);/ Exercise SUTinvoice.addItemQuantity(PRODUCT, QUAN_ONE);/ Verify OutcomeLineItem expected =createLineItem( QUAN_ONE, NO_CUST_DISCOUNT,EXTENDED_PRICE, PRODUCT, invoice);assertContainsExactlyOneLineItem( invoice, expected );public void testChangeQuantity_severalQuantity()final int ORIGINAL_QUANTITY = 3;final int NEW_QUANTITY = 5;final BigDecimal BASE_PRICE =UNIT_PRICE.multiply( new BigDecimal(NEW_QUANTITY);final BigDecimal EXTENDED_PRICE =BASE_PRICE.subtract(BASE_PRICE.multiply(CUST_DISCOUNT_PC.movePointLeft(2);/ Set Up FixtureCustomer customer = createACustomer(CUST_DISCOUNT_PC);Invoice invoice = createInvoice(customer);Product product = createAProduct( UNIT_PRICE);invoice.addItemQuantity(product, ORIGINAL_QUANTITY);/ Exercise SUTinvoice.changeQuantityForProduct(product, NEW_QUANTITY);/ Verify OutcomeLineItem expected = createLineItem( NEW_QUANTITY,CUST_DISCOUNT_PC, EXTENDED_PRICE, PRODUCT, invoice);assertContainsExactlyOneLineItem( invoice, expected ); 18.2.5 關(guān)于名稱(chēng)自動(dòng)化測(cè)試程序通常稱(chēng)為“測(cè)試腳本”,可能是因?yàn)槔^承了這些測(cè)試程序,這些程序最初在解釋性測(cè)試腳本語(yǔ)言(例如Tcl)中實(shí)現(xiàn)。稱(chēng)它們?yōu)槟_本測(cè)試的不利之處是,該術(shù)語(yǔ)容易將手動(dòng)測(cè)試過(guò)程中應(yīng)遵循的腳本與不用腳本的測(cè)試(例如探測(cè)測(cè)試)相混淆。18.2.6 高級(jí)閱讀許多書(shū)籍介紹了寫(xiě)腳本測(cè)試以及使用它們驅(qū)動(dòng)SUT設(shè)計(jì)的過(guò)程。最好可以從TDD-BE 或TDD-APG開(kāi)始。18.3 數(shù)據(jù)驅(qū)動(dòng)測(cè)試 如何準(zhǔn)備軟件的自動(dòng)化測(cè)試?如何減少測(cè)試碼復(fù)制?將各測(cè)試所需的信息存儲(chǔ)在數(shù)據(jù)文件里,并寫(xiě)閱讀文件和執(zhí)行測(cè)試的解釋程序。圖18-3 數(shù)據(jù)驅(qū)動(dòng)測(cè)試示意圖測(cè)試可能有很多重復(fù),不僅因?yàn)楸仨毝啻芜\(yùn)行相同測(cè)試,而且因?yàn)樵S多測(cè)試只是略有不同。例如,要運(yùn)行本質(zhì)上相同但系統(tǒng)輸入略有不同的測(cè)試,并驗(yàn)證實(shí)際輸出是不是具有相應(yīng)改變。每個(gè)測(cè)試都由相同的步驟組成。擁有這么多測(cè)試是確保完好功能性覆蓋率的好方法,但對(duì)于測(cè)試可維護(hù)性而言它卻不是好方法,因?yàn)閷?duì)某個(gè)測(cè)試算法的變更一定會(huì)傳播給所有類(lèi)似測(cè)試。數(shù)據(jù)驅(qū)動(dòng)測(cè)試可以獲得好的覆蓋率同時(shí)又能最小化需要編寫(xiě)和維護(hù)的測(cè)試碼的數(shù)量。18.3.1 運(yùn)行原理寫(xiě)數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序,它包含測(cè)試的所有公共邏輯??梢詫㈦S著測(cè)試改變而改變的數(shù)據(jù)放置到數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件中,解釋程序讀取該文件來(lái)執(zhí)行測(cè)試。對(duì)于每個(gè)測(cè)試而言,它實(shí)現(xiàn)相同系列的動(dòng)作來(lái)實(shí)現(xiàn)四階段測(cè)試。第一階段,解釋程序檢索文件中的測(cè)試數(shù)據(jù),然后使用文件中的數(shù)據(jù)建立測(cè)試夾具。第二階段,它執(zhí)行具有文件指定參數(shù)的SUT。第三階段,它比較SUT生成的實(shí)際結(jié)果(例如返回值、測(cè)試后狀態(tài))與文件的預(yù)期結(jié)果。如果結(jié)果不匹配,它將測(cè)試標(biāo)記為失??;如果SUT拋出異常,它捕獲異常并相應(yīng)地標(biāo)記測(cè)試然后繼續(xù)。第四階段,解釋程序進(jìn)行必要的夾具拆卸,然后繼續(xù)執(zhí)行文件中的下一個(gè)測(cè)試。需要一系列復(fù)雜步驟的測(cè)試可以簡(jiǎn)化為數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件中的一行數(shù)據(jù)。Fit是寫(xiě)數(shù)據(jù)驅(qū)動(dòng)測(cè)試架構(gòu)的普遍示例。18.3.2 使用時(shí)機(jī)數(shù)據(jù)驅(qū)動(dòng)測(cè)試是記錄測(cè)試和腳本測(cè)試的可選策略。然而,它也可以用作腳本測(cè)試策略的一部分。實(shí)際上,回放記錄測(cè)試時(shí),它們就是數(shù)據(jù)驅(qū)動(dòng)測(cè)試。數(shù)據(jù)驅(qū)動(dòng)測(cè)試是讓業(yè)務(wù)人員寫(xiě)自動(dòng)化測(cè)試的理想策略。保持?jǐn)?shù)據(jù)文件格式簡(jiǎn)單,就可能讓業(yè)務(wù)人員用數(shù)據(jù)填充文件并執(zhí)行測(cè)試,而無(wú)需要求技術(shù)人員寫(xiě)各種測(cè)試的測(cè)試碼。當(dāng)有許多不同的數(shù)據(jù)值,同時(shí)又希望使用這些值來(lái)執(zhí)行SUT(其中每個(gè)數(shù)據(jù)值都要執(zhí)行相同系列的步驟)時(shí),可以考慮使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試作為腳本測(cè)試的一部分。通常會(huì)發(fā)現(xiàn)這種相似性會(huì)隨著時(shí)間的推移而變化,因此要先重構(gòu)到參數(shù)化測(cè)試,然后重構(gòu)到數(shù)據(jù)驅(qū)動(dòng)測(cè)試。也可能在具有不同數(shù)據(jù)值的不同序列中安排一組標(biāo)準(zhǔn)步驟,和在遞增的表格測(cè)試(參見(jiàn)“參數(shù)化測(cè)試”)中一樣。這種方法具有最好的覆蓋率,同時(shí)需要維護(hù)的測(cè)試碼數(shù)量也最少,如果需要,還可以很方便地添加更多測(cè)試。決定是否使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試的另一個(gè)因素,是配置數(shù)據(jù)是不是硬編碼或驅(qū)動(dòng)要測(cè)試的行為。如果使用腳本測(cè)試自動(dòng)化用于數(shù)據(jù)驅(qū)動(dòng)行為的測(cè)試,當(dāng)配置數(shù)據(jù)改變時(shí),就必須更新測(cè)試程序。這種行為很不正常,因?yàn)樗硎?,?dāng)改變配置數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),必須將變更提交給源代碼庫(kù)SCM4 當(dāng)然,也應(yīng)該管理在版本控制庫(kù)里的測(cè)試數(shù)據(jù),但這個(gè)主題在另一本書(shū)中討論,詳情請(qǐng)參見(jiàn)RDb。讓測(cè)試變成數(shù)據(jù)驅(qū)動(dòng),對(duì)配置數(shù)據(jù)或元對(duì)象的變更就由對(duì)數(shù)據(jù)驅(qū)動(dòng)測(cè)試的變更驅(qū)動(dòng),這是一種更正常的關(guān)系。18.3.3 實(shí)現(xiàn)方式說(shuō)明實(shí)現(xiàn)方式選擇取決于是否使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試作為不同的測(cè)試策略或作為基于xUnit策略的一部分。使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試作為獨(dú)立的測(cè)試策略通常使用開(kāi)源工具(例如Fit)或商業(yè)記錄測(cè)試工具(例如QTP)。使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試作為腳本測(cè)試策略的一部分可能要實(shí)現(xiàn)xUnit內(nèi)的數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序。不管選擇哪種策略,如果可能,都應(yīng)該使用相應(yīng)的測(cè)試自動(dòng)化架構(gòu)。這樣做可以有效地將測(cè)試轉(zhuǎn)換為兩個(gè)部分:數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序和數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件。這兩個(gè)部分都應(yīng)該保持在版本控制之下,以便可以知道它們隨著時(shí)間推移如何演變,同時(shí)還允許收回所有錯(cuò)誤的變更。將數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件存儲(chǔ)在某種類(lèi)型的庫(kù)中至關(guān)重要,雖然這種概念與業(yè)務(wù)用戶(hù)不相關(guān)。給用戶(hù)提供數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件授權(quán)工具(例如FitNesse)可以讓這種操作透明,或者可以建立“用戶(hù)友好”庫(kù),例如剛好支持版本控制的文檔管理系統(tǒng)。作為持續(xù)集成過(guò)程的一部分運(yùn)行這些測(cè)試,以便確定曾經(jīng)通過(guò)的測(cè)試沒(méi)有突然失敗,這樣至關(guān)重要。沒(méi)有這樣做可能導(dǎo)致缺陷進(jìn)入未檢測(cè)到的軟件,一旦檢測(cè)到缺陷,就要付出更多努力來(lái)檢修。在持續(xù)集成過(guò)程中包含客戶(hù)測(cè)試要求能夠記錄通過(guò)的客戶(hù)測(cè)試,因?yàn)樘峤凰写a之前不能確保所有客戶(hù)測(cè)試都通過(guò)。一種選擇是保持兩組輸入文件,將通過(guò)的測(cè)試從“仍是紅色”文件遷移到“都是綠色”文件中,該文件作為自動(dòng)構(gòu)建過(guò)程一部分用于回歸測(cè)試。1. 變體:數(shù)據(jù)驅(qū)動(dòng)測(cè)試架構(gòu)(Fit)使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試作為測(cè)試策略時(shí),應(yīng)該考慮使用預(yù)制數(shù)據(jù)驅(qū)動(dòng)測(cè)試架構(gòu)。Ward Cunningham最初將Fit這種架構(gòu)作為在自動(dòng)化測(cè)試中包含業(yè)務(wù)用戶(hù)的方法。雖然Fit通常用于自動(dòng)化客戶(hù)測(cè)試,但如果測(cè)試數(shù)量授權(quán)構(gòu)建必需的夾具,它也可用于單元測(cè)試。Fit由兩部分組成:架構(gòu)和用戶(hù)創(chuàng)建的夾具。Fit架構(gòu)是通用數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序,該解釋程序讀取輸入文件并找出其中的所有表。它在每個(gè)表的左上單元查找?jiàn)A具類(lèi)名,然后搜索該類(lèi)的可執(zhí)行測(cè)試。當(dāng)它找到類(lèi)并讀取該表的行和列時(shí),它會(huì)創(chuàng)建該類(lèi)的實(shí)例并將控件傳遞給該實(shí)例??梢灾貙?xiě)架構(gòu)定義的方法來(lái)指定表中各單元出現(xiàn)的情況。因此,F(xiàn)it夾具是適配器,F(xiàn)it調(diào)用它來(lái)解釋數(shù)據(jù)表并調(diào)用SUT上的方法。Fit表也可以包含SUT的預(yù)期結(jié)果。Fit將指定的值與SUT返回的實(shí)際值進(jìn)行比較。然而,與xUnit中的斷言方法不一樣,F(xiàn)it在遇到第一個(gè)不匹配預(yù)期值的值時(shí)不會(huì)終止測(cè)試。相反,它給表中的各個(gè)單元涂上顏色,綠色單元表示與預(yù)期值相匹配的實(shí)際值,紅色單元表示錯(cuò)誤的或意料之外的值。使用Fit有幾個(gè)好處:q 與構(gòu)建自己的測(cè)試解釋程序GOF相比,要寫(xiě)的代碼更少。q 輸出對(duì)業(yè)務(wù)人員也有意義,而不只是對(duì)技術(shù)人員有意義。q 測(cè)試不會(huì)在遇到第一個(gè)失敗的斷言時(shí)停止。Fit可以用一種能夠很容易看出失敗模式的方法傳達(dá)多種失敗/錯(cuò)誤。q 照現(xiàn)在的樣子,有大量夾具類(lèi)型可以用來(lái)子類(lèi)化或使用。那么,為什么不在所有單元測(cè)試中都使用Fit取代xUnit呢?使用Fit的主要不足如下所述:q 在構(gòu)建Fit夾具之前,測(cè)試場(chǎng)景必須非常易于理解。因此需要將各種測(cè)試邏輯轉(zhuǎn)換為表格表示法,這不太合適,特別是對(duì)習(xí)慣于從過(guò)程思考的開(kāi)發(fā)人員而言尤其如此。它適合擁有可以為客戶(hù)測(cè)試寫(xiě)Fit夾具的測(cè)試者的情況,但這種方法不適合于真正的單元測(cè)試,除非測(cè)試者與開(kāi)發(fā)人員的比例為11。q 這些測(cè)試在每個(gè)測(cè)試中都要采用相同的SUT交互邏輯5 表格數(shù)據(jù)必須在夾具建立或執(zhí)行SUT階段注入SUT,或者在結(jié)果驗(yàn)證階段從SUT中檢索。要運(yùn)行幾種不同類(lèi)型的測(cè)試,很可能就必須為每種類(lèi)型的測(cè)試構(gòu)建一個(gè)或多個(gè)不同的夾具。構(gòu)建新的夾具通常比寫(xiě)一些測(cè)試方法更復(fù)雜。雖然現(xiàn)在有許多不同夾具類(lèi)型可以用來(lái)子類(lèi)化或使用,但這種使用方法與要求開(kāi)發(fā)人員學(xué)習(xí)以便完成任務(wù)的方法不同。盡管這樣,也不是所有單元測(cè)試都要使用Fit來(lái)進(jìn)行自動(dòng)化。q Fit測(cè)試通常沒(méi)有集成到開(kāi)發(fā)人員通過(guò)xUnit運(yùn)行的回歸測(cè)試中。相反,這些測(cè)試必須單獨(dú)運(yùn)行,這樣每次檢入時(shí)它們有可能不運(yùn)行。有些團(tuán)隊(duì)將Fit測(cè)試作為其持續(xù)集成構(gòu)建過(guò)程的一部分,以部分解決這個(gè)問(wèn)題。有的團(tuán)隊(duì)報(bào)告已經(jīng)擁有輔助“客戶(hù)”構(gòu)建服務(wù)或運(yùn)行所有客戶(hù)測(cè)試的服務(wù)器。當(dāng)然,這些問(wèn)題都是可以克服的。總的來(lái)說(shuō),xUnit架構(gòu)比Fit架構(gòu)更適合于單元測(cè)試;Fit架構(gòu)比xUnit架構(gòu)更適合于客戶(hù)測(cè)試。2. 變體:天真xUnit測(cè)試解釋程序當(dāng)需要作為基于xUnit的腳本測(cè)試策略的一部分運(yùn)行的數(shù)據(jù)驅(qū)動(dòng)測(cè)試的數(shù)量較小時(shí),最簡(jiǎn)單的實(shí)現(xiàn)方式是寫(xiě)包含循環(huán)的測(cè)試方法,該循環(huán)從文件讀取一組輸入數(shù)據(jù)值以及預(yù)期結(jié)果。這與將單個(gè)參數(shù)化測(cè)試及其所有調(diào)用者轉(zhuǎn)換為表格測(cè)試(參見(jiàn)“參數(shù)化測(cè)試”)具有相同意義。和表格測(cè)試一樣,這種構(gòu)建數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序的方法會(huì)產(chǎn)生具有許多斷言的單個(gè)測(cè)試用例對(duì)象。它有以下幾種結(jié)果:q 整組數(shù)據(jù)驅(qū)動(dòng)測(cè)試將計(jì)算為單個(gè)測(cè)試。因此,將一組參數(shù)化測(cè)試轉(zhuǎn)換為單個(gè)數(shù)據(jù)驅(qū)動(dòng)測(cè)試會(huì)減少執(zhí)行的測(cè)試數(shù)量。q 當(dāng)遇到第一個(gè)失敗或錯(cuò)誤時(shí)會(huì)停止執(zhí)行數(shù)據(jù)驅(qū)動(dòng)測(cè)試。因此,遺漏了許多缺陷定位。有些xUnit變體允許指定失敗的斷言不中止測(cè)試方法的執(zhí)行。q 需要確保出現(xiàn)失敗時(shí),斷言失敗能說(shuō)出正在執(zhí)行哪個(gè)子測(cè)試。在循環(huán)中包含try/catch語(yǔ)句,同時(shí)包含測(cè)試邏輯然后繼續(xù)代碼執(zhí)行,這樣可以解決最后兩個(gè)問(wèn)題。然而,仍然需要能夠以一種有意義的方法報(bào)告測(cè)試結(jié)果(例如,“失敗子測(cè)試1、3和6以及”)。要更方便地?cái)U(kuò)充數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序來(lái)處理相同數(shù)據(jù)文件中幾種不同類(lèi)型的測(cè)試,可以包含“動(dòng)詞”或“動(dòng)作單詞”作為數(shù)據(jù)文件中各條目的一部分。解釋程序可以依據(jù)動(dòng)作單詞分派給不同的參數(shù)化測(cè)試。3. 變體:測(cè)試套件對(duì)象生成器讓測(cè)試套件工廠(chǎng)(參見(jiàn)“測(cè)試枚舉”)上的suite方法偽造與測(cè)試發(fā)現(xiàn)內(nèi)置機(jī)制相同的測(cè)試套件對(duì)象結(jié)構(gòu),就可以避免與天真xUnit測(cè)試解釋程序相關(guān)的“第一次失敗時(shí)就停止”這個(gè)問(wèn)題。要這樣做,可以為數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件中的每個(gè)條目構(gòu)建測(cè)試用例對(duì)象,然后用特定測(cè)試的測(cè)試數(shù)據(jù)初始化每個(gè)對(duì)象6 這與xUnit的內(nèi)置測(cè)試方法發(fā)現(xiàn)(參見(jiàn)“測(cè)試發(fā)現(xiàn)”)機(jī)制的運(yùn)行原理類(lèi)似,但后者接受的是測(cè)試數(shù)據(jù)和測(cè)試方法名稱(chēng)。構(gòu)建測(cè)試套件時(shí),該對(duì)象知道如何執(zhí)行具有加載數(shù)據(jù)的參數(shù)化測(cè)試。這樣即使第一個(gè)測(cè)試用例對(duì)象遇到斷言失敗,也可以確保數(shù)據(jù)驅(qū)動(dòng)測(cè)試能夠繼續(xù)執(zhí)行。因此,可以讓測(cè)試運(yùn)行器以正常方式計(jì)算測(cè)試、錯(cuò)誤及失敗。4. 變體:測(cè)試套件對(duì)象模擬器構(gòu)建測(cè)試套件對(duì)象的方法之一是創(chuàng)建像一個(gè)對(duì)象那樣運(yùn)行的測(cè)試用例對(duì)象。要求運(yùn)行時(shí)該對(duì)象會(huì)閱讀數(shù)據(jù)驅(qū)動(dòng)測(cè)試文件并重新執(zhí)行所有測(cè)試。它必須捕獲參數(shù)化測(cè)試拋出的所有異常,然后繼續(xù)執(zhí)行后面的測(cè)試。完成后,測(cè)試用例對(duì)象必須給測(cè)試運(yùn)行器報(bào)告測(cè)試、失敗和錯(cuò)誤的準(zhǔn)確數(shù)量。它也要實(shí)現(xiàn)測(cè)試運(yùn)行器依賴(lài)的標(biāo)準(zhǔn)測(cè)試接口上的其他方法,例如返回“套件”中測(cè)試的數(shù)量、返回套件中每個(gè)測(cè)試的名稱(chēng)和狀態(tài)(關(guān)于圖形測(cè)試樹(shù)探測(cè)器,參見(jiàn)“測(cè)試運(yùn)行器”)。18.3.4 啟發(fā)示例假設(shè)有一組測(cè)試如下所示:def test_extrefsourceXml = expectedHtml = abcgenerateAndVerifyHtml(sourceXml,expectedHtml,)enddef test_testterm_normalsourceXml = expectedHtml = abcgenerateAndVerifyHtml(sourceXml,expectedHtml,)enddef test_testterm_pluralsourceXml = expectedHtml = abcsgenerateAndVerifyHtml(sourceXml,expectedHtml,)end如下定義參數(shù)化測(cè)試可以簡(jiǎn)化這些測(cè)試:def generateAndVerifyHtml( sourceXml, expectedHtml,message, &block) mockFile = MockFile.new sourceXml.delete!(t)handler = setupHandler(sourceXml, mockFile )block.call unless block = = nil handler.printBodyContents actual_html = mockFile.output assert_equal_html(expectedHtml, actual_html, message + html output) actual_html end這些測(cè)試存在的主要問(wèn)題是,這些測(cè)試還是用代碼寫(xiě)的,而實(shí)際上它們之間的唯一不同是用作輸入的數(shù)據(jù)。18.3.5 重構(gòu)說(shuō)明當(dāng)然,解決方案是將參數(shù)化測(cè)試的公共邏輯提取到數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序中,并將所有參數(shù)集合到任何人都可以編輯的單個(gè)數(shù)據(jù)文件中。需要寫(xiě)“主”測(cè)試,它知道從哪個(gè)文件閱讀測(cè)試數(shù)據(jù),知道閱讀和分析測(cè)試文件的一些邏輯。該邏輯可以調(diào)用現(xiàn)有的參數(shù)化測(cè)試邏輯,并讓xUnit記錄測(cè)試執(zhí)行統(tǒng)計(jì)。18.3.6 示例:使用XML數(shù)據(jù)文件的xUnit數(shù)據(jù)驅(qū)動(dòng)測(cè)試本示例中,使用XML形式文件。每個(gè)測(cè)試都由test元素組成,它有三個(gè)主要部分:q 告訴數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序要運(yùn)行哪種測(cè)試邏輯的動(dòng)作(例如,crossref)。q 傳遞給SUT的輸入,這里是sourceXml元素q 希望SUT(在expectedHtml元素中)生成的HTML這三個(gè)部分包裝在testsuite元素里: crossref abc crossref abc crossref abcs 所有擁有XML編輯器的人都可以編輯這個(gè)XML文件,而不必?fù)?dān)心引入測(cè)試邏輯錯(cuò)誤。數(shù)據(jù)驅(qū)動(dòng)測(cè)試解釋程序封裝用來(lái)驗(yàn)證預(yù)期結(jié)果的所有邏輯,使用的方法與參數(shù)化測(cè)試使用的方法相同。出于查看的目的,通過(guò)定義樣式表對(duì)用戶(hù)隱藏了XML的結(jié)構(gòu)。另外,許多XML編輯器會(huì)將XML轉(zhuǎn)換為基于表格的輸入以簡(jiǎn)化編輯。為了避免處理操作XML的復(fù)雜性,解釋程序也可以使用CSV文件作為輸入。18.3.7 示例:使用CSV輸入文件的xUnit數(shù)據(jù)驅(qū)動(dòng)測(cè)試使用CSV文件,前面示例中的測(cè)試則如下所示:ID, Action, SourceXml, ExpectedHtml Extref,crossref,abc TTerm,crossref,abc TTerms,crossref,abcs這個(gè)解釋程序相對(duì)簡(jiǎn)單,并且建立在為參數(shù)化測(cè)試而開(kāi)發(fā)的邏輯之上。它閱讀CSV文件,并使用Ruby的split函數(shù)分析各行。def test_crossrefexecuteDataDrivenTest CrossrefHandlerTest.txt enddef executeDataDrivenTest filename dataFile = File.open(filename) dataFile.each_line do | line |desc, action, part2 = line.split(,) sourceXml, expectedHtml, leftOver = part2.split(,) if crossref= =action.stripgenerateAndVerifyHtml sourceXml, expectedHtml, desc else # new verbs go before here as elsifsreport_error( unknown action + action.strip ) end end end除非將generateAndVerifyHtml的實(shí)現(xiàn)方式改變?yōu)椴东@斷言失敗和增加失敗計(jì)數(shù)器,這種數(shù)據(jù)驅(qū)動(dòng)測(cè)試才會(huì)在遇到第一個(gè)失敗斷言時(shí)停止執(zhí)行。而回歸測(cè)試可以接受這種行為,雖然它沒(méi)有提供很好的缺陷定位。18.3.8 示例:使用Fit架構(gòu)的數(shù)據(jù)驅(qū)動(dòng)測(cè)試如果要進(jìn)一步控制用戶(hù)的行為,可以創(chuàng)建Fit“列夾具”,其中有id、action、source XML和expected Html()各列,讓用戶(hù)編輯HTML Web頁(yè)面(如表18-1所示)。表18-1 使用Fit架構(gòu)構(gòu)建的數(shù)據(jù)驅(qū)動(dòng)測(cè)試Com.xunitpattens.fit.CrossrefHandlerFixtureidactionsource XMLexpected HtrnlOExtrefcrossref?abc?TestTermcrossref?abc?TestTerm Pluralcrossref?abcs?使用Fit時(shí),測(cè)試解釋程序是測(cè)試專(zhuān)用的Fit夾具類(lèi)擴(kuò)充的Fit架構(gòu):public class CrossrefHandlerFixture extends ColumnFixture / Input columns public String id;public String action; public String sourceXML;/ Output columnspublic String expectedHtml() return generateHtml(sourceXML); Fit架構(gòu)依據(jù)列標(biāo)題,為Fit表中每一行的每一個(gè)單元調(diào)用這種夾具類(lèi)的方法。簡(jiǎn)單的名稱(chēng)解釋為夾具的實(shí)例變量(例如id、source XML)。以()結(jié)尾的列名稱(chēng)表示Fit調(diào)用的函數(shù),然后將其結(jié)果與單元格內(nèi)容作比較。結(jié)果輸出如表18-2所示。這種帶陰影的表格非常便于總結(jié)運(yùn)行測(cè)試文件后的結(jié)果。表18-2 執(zhí)行Fit測(cè)試的結(jié)果com. xunitpattems.fit.CrossrefHandlerFixtureidActionsource XMLexpected HtrnlQextrefcrossref?abc?TestTermcrossref?abc?TestTerm Pluralcrossref?abcs? 預(yù)期?abc? 實(shí)際18.4 測(cè)試自動(dòng)化架構(gòu) 如何讓編寫(xiě)和運(yùn)行不同人寫(xiě)的測(cè)試更方便?可以使用架構(gòu),該架構(gòu)提供運(yùn)行測(cè)試邏輯所需的所有機(jī)制,因此測(cè)試作者只需要提供測(cè)試專(zhuān)用邏輯就行了。寫(xiě)和運(yùn)行自動(dòng)化測(cè)試包含幾個(gè)步驟,但對(duì)于每個(gè)測(cè)試而言其中許多步驟都相同。如果每個(gè)測(cè)試都必須包含這些步驟的實(shí)現(xiàn)方式,寫(xiě)自動(dòng)化測(cè)試就變得很單調(diào)、很耗時(shí)間、容易出錯(cuò)并且成本很高。使用測(cè)試自動(dòng)化架構(gòu)是一種最小化寫(xiě)全自動(dòng)化測(cè)試努力的方法。圖18-4 測(cè)試自動(dòng)化架構(gòu)示意圖18.4.1 運(yùn)行原理可以構(gòu)建一種架構(gòu),它實(shí)現(xiàn)運(yùn)行測(cè)試套件和記錄結(jié)果所需的所有機(jī)制。這些機(jī)制能夠找出單個(gè)測(cè)試、將它們組合為測(cè)試套件、依次執(zhí)行每個(gè)測(cè)試、驗(yàn)證預(yù)期結(jié)果、收集和報(bào)告測(cè)試失敗或錯(cuò)誤以及發(fā)生失敗或錯(cuò)誤時(shí)能夠清除它們。這種架構(gòu)提供了一種方法來(lái)插入并運(yùn)行測(cè)試自動(dòng)化人員寫(xiě)的測(cè)試專(zhuān)用行為。18.4.2 這樣做的原因構(gòu)建可重復(fù)且健壯的全自動(dòng)化測(cè)試,該過(guò)程比寫(xiě)調(diào)用SUT的測(cè)試腳本更復(fù)雜。需要應(yīng)付成功情況和錯(cuò)誤情況,以及預(yù)期結(jié)果與意外結(jié)果。需要建立和拆卸測(cè)試夾具,需要指定運(yùn)行哪個(gè)(哪些)測(cè)試,運(yùn)行一組測(cè)試后還要報(bào)告結(jié)果。構(gòu)建全自動(dòng)化測(cè)試需要的努力可能是測(cè)試自動(dòng)化的嚴(yán)重阻礙。只提供實(shí)現(xiàn)最常見(jiàn)功能性的架構(gòu),可
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網(wǎng)絡(luò)商業(yè)分析與決策能力測(cè)試試卷及答案
- 2025年圖書(shū)情報(bào)專(zhuān)業(yè)畢業(yè)生就業(yè)能力測(cè)試題及答案
- 2025年社區(qū)服務(wù)管理專(zhuān)業(yè)能力評(píng)估試題及答案
- 2025年農(nóng)業(yè)經(jīng)濟(jì)與管理考試模擬試卷及答案
- 2025年臨床藥學(xué)研究生入學(xué)考試試題及答案
- 2025年建筑工程師資格考試?yán)碚撛囶}及答案
- 2025年海洋科學(xué)專(zhuān)業(yè)入學(xué)考試卷及答案
- 英語(yǔ)閱讀中的詞匯推測(cè)技巧:高二英語(yǔ)教案
- 2021學(xué)年上海華二紫竹高一(下)期中英語(yǔ)試題及答案
- 經(jīng)典名篇中的情感與思考:高中語(yǔ)文作文教學(xué)
- 四川省村規(guī)劃編制技術(shù)導(dǎo)則試行
- 2025年云南昆明市祿勸國(guó)有資本投資開(kāi)發(fā)集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 《深圳市建設(shè)工程消防設(shè)計(jì)審查指引》(辦公類(lèi))
- 案例2 進(jìn)化醫(yī)療-跨物種腫瘤基因治療的開(kāi)拓者
- 小學(xué)數(shù)學(xué)二年級(jí)第二學(xué)期口算計(jì)算共3040道題
- 化工設(shè)備機(jī)械基礎(chǔ)習(xí)題及參考答案
- 山東師范大學(xué)《高級(jí)英語(yǔ)(二)》2021-2022學(xué)年第一學(xué)期期末試卷
- 無(wú)人駕駛貨車(chē)行業(yè)市場(chǎng)突圍建議書(shū)
- 財(cái)務(wù)總監(jiān)招聘筆試題及解答(某大型國(guó)企)2025年
- 2024年10月自考14540藥理學(xué)本試題及答案含評(píng)分參考
- 醫(yī)療設(shè)備驗(yàn)收方案及標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論