錄制標(biāo)簽頁
圖4.Sahi控制器 – 錄制標(biāo)簽頁
輸入文件路徑后點(diǎn)“錄制”便開始錄制,點(diǎn)“停”即停止錄制,非常簡單。標(biāo)簽頁的中部是一個(gè)對(duì)象識(shí)別器,在頁面上按住CTRL鍵,并將鼠標(biāo)左鍵懸停在某個(gè)元素上,對(duì)象識(shí)別器顯示出能夠識(shí)別該元素的Sahi語句。另外,你可以在下方的輸入框中直接輸入Sahi語句并查看運(yùn)行結(jié)果。
回放標(biāo)簽頁
圖5.Sahi控制器 – 回放標(biāo)簽頁
回放標(biāo)簽頁不僅能夠一次性運(yùn)行腳本,還可以單步運(yùn)行,甚至可以中途暫停,這給調(diào)試代碼帶了很大便利。點(diǎn)擊下方的鏈接可以查看解析后的腳本以及運(yùn)行日志等。
4. Sahi腳本
Sahi腳本基于Javascript,不同的是Sahi腳本中所有的變量必須帶有$前綴。Sahi代理服務(wù)器負(fù)責(zé)將用戶編寫的Sahi腳本解析成Javascript并在Rhino引擎中執(zhí)行(Rhino是一個(gè)開源的使Javascript運(yùn)行于JVM的項(xiàng)目)。所以,Sahi腳本能夠執(zhí)行文件甚至數(shù)據(jù)庫操作也不足為怪了。Sahi腳本定義.sah文件中,但是所有直接訪問DOM節(jié)點(diǎn)的函數(shù)必須定義在browser tag中。
二.使用Sahi腳本測試Dojo應(yīng)用
下面與大家分享一些我個(gè)人使用Sahi測試Dojo應(yīng)用的經(jīng)驗(yàn)。為了使示例代碼能夠被讀者方便地運(yùn)行,選取http://demos.dojotoolkit.org/demos/form/demo.html假設(shè)為我們將要測試的應(yīng)用。這是一個(gè)用來演示Dojo表單Widget的頁面。
1. 如何運(yùn)行示例代碼
下載及安裝Sahi(http://sahi.co.in/w/using-sahi)
下載sahidojodemo.zip并解壓縮到Sahi的userdata/scripts下面。解壓后應(yīng)該下面這個(gè)樣子。
/userdata/scripts/sahidojodemo/appobjs/JobAppFormPage.sah
/userdata/scripts/sahidojodemo/tasks/JobAppFormTasks.sah
/userdata/scripts/sahidojodemo/testcases/JobAppFormTests.sah
/userdata/scripts/sahidojodemo/testcases/myapp.suite
/userdata/scripts/sahidojodemo/testcases/testdata.csv
/userdata/scripts/sahidojodemo/core.sah
/userdata/scripts/sahidojodemo/run.sh
啟動(dòng)Sahi代理服務(wù)器。
運(yùn)行Sahi的bin目錄下的sahi.sh腳本,或者dashboard.sh也可以啟動(dòng)Sahi 代理服務(wù)器(該腳本用來啟動(dòng)Sahi Dashboard,同時(shí)啟動(dòng)Sahi代理服務(wù)器)。建議啟動(dòng)dashboard,這樣你能清楚地看出哪些瀏覽器被Sahi探測到了。
如果Sahi Dashboard中顯示了Chrome,你可以直接運(yùn)行sahidojodemo下的run.sh。否則,你需要把run.sh中的chrome替換成你系統(tǒng)中存在的瀏覽器,比如firefox。
如果一切正常你會(huì)看到Dojo的Job Form Application應(yīng)用被打開,然會(huì)進(jìn)行了一系列操作后關(guān)掉。這時(shí),如果一些正常,Sahi的控制臺(tái)上會(huì)顯示"Success"。如果失敗了,你可以去sahi/userdata/logs/playback下面查看日志。
2. 設(shè)計(jì)原則
接下來介紹一下我用Sahi測試Dojo應(yīng)用時(shí)遵循的幾個(gè)原則。
1. 面向?qū)ο?/p>
面向?qū)ο笤缫巡皇鞘裁葱迈r事物。其實(shí),UI自動(dòng)化測試程序直覺上來講可以采用過程式的編程模式,因?yàn)樗旧硎菍⒑芏嘈袨榇悠饋。為什么在測試Dojo應(yīng)用時(shí)要使用面向?qū)ο蟮睦砟?原因很簡單,因?yàn)镈ojo Widget本身采用了面向?qū)ο蟮乃枷。因此,在我的自?dòng)化測試框架中,每個(gè)Dojo Widget都對(duì)應(yīng)于一個(gè)Javascript的“類”,不僅封裝了DOM結(jié)構(gòu)而且更便于代碼重用。
2. 采用IBM框架(之前叫ITCL - IBM Test Community Leadership)
從事Web自動(dòng)化測試的讀者恐怕對(duì)IBM框架不會(huì)感到陌生。IBM框架由三層組成:應(yīng)用對(duì)象、任務(wù)和測試用例。潛在于應(yīng)用對(duì)象、任務(wù)和測試用例包之下的基本原理是:
層次化的體系架構(gòu)
將“做什么”與“如何做”分離開來
代碼重用
一致和清晰的組織結(jié)構(gòu)
快速增強(qiáng)的能力
迅速的調(diào)試
有效地組織文件
啟用協(xié)作
學(xué)習(xí)他人
下面是對(duì)應(yīng)用對(duì)象、任務(wù)和測試用例的解釋說明:
應(yīng)用對(duì)象:儲(chǔ)存有關(guān)你的應(yīng)用程序中的GUI元素信息。同時(shí)在這里也可以編寫你的Getter 方法,這些 Getter 方法可以返回對(duì)象,使 調(diào)用者能夠?qū)@些GUI元素進(jìn)行查詢和操作。一般情況下,這些方法在Task層中進(jìn)行調(diào)用。
任務(wù):在這里你將編寫可重用的方法,這些方法在你的應(yīng)用程序中執(zhí)行通用功能。同時(shí)在這里,你將編寫可以處理和查詢復(fù)雜的特定應(yīng)用程序控件的方法。在任務(wù)中的方法可以被測試用例調(diào)用。
測試用例:導(dǎo)航一個(gè)應(yīng)用程序,驗(yàn)證其狀態(tài),并記錄其結(jié)果的方法。
3. 借助Label識(shí)別元素
通常頁面上每個(gè)元素都會(huì)有一個(gè)label并且它是“可見”的。所謂“可見”,是指label的值是不需要借助于工具直接能看到的。例如id、name等,必須通過查看源碼或者一定的工具,如Firebug查看其屬性值。因此通過借助label的元素識(shí)別方法可以提高開發(fā)效率(因?yàn)槟悴辉谛枰ビ霉ぞ卟榭丛貙傩灾盗?。
3. 代碼詳解
三個(gè)目錄appobjs,tasks以及testcases即是IBM框架中的三層架構(gòu),其中的JobAppFormPage.sah,JobAppFormTasks.sah以及JobAppFormTests.sah分別是應(yīng)用對(duì)象、任務(wù)和測試用例程序文件(Sahi腳本)。
Dojo Widget的封裝