專利名稱:用于自動(dòng)測(cè)試web應(yīng)用的方法和系統(tǒng)的制作方法
用于自動(dòng)測(cè)試WEB應(yīng)用的方法和系統(tǒng)技術(shù)領(lǐng)域
本發(fā)明總體上涉及軟件應(yīng)用的開發(fā),并且更具體地,涉及用于測(cè)試web應(yīng)用的方法。
背景技術(shù):
Web應(yīng)用的一大問題在于找出一種有效的方法用于web接口的測(cè)試自動(dòng)化。該問題與利用web 2.0新技術(shù)(如AJAX或Javakript框架,例如Dojo)而建立的web接口更為相關(guān)。Web 2. O應(yīng)用的網(wǎng)頁(yè)不僅僅是動(dòng)態(tài)的而且是非常復(fù)雜的應(yīng)用,它是多個(gè)面向?qū)ο笳Z言 DOM元素(D0M是文檔對(duì)象模型,它是用于表示HMTL頁(yè)面以及管理HMTL中對(duì)象的硬件和語言獨(dú)立的模型)的合成的結(jié)果。每個(gè)DOM元素可以通過Jav必cript (JavaScript是SUN微系統(tǒng)公司或其子公司在美國(guó)和其他國(guó)家的商標(biāo)或注冊(cè)商標(biāo))代碼而動(dòng)態(tài)構(gòu)建,JavaScript 代碼與后端交互并且實(shí)現(xiàn)AJAX (異步JavMcript和XML)技術(shù),以創(chuàng)建客戶端側(cè)web應(yīng)用甚至應(yīng)用CSS樣式表以允許從客戶端側(cè)改變外觀。而且,用于創(chuàng)建DOM元素的代碼散布在多個(gè)點(diǎn)中,還可能由獨(dú)立編寫的(利用AJAX框架創(chuàng)建的)小部件(widget)生成以實(shí)現(xiàn)單個(gè)功能。
主要問題不僅僅在于實(shí)現(xiàn)用于單元測(cè)試套件的系統(tǒng)以測(cè)試單個(gè)功能、單小部件類,而且還在于測(cè)試由小部件生成的DOM元素與產(chǎn)生DOM元素的其他對(duì)方之間的真實(shí)交互。
用于測(cè)試web應(yīng)用的現(xiàn)有技術(shù)工具僅基于網(wǎng)頁(yè)或應(yīng)用的“外部”外觀,或者即使他們知道DOM元素,也將完全不顧應(yīng)用的內(nèi)部。反之,應(yīng)用無法強(qiáng)制對(duì)這一重要區(qū)域的測(cè)試, 因?yàn)樗鼰o法訪問和驅(qū)動(dòng)自身的“外部”行為,這種軟件對(duì)于主控環(huán)境(例如,瀏覽器中運(yùn)行的那些應(yīng)用)具有強(qiáng)依賴性。自動(dòng)地測(cè)試此類web應(yīng)用是當(dāng)今的一個(gè)挑戰(zhàn)。
美國(guó)專利申請(qǐng)US2004/0025083A1描述了在程序中嵌入測(cè)試代碼的一般性思想, 使得該程序能夠測(cè)試其功能。但是,盡管該發(fā)明的范圍較寬,但是不能夠使用該方法來解決完全在瀏覽器和主控瀏覽器的操作系統(tǒng)的上下文中對(duì)應(yīng)用的內(nèi)部進(jìn)行測(cè)試這一問題。應(yīng)用中依賴于環(huán)境差異的某些代碼部分無法被測(cè)試;此外,應(yīng)用中不僅依賴于此類差異而且還依賴于此類差異可能導(dǎo)致執(zhí)行的不同代碼路徑的某些代碼部分同樣將無法測(cè)試。例如, web應(yīng)用必須在所支持的諸如hternet Explorer (Internet Explorer是微軟公司在美國(guó)和/或其他國(guó)家中的商標(biāo))、Firefox (Firefox是Mozilla Foundation的注冊(cè)商標(biāo))、 Opera (Opera是Opera Software ASA的商標(biāo)或注冊(cè)商標(biāo))等每個(gè)瀏覽器上獨(dú)立地測(cè)試。然而,出于測(cè)試的目的,使測(cè)試代碼忽略每個(gè)瀏覽器可能引起的差異并且僅僅考慮對(duì)軟件功能的直接調(diào)用,這樣做是不可靠的。
需要一種利用對(duì)web接口的頁(yè)面中的用戶輸入進(jìn)行仿真代碼來配置接口代碼的方法,以便在瀏覽器和主控瀏覽器的操作系統(tǒng)的上下文中測(cè)試應(yīng)用的內(nèi)部。發(fā)明內(nèi)容
因此,本發(fā)明的目的之一在于提供一種自動(dòng)測(cè)試方法,其對(duì)web接口的頁(yè)面中的用戶輸入進(jìn)行仿真,并且在瀏覽器和主控該瀏覽器的操作系統(tǒng)的上下文中驗(yàn)證web應(yīng)用的 web接口內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
根據(jù)權(quán)利要求1,該目的利用一種用于自動(dòng)測(cè)試運(yùn)行在測(cè)試計(jì)算機(jī)的web瀏覽器內(nèi)部的web應(yīng)用的方法來實(shí)現(xiàn),該web應(yīng)用配備(400)有測(cè)試代碼,所述方法包括
-通過web應(yīng)用中定義的API,從該web應(yīng)用中執(zhí)行的測(cè)試代碼向HTTP服務(wù)器發(fā)送(410)消息以請(qǐng)求該HTTP服務(wù)器對(duì)用戶輸入進(jìn)行仿真,所述用戶輸入與該web應(yīng)用中運(yùn)行的測(cè)試代碼相關(guān);
-HTTP服務(wù)器接收消息G20),根據(jù)該消息通過至少一個(gè)系統(tǒng)事件對(duì)用戶輸入進(jìn)行仿真,并且將其提供給該網(wǎng)絡(luò)瀏覽器;
-Web瀏覽器處理(430)仿真的至少一個(gè)系統(tǒng)事件,該仿真的至少一個(gè)系統(tǒng)事件自身觸發(fā)web應(yīng)用中的一些代碼的執(zhí)行;
-Web應(yīng)用中的測(cè)試代碼通過檢視包括Javascript和DOM對(duì)象的web應(yīng)用內(nèi)部數(shù)據(jù)結(jié)構(gòu)來檢查G40)由該至少一個(gè)系統(tǒng)事件對(duì)web應(yīng)用中的一些代碼的觸發(fā)的結(jié)果的有效性。Web應(yīng)用的該內(nèi)部數(shù)據(jù)結(jié)構(gòu)包括網(wǎng)頁(yè)上可見的HTML元素以及內(nèi)部計(jì)數(shù)器或其他可能的變量和對(duì)象。
該方法還允許通過在仿真用戶輸入之后對(duì)應(yīng)用數(shù)據(jù)結(jié)構(gòu)的檢視來測(cè)試該應(yīng)用的數(shù)據(jù)結(jié)構(gòu)。該方法還允許通過將仿真用戶輸入已經(jīng)發(fā)生之后的對(duì)象狀態(tài)與已存儲(chǔ)的模型對(duì)象狀態(tài)進(jìn)行比較來檢查應(yīng)用內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
對(duì)象可以是HTML對(duì)象、DOM對(duì)象或Javascript對(duì)象。一種自動(dòng)測(cè)試系統(tǒng)將包括 HTTP服務(wù)器以及用于生成與所測(cè)試的系統(tǒng)輸入相對(duì)應(yīng)的仿真系統(tǒng)事件的代碼。
為了全面地測(cè)試web應(yīng)用,本發(fā)明的方法不僅包括編寫一些測(cè)試代碼并且將該測(cè)試代碼嵌入到應(yīng)用中,而且還給予web應(yīng)用對(duì)“外部”環(huán)境的訪問,包括重現(xiàn)用戶與web應(yīng)用的真實(shí)交互的能力。該方法允許對(duì)外部輸入進(jìn)行仿真,使得能夠如同該外部輸入來自人類用戶或一些其他外部事件源那樣接收該外部輸入。以此方式,主控環(huán)境將也能夠處理該事件并且更新主控環(huán)境自己的數(shù)據(jù)結(jié)構(gòu),這對(duì)應(yīng)用的行為也具有直接影響。在沒提出該系統(tǒng)的情況下,沒有測(cè)試能夠覆蓋整個(gè)軟件功能。
Web應(yīng)用能夠借助于外部服務(wù)從“外部”與其自身交互。該服務(wù)控制瀏覽器和外部系統(tǒng)(盤等),并且借助于與特殊編碼的URL的HTTP連接來向web應(yīng)用提供服務(wù)。Web應(yīng)用轉(zhuǎn)而使用所提供的服務(wù)從“外部”操縱和控制該web應(yīng)用自己的內(nèi)部狀態(tài),這通常無法利用目前的測(cè)試自動(dòng)化系統(tǒng)實(shí)現(xiàn)。
下面的方法和系統(tǒng)通過對(duì)人類用戶輸入進(jìn)行重現(xiàn)和仿真而克服了目前測(cè)試方法的限制,并且使用該仿真來驗(yàn)證其內(nèi)部數(shù)據(jù)結(jié)構(gòu)和算法。該方法從該網(wǎng)頁(yè)本身內(nèi)部的 Javascript代碼調(diào)用由用戶輸入生成的系統(tǒng)事件,并且產(chǎn)生web接口的改變(由此改變例如對(duì)象模型元素DOM元素)。一旦改變被反映在DOM元素上(通過用戶事件請(qǐng)求), Javascript代碼可以通過與預(yù)期值進(jìn)行比較來檢查該內(nèi)部數(shù)據(jù)結(jié)構(gòu)的狀態(tài)。
本發(fā)明的方法提供以下優(yōu)點(diǎn)
-可以通過測(cè)試應(yīng)用網(wǎng)頁(yè)中的全部DOM元素來測(cè)試重現(xiàn)客戶情景的DOM元素的一切。該技術(shù)方案允許將感興趣的測(cè)試用例覆蓋到其他類型的產(chǎn)品無法覆蓋的高級(jí)示例部分上。
-可以在頁(yè)面自己的內(nèi)部和外部測(cè)試網(wǎng)頁(yè)。
-一種基于DOM檢查和/或通過JSON(用于Javascript對(duì)象標(biāo)記,是用串來表示對(duì)象的簡(jiǎn)單格式)對(duì)象比較的檢查驗(yàn)證點(diǎn)的方式。
-該技術(shù)方案不僅使用于DOJO框架,而且可以在用于生成網(wǎng)頁(yè)DOM元素的全部技術(shù)上使用。
-可以在用于測(cè)試套件和應(yīng)用的語言不同于Javascript時(shí)實(shí)現(xiàn)本發(fā)明的方法。語言只需要是瀏覽器可理解的。
相對(duì)于現(xiàn)有技術(shù)的自動(dòng)測(cè)試產(chǎn)品和方法,特別是對(duì)于web應(yīng)用的自動(dòng)測(cè)試產(chǎn)品和方法,現(xiàn)有技術(shù)雖然提供了多種特征,但是最終測(cè)試結(jié)果是通過將應(yīng)用的“輸出”與已知為正確的某些模板進(jìn)行比較來獲得的。對(duì)于web應(yīng)用,輸出基本上是其產(chǎn)生或改變的HTML頁(yè)面,或者等效地說,是其DOM表示。利用本發(fā)明的方法,web應(yīng)用可以訪問“外部”環(huán)境并且對(duì)真實(shí)行為(包括人類輸入)進(jìn)行仿真,這通過簡(jiǎn)單的代碼配備是不可能的。只能夠檢視程序“外觀”的工具不具有檢視內(nèi)部結(jié)構(gòu)的能力。
圖1示出了可在其中實(shí)現(xiàn)本發(fā)明的技術(shù)方案的web應(yīng)用的常見上下文;
圖2示出了 web應(yīng)用的常見上下文中的優(yōu)選實(shí)施方式的方法的實(shí)現(xiàn);
圖3是與根據(jù)優(yōu)選實(shí)施方式的仿真事件交叉的web應(yīng)用環(huán)境的示意圖4是根據(jù)優(yōu)選實(shí)施方式的本發(fā)明方法的一般性流程圖。
具體實(shí)施方式
圖1示出了能夠在其中實(shí)現(xiàn)本發(fā)明的技術(shù)方案的web應(yīng)用的常見上下文。Web應(yīng)用的常見上下文包括在用戶工作站(105)的瀏覽器(110)中運(yùn)行的web客戶端應(yīng)用(115)。 瀏覽器使用用戶的工作站的操作系統(tǒng)的文件系統(tǒng)(120)。如果web應(yīng)用服務(wù)器是遠(yuǎn)程服務(wù)器,web客戶端應(yīng)用已通過網(wǎng)絡(luò)從web應(yīng)用服務(wù)器被下載。Web應(yīng)用可以用Javascript編寫。用戶通過瀏覽器生成的網(wǎng)頁(yè)與該應(yīng)用交互。用戶輸入可以是在生成系統(tǒng)事件的網(wǎng)頁(yè)字段中輸入的數(shù)據(jù)(例如來自鍵盤或鼠標(biāo))。
圖2示出了在web應(yīng)用的常見上下文中的優(yōu)選實(shí)施方式的方法的實(shí)現(xiàn)。以瀏覽器可理解的語言(例如JavMcript)編寫的測(cè)試套件作為web應(yīng)用(115)運(yùn)行在測(cè)試主機(jī) (240)上。網(wǎng)絡(luò)測(cè)試自動(dòng)化系統(tǒng)O00)向運(yùn)行在測(cè)試主機(jī)上的web應(yīng)用(11 提供測(cè)試服務(wù)。測(cè)試服務(wù)包括三個(gè)子系統(tǒng)用于接收命令的HTTP服務(wù)器010),用于生成特定系統(tǒng)事件的系統(tǒng)事件生成器(21 ,以及用于在測(cè)試計(jì)算機(jī)是遠(yuǎn)程計(jì)算機(jī)時(shí)向運(yùn)行測(cè)試套件的主機(jī)分派事件的遠(yuǎn)程事件分派器025)。這些子系統(tǒng)可實(shí)現(xiàn)為軟件程序。測(cè)試服務(wù)的子系統(tǒng)使用庫(kù)(220)來下載/保存表示應(yīng)用狀態(tài)的串行化對(duì)象或其他數(shù)據(jù)(JS0N可以是編碼存儲(chǔ)在該庫(kù)中的串行化對(duì)象的一個(gè)實(shí)例)。
在測(cè)試主機(jī)中運(yùn)行的web應(yīng)用中,Javascript API支持Javascript測(cè)試代碼的自引導(dǎo)(self-piloting)。用于Javascript API的自引導(dǎo)命令(235)允許來自瀏覽器(web 應(yīng)用)的Javascript代碼與測(cè)試服務(wù)之間的通信。瀏覽器啟動(dòng)器(230)是可選的,并且用于基于測(cè)試主機(jī)的URL啟動(dòng)瀏覽器。當(dāng)使用時(shí),它從遠(yuǎn)程事件分派器(225)接收事件并且將事件傳輸給瀏覽器,遠(yuǎn)程事件分派器(22 本身從系統(tǒng)事件生成器(21 接收事件。當(dāng)不存在瀏覽器啟動(dòng)器時(shí),瀏覽器可以直接接收仿真系統(tǒng)事件,因?yàn)闉g覽器在web應(yīng)用中的測(cè)試代碼執(zhí)行之前即被啟動(dòng)。瀏覽器(110)接收并且處理測(cè)試主機(jī)上的相同事件。在web 應(yīng)用內(nèi)部,測(cè)試套件代碼(包含html/Javascript/Dojo代碼的網(wǎng)頁(yè))包含用于測(cè)試對(duì)象的代碼,并且使用用于Javascript API的自引導(dǎo)命令(235)來檢查驗(yàn)證點(diǎn)以及觸發(fā)針對(duì)提供測(cè)試服務(wù)的HTTP服務(wù)器010)的動(dòng)作。
注意,包括測(cè)試自動(dòng)化系統(tǒng)和測(cè)試服務(wù)器的組件的整個(gè)測(cè)試系統(tǒng)可以位于單個(gè)計(jì)算機(jī)上。在測(cè)試系統(tǒng)和測(cè)試服務(wù)器位于單個(gè)計(jì)算機(jī)上的情況中,不需要具有遠(yuǎn)程事件分派器(22 ,并且?guī)焓莣eb應(yīng)用本地的。
Javascript API建立與HTTP服務(wù)器的通信,以允許web應(yīng)用發(fā)送事件命令。服務(wù)得到該命令,并且通過系統(tǒng)事件生成器生成由瀏覽器(其總是作為置頂窗口運(yùn)行)捕捉的鍵盤或鼠標(biāo)事件,事件和網(wǎng)頁(yè)改變?nèi)缤捎脩糇约簞?chuàng)建的那樣發(fā)生改變。此時(shí),測(cè)試自動(dòng)化代碼繼續(xù)在web應(yīng)用內(nèi)部執(zhí)行自己。
基于網(wǎng)頁(yè)對(duì)象檢查(例如,DOM檢查)的驗(yàn)證點(diǎn)的示例
假設(shè)web接口提供按鈕。當(dāng)用戶點(diǎn)擊該按鈕時(shí)顯示新面板。在該示例中,測(cè)試自動(dòng)化的Javascript代碼應(yīng)該是下面這樣的Javascript請(qǐng)求鼠標(biāo)在上述按鈕的元素上的點(diǎn)擊。然后,服務(wù)通過Javascript API接收命令并且產(chǎn)生相關(guān)的系統(tǒng)事件。一旦接收到事件,在DOM中生成新的容器結(jié)構(gòu)(<DIV>)以包含新面板(子DOM)。Javascript代碼繼而可以檢查該DOM元素是否如預(yù)期那樣被插入。
基于對(duì)象狀態(tài)檢查的示例驗(yàn)證點(diǎn)
用于實(shí)現(xiàn)驗(yàn)證點(diǎn)的另一種方式是在請(qǐng)求仿真系統(tǒng)事件之前保存對(duì)象(例如被線性化為JSON串),然后一旦接收仿真系統(tǒng)事件并且改變應(yīng)被應(yīng)用于D0M,便可以加載之前保存的JSON對(duì)象并且將其與改變的對(duì)象進(jìn)行比較。假設(shè)web應(yīng)用在網(wǎng)頁(yè)中包括一個(gè)小部件, 其在鼠標(biāo)位于其上時(shí)改變背景顏色。假設(shè),在主庫(kù)上將該小部件對(duì)象串行化為主值(當(dāng)鼠標(biāo)位于該小部件之上時(shí)具有預(yù)期顏色的背景顏色)。在這種情況中,Javascript測(cè)試包括請(qǐng)求Javascript命令事件“鼠標(biāo)在小部件之上”,繼而,當(dāng)該事件到達(dá)瀏覽器并且鼠標(biāo)自動(dòng)移動(dòng)到該小部件之上時(shí),Javascript測(cè)試請(qǐng)求服務(wù)對(duì)實(shí)際小部件狀態(tài)與庫(kù)中維護(hù)的小部件狀態(tài)進(jìn)行比較。這些測(cè)試套件中的每個(gè)測(cè)試套件生成以下動(dòng)作在動(dòng)態(tài)頁(yè)面上做出HTTP請(qǐng)求,保存JSON對(duì)象作為當(dāng)前狀態(tài),生成事件命令,(由瀏覽器)捕獲事件和頁(yè)面改變,通過將結(jié)果與主值(模板)進(jìn)行比較來驗(yàn)證DOM改變,將JSON對(duì)象與主值進(jìn)行比較。每個(gè)測(cè)試套件生成瀏覽器與系統(tǒng)之間的任意類型的常見交互。
可以實(shí)現(xiàn)以下示例性測(cè)試
· “預(yù)測(cè)”,(生成用于鍵入要搜索的字符串的第一字符的事件)。
· “字段確認(rèn)”(生成全部鍵盤字符)。
· “保存頁(yè)面”(生成用于訪問瀏覽器菜單并且保存頁(yè)面的事件)。
· “文件上傳”(生成用于在瀏覽器彈出窗口上鍵入并且打開文件的事件)。
· “本地化”(生成訪問瀏覽器菜單并且改變?yōu)g覽器語言的事件)。
· “瀏覽器依賴”,生成用于測(cè)試事件在不同瀏覽器上的不同行為的相同鍵盤和鼠標(biāo)事件。
“可訪問性測(cè)試用例”,使用一系列鍵盤事件(空格、回車)。
用于Javascript API的自引導(dǎo)命令在一個(gè)端口上被異步地發(fā)送到HTTP服務(wù)器, 例如
http//Servicehostname :port/ ? receiverhost = hostname&command = < name > &argl = valuel&.......&argN = valueN
某些基本API命令可以如下
click(x,y)(點(diǎn)擊(x,y))
doub 1 ec 1 ick (χ,y)(雙擊(χ, y))
key(k)’特殊的鍵是(制表,回車,左,右,上,下)
pause (delay)(暫停(延遲))
fileload(filename)(文件上傳(文件名))
filesave (filename)(文件保存(文件名))
用于基于JSON比較的驗(yàn)證點(diǎn)的一些API命令可以如下
saveAsJSON(object, name),保存對(duì)象為 JSON 字串。
ObjectloadJSON(name),將 JSON 字串轉(zhuǎn)化成對(duì)象。
checkJSON(object, object),比較兩個(gè) JSON 對(duì)象。
圖3是與根據(jù)優(yōu)選實(shí)施方式的仿真事件交叉的web 2. 0應(yīng)用環(huán)境的示意圖。對(duì)于事件處理的學(xué)習(xí)允許理解與僅僅提出將代碼嵌入到程序中的現(xiàn)有測(cè)試方法的差異。Web 2.0應(yīng)用存活于容器(例如,web瀏覽器)中,該容器提供對(duì)關(guān)鍵組件的支持(例如,HTML 繪制、文檔的DOM表示,Javascript語言解釋器和函數(shù)庫(kù)、HTTP和HTTPS網(wǎng)絡(luò)通信,等等) 以及用于從系統(tǒng)接收實(shí)踐(例如,響應(yīng)于用戶動(dòng)作或輸入)的機(jī)制。此類容器以及全部相關(guān)組件的實(shí)現(xiàn)和行為對(duì)于web 2. 0應(yīng)用而言至關(guān)重要如果在測(cè)試期間沒有考慮這種的復(fù)雜環(huán)境,則無法全面測(cè)試web 2. 0應(yīng)用。
從圖3中的步驟編號(hào)2處開始(向系統(tǒng)的事件生成請(qǐng)求)?;旧线@同樣是用戶動(dòng)作的相同起始點(diǎn)。如圖所示,在被分派到web 2.0應(yīng)用之前,實(shí)踐通過多個(gè)組件和代碼層并由其處理。在這期間,它通常通過例如修改其數(shù)據(jù)結(jié)構(gòu)等而在代碼層和組件中“留下蹤跡”。當(dāng)事件最終分派并且由web應(yīng)用處理之后,應(yīng)用可以對(duì)事件做出響應(yīng),就如同它在真實(shí)世界情況中被“真實(shí)”觸發(fā)一樣,也即,web應(yīng)用將發(fā)現(xiàn)其環(huán)境已經(jīng)處理了該事件并且有機(jī)會(huì)對(duì)其做出反應(yīng)。這在應(yīng)用仿真完全靠它自己接收事件而忽略所有這些處理的情況下是不可能的。
在web應(yīng)用只能測(cè)試其對(duì)一類“抽象”事件(它是未知的,并且不影響環(huán)境和web 應(yīng)用容器)的響應(yīng)的情況下,完全代碼覆蓋是不可能的。相反,每個(gè)容器(例如,web瀏覽器)彼此不同,并且通常甚至與他自己的其他版本也是不同的,對(duì)于web應(yīng)用尤其如此。因此,有必要在每個(gè)所支持的環(huán)境中測(cè)試web應(yīng)用,并且在在環(huán)境完全被集成到測(cè)試情境中的情況下也肯定是不可能的。
圖3是事件如何被生成以及被分派到軟件應(yīng)用的示例。在事件被處理的同時(shí),存在無法由嵌入式代碼單獨(dú)重現(xiàn)的影響主機(jī)環(huán)境的步驟(步驟編號(hào)3,用于對(duì)事件進(jìn)行仿真的事件處理;以及編號(hào)5,由圖中的瀏覽器重現(xiàn)事件的事件)。
圖4是根據(jù)優(yōu)選實(shí)施方式的本發(fā)明方法的一般性流程圖。該方法在一個(gè)主機(jī)上實(shí)現(xiàn),或者在兩個(gè)主機(jī)但是兩個(gè)服務(wù)器上實(shí)現(xiàn)。一個(gè)服務(wù)器在其環(huán)境(web瀏覽器)中運(yùn)行 web應(yīng)用,并且與web應(yīng)用對(duì)接的一個(gè)測(cè)試服務(wù)器操作測(cè)試。用于自動(dòng)測(cè)試web應(yīng)用的方法包括用于在web應(yīng)用代碼內(nèi)實(shí)現(xiàn)測(cè)試代碼以測(cè)試web應(yīng)用的第一步驟000)。第二步驟 (410)由一段測(cè)試代碼執(zhí)行,用于通過API向測(cè)試服務(wù)器發(fā)送包括命令的消息。在第三步驟 (420)中,測(cè)試服務(wù)器接收消息,并且解釋該命令以對(duì)web應(yīng)用的頁(yè)面中的用戶輸入進(jìn)行仿真,或者以生成web應(yīng)用的環(huán)境和web應(yīng)用均可理解的系統(tǒng)事件。用戶輸入或系統(tǒng)事件與 web應(yīng)用中運(yùn)行的測(cè)試代碼相關(guān)。web瀏覽器(430)處理觸發(fā)所測(cè)試的通常web應(yīng)用執(zhí)行的用戶輸入或系統(tǒng)事件。Web應(yīng)用中的測(cè)試代碼編程地或是通過將web應(yīng)用內(nèi)部數(shù)據(jù)結(jié)構(gòu)的表示與已知模板進(jìn)行比較來檢視web應(yīng)用內(nèi)部數(shù)據(jù)結(jié)構(gòu),從而檢查(440) web應(yīng)用代碼執(zhí)行的結(jié)果的有效性。
該方法的某些特定步驟涉及基于HTML對(duì)象檢查的驗(yàn)證點(diǎn)的示例。例如,假設(shè)web 面板(它是網(wǎng)頁(yè)的一部分)中的用戶鼠標(biāo)點(diǎn)擊生成將由應(yīng)用顯示的新web面板,則步驟410 將包括要求鼠標(biāo)點(diǎn)擊仿真,并且步驟430還將包括web應(yīng)用在其常規(guī)代碼執(zhí)行(不包括測(cè)試代碼執(zhí)行)中生成與一個(gè)HTML對(duì)象(D0M對(duì)象)實(shí)例化相對(duì)應(yīng)的新容器結(jié)構(gòu),該HTML對(duì)象實(shí)例化對(duì)應(yīng)于將要顯示的新網(wǎng)頁(yè)。步驟440將包括測(cè)試代碼檢查與新網(wǎng)頁(yè)相對(duì)應(yīng)的對(duì)象已在web應(yīng)用中被正確地實(shí)例化。
該方法的其他特定步驟涉及基于對(duì)象狀態(tài)檢查的驗(yàn)證點(diǎn)的示例。例如,檢查用戶對(duì)小部件的使用已正確地改變了 HTML頁(yè)面的背景顏色。來自web應(yīng)用的測(cè)試代碼的請(qǐng)求 (410)可以包括要求保存該小部件對(duì)象的初始狀態(tài)(例如,將小部件保存為庫(kù)中的JSON字串),并且通過Javascript命令要求要求在被顯示給用戶并且包括此小部件的網(wǎng)頁(yè)中對(duì)系統(tǒng)事件(例如,鼠標(biāo)的小部件上移動(dòng))進(jìn)行仿真。繼而,在接收到仿真系統(tǒng)事件時(shí),當(dāng)瀏覽器執(zhí)行仿真鼠標(biāo)移動(dòng)時(shí),web應(yīng)用執(zhí)行相應(yīng)功能,并且測(cè)試代碼(440)捕獲網(wǎng)頁(yè)改變、向測(cè)試服務(wù)(410)發(fā)送從庫(kù)中獲取保存對(duì)象(JS0N字串)的新請(qǐng)求、通過web應(yīng)用API接收保存的對(duì)象,測(cè)試代碼讀取當(dāng)前小部件狀態(tài)并且通過將JSON對(duì)象與庫(kù)中保存的對(duì)象進(jìn)行比較來驗(yàn)證DOM改變。每個(gè)測(cè)試套件生成瀏覽器與系統(tǒng)之間的任意類型的常見交互。
歸納而言,用于自動(dòng)測(cè)試web應(yīng)用的方法是完整的,因?yàn)樗鼫y(cè)試web應(yīng)用的內(nèi)部結(jié)構(gòu)(440)和web應(yīng)用的外部環(huán)境(430)。
說明內(nèi)部結(jié)構(gòu)測(cè)試的一個(gè)示例是如果假設(shè)web應(yīng)用保持內(nèi)部計(jì)數(shù)器以跟蹤出錯(cuò)小部件的數(shù)目,使得如果該數(shù)目大于零則整個(gè)面板是無效的并且不能被處理。檢查web應(yīng)用對(duì)來自用戶的無效輸入的正確響應(yīng)的測(cè)試可以包括3個(gè)測(cè)試
1)相應(yīng)的小部件改變背景顏色以便顯示錯(cuò)誤,
2)消息出現(xiàn)以通知用戶,
3)內(nèi)部計(jì)數(shù)器增加一個(gè)單位。第3)點(diǎn)涉及應(yīng)用的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。內(nèi)部計(jì)數(shù)器僅存在于web應(yīng)用中,不能通過測(cè)試外部輸入來測(cè)試內(nèi)部計(jì)數(shù)器,因?yàn)闆]有HTML元素或外部表示對(duì)應(yīng)于該計(jì)數(shù)器。代碼可以分析自身。HTML對(duì)象、DOM對(duì)象或Javascript對(duì)象具有一種數(shù)據(jù)結(jié)構(gòu),當(dāng)從web應(yīng)用的web接口看時(shí)它是外部,而當(dāng)其包括web應(yīng)用的內(nèi)部數(shù)據(jù)(如上述計(jì)數(shù)器)時(shí)它是內(nèi)部的。
示出web應(yīng)用的外部環(huán)境測(cè)試的一個(gè)示例是假設(shè)在主控web應(yīng)用的計(jì)算機(jī)的操作系統(tǒng)中,在web應(yīng)用之外發(fā)生了一些事情。該測(cè)試方法可以測(cè)試該應(yīng)用如何響應(yīng)于系統(tǒng)事件而做出反應(yīng)。如果改變?yōu)g覽器或者改變web應(yīng)用執(zhí)行于其上的主機(jī)中的操作系統(tǒng),則行為是不同的。因此,內(nèi)部結(jié)構(gòu)可以響應(yīng)于外部事件而被測(cè)試,就像現(xiàn)有技術(shù)方法的嵌入式測(cè)試代碼一樣;應(yīng)用的內(nèi)部結(jié)構(gòu)可以僅可以響應(yīng)于由測(cè)試代碼本身而非由系統(tǒng)上下文仿真的內(nèi)部輸入而被測(cè)試。
權(quán)利要求
1.一種用于自動(dòng)測(cè)試運(yùn)行于測(cè)試計(jì)算機(jī)的web瀏覽器內(nèi)部的web應(yīng)用的方法,所述 web應(yīng)用配備(400)有測(cè)試代碼,所述方法包括通過所述web應(yīng)用中定義的API,從所述web應(yīng)用中執(zhí)行的所述測(cè)試代碼向HTTP服務(wù)器發(fā)送(410)消息以要求所述HTTP服務(wù)器對(duì)用戶輸入進(jìn)行仿真,所述用戶輸入與運(yùn)行于所述web應(yīng)用中的所述測(cè)試代碼相關(guān);所述HTTP服務(wù)器接收所述消息020),并且觸發(fā)系統(tǒng)事件生成器(215)對(duì)與所述用戶輸入相對(duì)應(yīng)的至少一個(gè)系統(tǒng)事件進(jìn)行仿真,并且將仿真的至少一個(gè)系統(tǒng)事件提供給所述 web瀏覽器;所述web瀏覽器處理(430)所述仿真的至少一個(gè)系統(tǒng)事件,所述仿真的至少一個(gè)系統(tǒng)事件自身觸發(fā)所述web應(yīng)用中的代碼的執(zhí)行;所述web應(yīng)用中的所述測(cè)試代碼通過檢視web應(yīng)用內(nèi)部數(shù)據(jù)結(jié)構(gòu),來檢查(440)所述至少一個(gè)系統(tǒng)事件對(duì)所述web應(yīng)用中的代碼的所述觸發(fā)的結(jié)果的有效性。
2.根據(jù)權(quán)利要求1所述的方法,其中所述測(cè)試代碼的檢查步驟(440)包括檢查所述web應(yīng)用正確地生成與將由所述web 應(yīng)用顯示的網(wǎng)頁(yè)修改相對(duì)應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
3.根據(jù)權(quán)利要求2所述的方法,其中所述仿真的至少一個(gè)系統(tǒng)事件是需要所述網(wǎng)頁(yè)修改的鼠標(biāo)點(diǎn)擊。
4.根據(jù)權(quán)利要求1所述的方法,還包括所述發(fā)送的步驟(410)包括所述測(cè)試代碼存儲(chǔ)網(wǎng)頁(yè)中的內(nèi)部對(duì)象數(shù)據(jù)結(jié)構(gòu)或外部對(duì)象數(shù)據(jù)結(jié)構(gòu)的初始狀態(tài),在所述消息中要求所述HTTP服務(wù)器將所述初始狀態(tài)存儲(chǔ)在庫(kù)中并且對(duì)與所述網(wǎng)頁(yè)中的所述對(duì)象相關(guān)的至少一個(gè)系統(tǒng)事件進(jìn)行仿真;所述測(cè)試代碼的檢查步驟(440)包括檢查所述web應(yīng)用已改變所述網(wǎng)頁(yè)中的所述內(nèi)部對(duì)象數(shù)據(jù)結(jié)構(gòu)或所述外部對(duì)象數(shù)據(jù)結(jié)構(gòu),在所述網(wǎng)頁(yè)的改變之后捕獲所述對(duì)象數(shù)據(jù)結(jié)構(gòu),通過所述web應(yīng)用中定義的相同API在新消息中要求測(cè)試服務(wù)器從所述庫(kù)中獲取所述對(duì)象的所述初始狀態(tài),接收獲取的初始對(duì)象狀態(tài),并且通過將初始內(nèi)部數(shù)據(jù)結(jié)構(gòu)與改變的內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行比較來驗(yàn)證所述改變是否正確。
5.根據(jù)權(quán)利要求4所述的方法,其中所述仿真的至少一個(gè)系統(tǒng)事件是網(wǎng)頁(yè)中在對(duì)象之上的鼠標(biāo)移動(dòng),所述對(duì)象是小部件。
6.根據(jù)權(quán)利要求1到5任一項(xiàng)所述的方法,其中所述步驟在HTML對(duì)象、DOM對(duì)象或 Javascript對(duì)象上執(zhí) 亍。
7.根據(jù)權(quán)利要求6所述的方法,其中在所述發(fā)送的步驟和所述檢查的步驟中,當(dāng)所述對(duì)象是Javascript對(duì)象時(shí),所述對(duì)象由所述HTTP服務(wù)器作為JSON串在所述庫(kù)中進(jìn)行存儲(chǔ)和獲取。
8.根據(jù)權(quán)利要求1到7任一項(xiàng)所述的方法,其中所述發(fā)送的步驟還包括在所述HTTP 服務(wù)器在遠(yuǎn)程的情況下,將所述至少一個(gè)系統(tǒng)事件從所述HTTP服務(wù)器分派至所述web應(yīng)用在其上執(zhí)行的服務(wù)器。
9.根據(jù)權(quán)利要求1到8任一項(xiàng)所述的方法,還包括以所述瀏覽器可理解的語言來編碼所述測(cè)試和所述web應(yīng)用的初始步驟。
10.根據(jù)權(quán)利要求1到9任一項(xiàng)所述的方法,還包括以Javascript來編碼所述測(cè)試和所述web應(yīng)用的初始步驟。
11.根據(jù)權(quán)利要求1到10任一項(xiàng)所述的方法,其中所述發(fā)送的步驟(410)和所述應(yīng)用檢查的步驟(440)還包括通過引導(dǎo)應(yīng)用來手動(dòng)觸發(fā)所述應(yīng)用內(nèi)部的所述測(cè)試代碼的初始步驟。
12.根據(jù)權(quán)利要求1到10任一項(xiàng)所述的方法,其中所述發(fā)送的步驟(410)和所述應(yīng)用檢查的步驟G40)由所述web應(yīng)用在啟動(dòng)之后的執(zhí)行而被自動(dòng)執(zhí)行。
13.—種系統(tǒng),包括適于執(zhí)行根據(jù)權(quán)利要求1到12任一項(xiàng)所述的方法的裝置。
全文摘要
一種用于自動(dòng)測(cè)試WEB瀏覽器內(nèi)部運(yùn)行的WEB應(yīng)用的方法和系統(tǒng)。測(cè)試代碼段被包括在WEB應(yīng)用代碼中。HTTP服務(wù)器向配備有測(cè)試代碼的WEB應(yīng)用提供測(cè)試服務(wù)。通過API接口,測(cè)試代碼請(qǐng)求HTTP服務(wù)器對(duì)用戶輸入進(jìn)行仿真并且將其發(fā)送給瀏覽器。HTTP服務(wù)器生成與該用戶輸入相對(duì)應(yīng)的仿真系統(tǒng)事件(鼠標(biāo)點(diǎn)擊、鍵盤輸入等),并且將其發(fā)送給瀏覽器。瀏覽器照常處理針對(duì)WEB應(yīng)用的系統(tǒng)事件。以此方式,測(cè)試代碼將檢查WEB應(yīng)用的數(shù)據(jù)結(jié)構(gòu)(對(duì)象),并且WEB應(yīng)用的整個(gè)環(huán)境也將被包括。當(dāng)檢查到WEB應(yīng)用對(duì)對(duì)象的良好處理時(shí),WEB應(yīng)用測(cè)試代碼可以請(qǐng)求HTTP服務(wù)器將對(duì)象(例如,JSON格式)存儲(chǔ)在庫(kù)中并且從庫(kù)中獲取對(duì)象。測(cè)試代碼將會(huì)對(duì)WEB應(yīng)用處理之前和之后的對(duì)象進(jìn)行比較以檢查正確執(zhí)行。
文檔編號(hào)H04L12/26GK102511037SQ201080040943
公開日2012年6月20日 申請(qǐng)日期2010年8月10日 優(yōu)先權(quán)日2010年8月10日
發(fā)明者A·斯科蒂, F·卡特里, F·平佐蒂, L·拉扎羅 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司