版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Selenium自動化測試用例設(shè)計(jì)注意事項(xiàng)UI元素映射元素驗(yàn)證等待加載日志記錄結(jié)果收集Selenium自動化測試用例設(shè)計(jì)注意事項(xiàng)(一)自動化測試設(shè)計(jì)簡介我們在本章提供的信息,對自動化測試領(lǐng)域的新人和經(jīng)驗(yàn)豐富的老手都是有用的。本篇中描述最常見 的自動化測試類型,還描述了可以增強(qiáng)您的自動化測試套件可維護(hù)性和擴(kuò)展性的“設(shè)計(jì)模式”。還沒有使用這些技術(shù)的、有經(jīng)驗(yàn)的自動化測試工程師會對這些技術(shù)更加感興趣。測試類型您應(yīng)該測試應(yīng)用程序中的哪些部分這取決于您的項(xiàng)目的各種影響因素:用戶的期望,時(shí)間期限,項(xiàng)目 經(jīng)理設(shè)置的優(yōu)先事項(xiàng)等等。但是,一旦項(xiàng)目邊界定義完成,作為測試工程師,你必須做出要測試什么的決 定。為了對W
2、eb應(yīng)用的測試類型進(jìn)行分類,我們在這里創(chuàng)建了一些術(shù)語。這些術(shù)語并不意味著標(biāo)準(zhǔn),但是 這些概念對web應(yīng)用測試來說非常典型。測試靜態(tài)內(nèi)容靜態(tài)內(nèi)容測試是最簡單的測試,用于驗(yàn)證靜態(tài)的、不變化的UI元素的存在性。例如:- 每個(gè)頁面都有其預(yù)期的頁面標(biāo)題這可以用來驗(yàn)證鏈接指向一個(gè)預(yù)期的頁面。- 應(yīng)用程序的主頁包含一個(gè)應(yīng)該在頁面頂部的圖片嗎f網(wǎng)站的每一個(gè)頁面是否都包含一個(gè)頁腳區(qū)域來顯示公司的聯(lián)系方式,隱私政策,以及商標(biāo)信息- 每一頁的標(biāo)題文本都使用的 <h1>標(biāo)簽嗎每個(gè)頁面有正確的頭部文本內(nèi)嗎您可能需要或也可能不需要對頁面內(nèi)容進(jìn)行自動化測試。如果您的網(wǎng)頁內(nèi)容是不易受到影響手工對內(nèi)容進(jìn)行測試就足夠
3、了。如果,例如您的應(yīng)用文件的位置被移動,內(nèi)容測試就非常有價(jià)值。 測試鏈接Web站點(diǎn)的一個(gè)常見錯(cuò)誤為的失效的鏈接或鏈接指向無效頁。鏈接測試涉及點(diǎn)各個(gè)鏈接和驗(yàn)證預(yù)期的 頁面是否存在。如果靜態(tài)鏈接不經(jīng)常更改,手動測試就足夠。但是,如果你的網(wǎng)頁設(shè)計(jì)師經(jīng)常改變鏈接, 或者文件不時(shí)被重定向,鏈接測試應(yīng)該實(shí)現(xiàn)自動化。 功能測試在您的應(yīng)用程序中,需要測試應(yīng)用的特定功能,需要一些類型的用戶輸入,并返回某種類型的結(jié)果。通常一個(gè)功能測試將涉及多個(gè)頁面,一個(gè)基于表單的輸入頁面,其中包含若干輸入字段、提交“和”取消“操作,以及一個(gè)或多個(gè)響應(yīng)頁面。用戶輸入可以通過文本輸入域,復(fù)選框,下拉列表,或任何其他的瀏 覽器所支持的
4、輸入。功能測試通常是需要自動化測試的最復(fù)雜的測試類型,但也通常是最重要的。典型的測試是登錄,注 冊網(wǎng)站賬戶,用戶帳戶操作,帳戶設(shè)置變化,復(fù)雜的數(shù)據(jù)檢索操作等等。功能測試通常對應(yīng)著您的應(yīng)用程 序的描述應(yīng)用特性或設(shè)計(jì)的使用場景。 測試動態(tài)元素通常一個(gè)網(wǎng)頁元素都有一個(gè)唯一的標(biāo)識符,用于唯一地定位該網(wǎng)頁中的元素。通常情況下,唯一標(biāo)識符用HTM麻記的id'屬性或name屬性來實(shí) 現(xiàn)。這些標(biāo)識符可以是一個(gè)靜態(tài)的,即不變的、字符串常量。它們也可以是動態(tài)生產(chǎn)值,在每個(gè)頁面實(shí)例上都是變化的。例如,有些Web服務(wù)器可能在一個(gè)頁面實(shí)例上命名所顯示的文件為 doc3861,并在其他頁面實(shí)力上顯示為doc614
5、8,這取決于用戶在檢索的文檔。驗(yàn)證文件是否存在的測試腳本,可能無法找到不變的識別碼來定位該文件。通常情況下,具有變化的標(biāo)識符的動態(tài)元素存在于基于用戶操作的結(jié)果頁面上,然而,顯然這取決于Web應(yīng)用程序。下面是一個(gè)例子。<input id="addForm:_ID74:_ID75:0:_ID79:0:checkBox" type="checkbox" value="true" />這是一個(gè)HTM麻記的復(fù)選框,其ID (addForm:_ID74:_ID75:0:_ID79:0:checkBox)是一個(gè)動態(tài)生成的值。這個(gè)頁面下次
6、被打開時(shí),復(fù)選框的ID將可能是一個(gè)不同的值。 Ajax的測試Ajax是一種支持動態(tài)改變用戶界面元素的技術(shù)。頁面元素可以動態(tài)更改,但不需要瀏覽器重新載入頁面,如動畫,RSS源,其他實(shí)時(shí)數(shù)據(jù)更新等等。Ajax有不計(jì)其數(shù)的更新網(wǎng)頁上的元素的方法。但是了解AJAX的最簡單的方式,可以這樣想,在 Ajax驅(qū)動的應(yīng)用程序中,數(shù)據(jù)可以從應(yīng)用服務(wù)器檢索,然 后顯示 在頁面上,而不需重新加載整個(gè)頁面。只有一小部分的頁面,或者只有元素本身被重新加載。 驗(yàn)證結(jié)果 斷言assert與驗(yàn)證verify什么時(shí)候使用斷言命令,什么時(shí)候使用驗(yàn)證命令這取決于你。差別在于在檢查失敗時(shí),你想讓測試程 序做什么。你想讓測試終止,還是
7、想繼續(xù)而只簡單地記錄檢查失敗這需要權(quán)衡。如果您使用的斷言,測試將在檢查失敗時(shí)停止,并不運(yùn)行任何后續(xù)的檢查。有時(shí)候,也 許是經(jīng)常的,這是你想要的。如果測試失敗,你會立刻知道測試沒有通過。TestNG和JUnit等測試引擎提供在開發(fā)測試腳本時(shí)常用的插件,可以方便地標(biāo)記那些測試為失敗的測試。優(yōu)點(diǎn):你可以直截了當(dāng)?shù)乜?到檢查是否通過。缺點(diǎn):當(dāng)檢查失敗,后續(xù)的檢查不會被執(zhí)行,無法收集那些檢查的結(jié)果狀態(tài)。相比之下,驗(yàn)證命令將不會終止測試。如果您的測試只使用驗(yàn)證,可以得到保證是一假設(shè)沒有意外的異常一測試會被執(zhí)行完畢,而不管是否發(fā)現(xiàn)缺陷。缺點(diǎn):你必須做更多的工作,以檢查您的測試結(jié)果。也就是說,你不會從Test
8、NG和JUnit得到反饋。您將需要在打印輸出控制臺或日志文件中查看結(jié)果。每次運(yùn)行測 試,你都需要花時(shí)間去查看結(jié)果輸出。如果您運(yùn)行的是數(shù)以百計(jì)的測試,每個(gè)都有它自己的日志,這 將耗費(fèi)時(shí)間。及時(shí)得到反饋會更合適,因此斷言通常比驗(yàn)證更常使用。 權(quán)衡:assertTextPresent , assertElementPresent 和 assertText您現(xiàn)在應(yīng)該熟悉這些命令及使用它們的機(jī)制。如果沒有,請參閱相關(guān)章節(jié)。在構(gòu)建你的測試時(shí),你需 要決定 只檢查在頁面上的文本嗎(verify/ assertTextPresent ) 只檢查是否在頁面上存在HTM玩素嗎即文本,圖像,或其他沒被檢查的內(nèi)容,只
9、要和HTM麻記相關(guān)。(verify/ assertElementPresent ) 需要同時(shí)檢查元素和它的文本內(nèi)容( verify/ assertText )沒有正確的答案。這取決于您的測試要求。如有疑問,請使用 assertText ,因?yàn)檫@是最嚴(yán)格的類型檢 查點(diǎn)。您可以隨后更改它,但至少你不會遺漏任何潛在的故障。Verify/ assertText是最特殊的測試類型。HTM玩素(標(biāo)簽)或文本的不符合都會導(dǎo)致測試失敗。也許你的網(wǎng)頁設(shè)計(jì)師經(jīng)常改變頁面面,而你不希望在他們改變頁面時(shí),你的測試失敗,因?yàn)檫@是期望中的周期性變更。但是,假如你仍然需要檢查的頁面上的東西,如段落、標(biāo)題文本或圖像。在這種情
10、況下,您 可以使用verify/ assertElementPresent 。這將確保一個(gè)特定類型的元素存在(如果使用 XPath ,可以確 保它相對頁面內(nèi)其他對象的存在)。但你不關(guān)心的內(nèi)容是什么,你只關(guān)心某個(gè)特定的元素,比方說,一個(gè)圖片在一個(gè)特定的位置。隨著時(shí)間的推移和經(jīng)驗(yàn)的積累,如何決定使用還是非常簡單的。定位元素的策略選擇一個(gè)定位策略有多種方式選擇頁面上的對象。但面對這些定位類型,如何權(quán)衡呢回想一下,我們定位一個(gè)對象的方A:- 元素的ID- 元素的 name屬性fXPath語句- 通過一個(gè)鏈接的文本- 文檔對象模型(DOM使用元素的ID或name定位符,在測試執(zhí)行方面來說, 是最有效的方
11、式。也讓你的測試代碼更具可讀 性,如果在頁面源代碼中的 ID或name屬性被友好命 名的話。XPath語句需要更長的時(shí)間來處理,因?yàn)闉g 覽器必須運(yùn)行它的 XPath處理器。在Internet Explorer 7, XPath出了名的慢。使用鏈接的文本進(jìn)行定位是很方便的,并運(yùn)行起來也不錯(cuò)。這種技術(shù)只適用于鏈接。另外,如果鏈接 文本很可能會經(jīng)常改變,使用 <a>標(biāo)簽定位元素將是更好的選擇。不過,有時(shí)你必須使用 XPath定位。如果一個(gè)頁面元素沒有一個(gè)ID或者name屬性,除了 XPath定位沒得選擇。(DOMt位器不再普遍使用,因?yàn)?,XPath可以做得更好。DOMt位器只簡單地為遺留
12、測試而存在)。相對使用ID或name屬性定位,使用 XPath進(jìn)行定位有一個(gè)獨(dú)特的優(yōu)勢。使用 XPath (DOM中,你 可以找到頁面上相對于其他對象的一個(gè)對象。例如,如果有一個(gè)鏈接必須存在 <div>標(biāo)簽里的第二個(gè)段落內(nèi),您可以使用XPath進(jìn)行定位。使用ID和name屬性定位,你只能得出它們 存在指定的頁面,而不知具 體的頁面位置。如果你必須測試顯示公司標(biāo)志的圖像出現(xiàn)在頁面頂部的頭部分,XPath定位可能是更好的選擇。- 定位動態(tài)元素正如前面測試類型部分所述,動態(tài)元素的頁面標(biāo)識在不同的頁面實(shí)例上市不同的。例如,<a class="button" id=
13、"adminHomeForm" onclick="return oamSubmitForm('adminHomeForm','adminHomeForm:_ID38');" href="#">View Archived Allocation Events</a>這個(gè)HTMLI苗標(biāo)記定義了一個(gè)ID屬性為"adminHomeFormi按鈕。和大部分 HTM麻簽相比,這是一個(gè)相 當(dāng)復(fù)雜的錨標(biāo)記,但它仍然是一個(gè)靜態(tài)標(biāo)簽。每次頁面被瀏覽器加載時(shí),HTML各保持不變。它的ID在所有的頁面
14、實(shí)例里保持不變,也就是說,頁面被展示時(shí),這個(gè) UI元素總是有同樣的標(biāo)識符。所 以,點(diǎn)擊此 按鈕的測試腳本(Selenium Server )如下所示:("adminHomeForm");然而,你的應(yīng)用程序,可能生成動態(tài)的HTM麻識符。在不同的網(wǎng)頁實(shí)例中,標(biāo)識符發(fā)生改變。例如,一個(gè)動態(tài)的頁面的 HTM玩素可能會是這個(gè)樣子:<input id="addForm:_ID74:_ID75:0:_ID79:0:checkBox" type="checkbox" name="addForm:_ID74:_ID75:0:_ID7 9
15、:0:checkBox" value="true" />這是一個(gè)復(fù)選框,id和name屬性都是addForm:_ID74:_ID75:0:_ID79:0:checkBox 。在這種情況下, 使用標(biāo)準(zhǔn)的定位,測試腳本應(yīng)該是這樣子的:("addForm:_ID74:_ID75:0:_ID79:0:checkBox");對于動態(tài)生成的標(biāo)識符,這種做法行不通。下一次頁面加載時(shí),標(biāo)識符將是一個(gè)不同的值,執(zhí)行上述腳本會遇至| "element not found ” 錯(cuò)誤。要更正該問題,一個(gè)簡單的解決辦法是使用XPath定位替代ID定位器。
16、因此,對于該復(fù)選框,可以簡單地使用("for(String checkboxid:checkboxids) if("addForm") (expectedText);如果頁面上只有一個(gè)復(fù)選框的ID文本為"expectedText "時(shí),這種方法工作。定位Ajax元素定位、驗(yàn)證 AJAX元素的最好的方式是使用Selenium webdriver 的API,它專門解決 Selenium 測試AJAX元素的一些限制。在Selenim中,可以使用 waitfor ()方法來等待一個(gè)頁面元素變得可用。該參數(shù)是一個(gè)WebDriver用來實(shí)現(xiàn)定位的By對象。
17、這是 WebDriver的章節(jié)中詳細(xì)解釋。在Selenium (Selenium-RC的)中,要做到這一點(diǎn)需要編寫更多的編碼,但它并不難。首先檢查元素,如果它存在,等待預(yù)定義的時(shí)間段,然后再重新檢查。這在循環(huán)內(nèi)執(zhí)行,如果超過一個(gè)預(yù)定的超時(shí),元素 不存在則終止循環(huán)。讓我們考慮頁面上實(shí)現(xiàn) AJAX效果的一個(gè)鏈接(鏈接=ajaxLink ),可以使用循環(huán)處理:for (int second = 0; second+) if (second >= 60) break;try if ("link=ajaxLink") break; catch (Exception e)
18、 (1000);這當(dāng)然不是唯一的解決辦法。Ajax是一個(gè)共同的話題,在用戶論壇上,查找一下之前的討論,看看別人是如何做的。封裝Selenium調(diào)用與任何編程一樣,你需要使用工具函數(shù)來處理在測試代碼中重復(fù)的函數(shù)。避免重復(fù)的方法之一是封裝 常用的Selenium方法的調(diào)用。例如,測試時(shí)經(jīng)常點(diǎn)擊頁面上的元素,等待頁面加載。(elementLocator);(waitPeriod);為了不重復(fù)上述代碼,你可以寫一個(gè)包裝方法實(shí)現(xiàn)這兩個(gè)功能。/* Clicks and Waits for page to load.* param elementLocator* param waitPeriod*/ pub
19、lic void clickAndWait(String elementLocator, String waitPeriod) (elementLocator);(waitPeriod);判斷元素存在的“安全操作”另一種常見的封裝Selenium的方法,在執(zhí)行進(jìn)一步操作前檢查頁面上的元素存在性。這有時(shí)被稱為“安全操作”。例如,下面的方法可用于實(shí)現(xiàn)一個(gè)依賴期望的元素存在的安全操作。/* Selenum-RC - Clicks on element only if it is available on page.* param elementLocator*/ public void safeCl
20、ick(String elementLocator) if(elementLocator) (elementLocator); else * param elementLocator*/ public void safeClick(String elementLocator) WebElement webElement = getDriver().findElement(elementLocator);if(webElement != null) (elementLocator); else etUrl();在第二個(gè)例子中,XXXX方法是一個(gè)占位符,可以用元素定位方法進(jìn)行替換。使用安全方法取決
21、于測試開發(fā)人員的決定。因此,如果測試需要繼續(xù)執(zhí)行,即使知道頁面上一些元素沒有發(fā)現(xiàn),這時(shí)可以使用安全方法,并發(fā)送一條缺少元素的消息到日志文件。這基本上等于實(shí)現(xiàn)了帶報(bào)告機(jī)制的驗(yàn)證,而不是一個(gè)失敗就終止執(zhí)行的斷言。但是,如果元素必須在頁面上出現(xiàn),以便能夠執(zhí)行進(jìn)一 步的操作(如一 個(gè)門戶網(wǎng)站主頁上的登錄按鈕),這時(shí)安全方法技術(shù)不應(yīng)該被使用。Selenium自動化測試用例設(shè)計(jì)注意事項(xiàng)(二)UI映射一個(gè)UI映射是一種機(jī)制,它存儲所有的定位器的測試套件在一個(gè)地方,方便修改UI元素的路徑標(biāo)識符或改變在AUT測試腳本,然后使用 UI地圖定位以被測試的元件?;旧?,UI地圖是一個(gè)存儲庫的測試腳本對象,對應(yīng)于被測試
22、的應(yīng)用程序的UI元素。是什么讓一個(gè)UI地圖有幫助嗎其主要目的是測試腳本的管理更加容易。當(dāng)定位需要編輯,有一個(gè)中央位置輕松地找到對象,而不是通過搜索測試腳本代碼。此外,它允許改變的標(biāo)識符在一個(gè)地方,而不是在 多個(gè)地方,以使更改在測試腳本,或?yàn)榇耸?,在多個(gè)測試腳本??傊?,一個(gè)UI地圖有兩個(gè)顯著的優(yōu)點(diǎn)。 UI對象使用一個(gè)集中的位置,而不是讓他們分散在整個(gè)腳本。這使得腳本維護(hù)更高效。神秘的HTM麻識符和名稱可以被賦予了更多的人類可讀的名字,提高測試腳本的可讀性??紤]下面很難理解的測試代碼(Java語言)。public void testNew() throws Exception ("log
23、inForm:tbUsername", "xxxxxxxx");("loginForm:btnLogin");("adminHomeForm:_activitynew");("30000");("addEditEventForm:_IDcancel");("30000");("adminHomeForm:_activityold");("30000");該代碼很難被那些不熟悉待測應(yīng)用(AUT頁面源代碼的人理解。即使是待測應(yīng)用的
24、固定用戶可能也很難理解這段腳本代碼的作用。一個(gè)更好的腳本可能是:public void testNew() throws Exception ,"xxxxxxxx");("30000");("30000");("30000");使用備注和空格換行、再加上UI映射標(biāo)識,下面的代碼更加易讀:public void testNew() throws Exception ,"xxxxxxxx");("30000");("30000");("30000&q
25、uot;);有多種方法可以實(shí)現(xiàn)UI映射??梢詣?chuàng)建一個(gè)類或結(jié)構(gòu)體來存儲字符串變量,每個(gè)變量存儲一個(gè)定位信息?;蛘?,使用一個(gè)文本文件來存儲鍵值對。在 Java中,一個(gè)包含鍵值對的屬性 property文件可能是最 好的方法??紤]如下屬性文件,為上述代碼例子中的UI元素指定了 “別名”:=loginForm:tbUsername=loginForm:btnLogin=adminHomeForm:_activitynew=addEditEventForm:_IDcancel=adminHomeForm:_activityold其中定位信息還是指向頁面的 HTMLM象,但我們在測試腳本和 UI元素之間引
26、入一層抽象層。測試類 從屬性文件中讀取定位信息,從而實(shí)現(xiàn)UI映射。頁面對象設(shè)計(jì)模式頁面對象設(shè)計(jì)模式,可以提高自動化測試腳本的維護(hù)性、減少代碼重復(fù),越發(fā)流行。頁面對象是一個(gè)面向?qū)ο蟮念?,作為待測應(yīng)用對外提供的接口。測試代碼在需要和UI頁面交互時(shí),使用此頁面對象類的方法。這樣做的好處是,如果 UI頁面發(fā)生變化,測試代碼本身并不需要改變,只需要改變相應(yīng)的頁面對象的 代碼。為適應(yīng)新UI頁面的所有更改,都位于一個(gè)地方。頁面對象設(shè)計(jì)模式具有以下優(yōu)點(diǎn):1、測試代碼和頁面相關(guān)的代碼,比如頁面元素定位信息(若使用 UI映射,也包括定位信息的應(yīng)用), 頁面布局等,完全分離;2、可以維護(hù)單一的儲存庫來存儲頁面提供的
27、服務(wù)或操作,而不是把他們分散在測試代碼中。在這兩種情況下,這使得任何由于UI界面變化導(dǎo)致的修改,都可以在一個(gè)地方進(jìn)行修改。關(guān)于該技術(shù) 的更多有用信息,可以在眾多的博客上找到。我們也鼓勵讀者去閱讀更多。許多人寫這樣的設(shè)計(jì)模式和超出本用戶指南的范圍,可以提供有用的提示。不過,為了讓你開始,我們將舉例說明頁面對象的一個(gè)簡單 的例子。首先,考慮一個(gè)例子,典型的自動化測試,不使用頁面對象。/* Tests login feature*/public class Login public void testLogin() ("inputBox", "testUser"
28、;);("password", "my supersecret password");("sign-in");("PageWaitPeriod");("compose button"),"Login was unsuccessful");這種方法有兩個(gè)問題。1、沒有分離測試代碼和待測應(yīng)用的定位器(在這個(gè)例子中是ID);兩者都交織在一個(gè)單一方法中如果待測應(yīng)用UI改變了它的標(biāo)識,布局,或登錄輸入和處理的方式變化,測試代碼本身必須改變。2、ID定位信息分散在多個(gè)測試代碼中,所有的測
29、試不得不使用此登錄頁面。使用頁面對象技術(shù),上述測試代碼可以按如下方式重寫,為登錄頁面的頁面對象例子:* Page Object encapsulates the Sign-in page.*/public class SignInPage private Selenium selenium;public SignInPage(Selenium selenium) =selenium;if(!().equals("Sign in page") throw new IllegalStateException("This is not sign in page, cur
30、rent page is:"+();/ param userName * param password * return HomePage object */* Login as valid user public HomePage loginValidUser(String userName, String password) ("usernamefield", userName);("passwordfield", password);("sign-in");("waitPeriod");return
31、 new HomePage(selenium);主頁的頁面對象可能會是這個(gè)樣子:/* Page Object encapsulates the Home Page*/ public class HomePage private Selenium selenium;public HomePage(Selenium selenium) if (!().equals("Home Page of logged in user") throw new IllegalStateException("This is not Home Page of logged in user
32、, current page" +"is: " +();public HomePage manageProfile() These methods in turn might return more Page Objects for example click on Compose mail button could return ComposeMail class object*/現(xiàn)在,使用上述兩個(gè)頁面對象的登錄測試代碼,如下所示。/* Tests login feature*/ public class TestLogin public void testLo
33、gin() SignInPage signInPage = new SignInPage(selenium);HomePage homePage = ("userName", "password");("compose button"),"Login was unsuccessful");怎么樣使用頁面對象進(jìn)行設(shè)計(jì)有很大的靈活性,但也有一些基本的規(guī)則以保證得到測試代碼具有所需 的可維護(hù)性。頁面對象本身不應(yīng)該被驗(yàn)證或斷言。這應(yīng)該是測試的一部分,并應(yīng)始終在測試代碼中去驗(yàn)證 或斷言,而不要放在頁面對象內(nèi)。頁面對象將包含頁
34、面展現(xiàn),方法的形式表示頁面提供的服務(wù),但不需要 包含應(yīng)該在測試代碼中維護(hù)的代碼。唯一的應(yīng)該存在頁面對象中的驗(yàn)證方法是,驗(yàn)證頁面、頁面上的重要元素,被正確的加載。這這個(gè)驗(yàn)證應(yīng)該在頁面初始化時(shí)進(jìn)行。在上面的低J子中,SignInPage和HomePage的構(gòu)造函數(shù)檢查了期望的頁面是否可用,是否準(zhǔn)備好接受測試代碼的請求。頁面對象并不一定要代表整個(gè)頁面。頁面對象設(shè)計(jì)模式可用于表示頁面上組件。在待測應(yīng)用上的一個(gè) 頁面若有多個(gè)組件,每個(gè)組件對應(yīng)一個(gè)頁面對象可以提高可維護(hù)性。在測試時(shí),還會遇到其他的測試設(shè)計(jì)模式。有些人用一個(gè)頁面工廠模式來實(shí)例化頁面對象。討論所有 的這些測試模式,超出了本文檔的的范圍。在這里
35、,我們只為大家介紹概念,使讀者知道這些東西可以些 什么。正如前面提到的,很多人都在博客上討論這個(gè)話題,我們鼓勵讀者搜索這些話題。數(shù)據(jù)驅(qū)動測試數(shù)據(jù)驅(qū)動測試是指相同的測試(或測試集)可以使用不同的數(shù)據(jù)多次執(zhí)行。這些數(shù)據(jù)集往往來自外部 文件,如csv文件,文本文件,或者是從數(shù)據(jù)庫加載。數(shù)據(jù)驅(qū)動測試是一種常用的自動化測試技術(shù),使用 不同的輸入對應(yīng)用程序進(jìn)行多次驗(yàn)證。當(dāng)測試被針對不同的數(shù)據(jù)進(jìn)行設(shè)計(jì)時(shí),所輸入的數(shù)據(jù)就可以擴(kuò)展, 基本上不需要修改測試代碼就可以進(jìn)行更多的測試。# Collection of String valuessource = open("", "r")values =()()# Exe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024物業(yè)公司承擔(dān)住宅小區(qū)垃圾清運(yùn)的合同
- 2025年度留置車輛處置借款合同4篇
- 2025年grc構(gòu)件生產(chǎn)線投資建設(shè)與運(yùn)營合同3篇
- 年度PAPTFE競爭策略分析報(bào)告
- 年度童書產(chǎn)業(yè)分析報(bào)告
- 2024-2025學(xué)年新教材高中語文基礎(chǔ)過關(guān)訓(xùn)練15諫逐客書含解析部編版必修下冊
- 二零二五版白糖倉儲物流服務(wù)合同范本2篇
- 2025年理療項(xiàng)目合作協(xié)議范本:特色理療項(xiàng)目合作框架協(xié)議3篇
- 2025年度中小企業(yè)間資金周轉(zhuǎn)互助合同范本
- 二零二五年度商業(yè)地產(chǎn)租賃合同中情勢變更處理辦法及責(zé)任劃分4篇
- 骨科手術(shù)后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運(yùn)質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實(shí)施方案(一)
- 高血壓患者用藥的注意事項(xiàng)講義課件
- 特種作業(yè)安全監(jiān)護(hù)人員培訓(xùn)課件
- (完整)第15章-合成生物學(xué)ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評論
0/150
提交評論