前幾篇我們模擬了一個(gè)測(cè)試框架的雛形,用的是Human Resources System測(cè)試網(wǎng)站:
重申一遍,框架的設(shè)計(jì)多種多樣,只要能夠滿足一致性、復(fù)用性和擴(kuò)展性就可以了。這篇我們就來(lái)總結(jié)一下寫完的框架。和開(kāi)發(fā)一個(gè)軟件一樣,自動(dòng)化測(cè)試項(xiàng)目的完成也需要經(jīng)歷好幾個(gè)步驟。雖然每個(gè)公司都有自己的計(jì)劃和安排,但大體情況都差不多。我簡(jiǎn)單歸納如下:
你看,完成一個(gè)項(xiàng)目需要合理規(guī)劃,并不是直接拿來(lái)就編程,寫代碼之前還有好幾步要做。首先,項(xiàng)目分析。其實(shí)項(xiàng)目分析的過(guò)程就是熟悉應(yīng)用以及確定測(cè)試模塊的過(guò)程。Hrsystem是一個(gè)網(wǎng)站應(yīng)用,打開(kāi)后默認(rèn)來(lái)到登錄頁(yè)面。登錄頁(yè)面上有員工代號(hào),密碼,登錄按鈕。我們可以用三個(gè)模擬員工登錄:
便選擇一個(gè)登錄進(jìn)去直接跳轉(zhuǎn)到主頁(yè)(Home)。主頁(yè)上有一個(gè)員工頭像以及一段歡迎辭。導(dǎo)航欄有四項(xiàng),分別指向當(dāng)前主頁(yè)(Home),員工信息(Employee),員工工時(shí)表(Timesheet),以及網(wǎng)上商城(OnlineStore)。再簡(jiǎn)單瀏覽一下網(wǎng)站。點(diǎn)擊Employee來(lái)到員工信息頁(yè)面,它里面記錄了每一個(gè)員工的代號(hào)(Employee Code)、姓名(Employee Name)、最近登錄日期(Last Login Date),以及該員工是否還在該公司(Active)。代號(hào)姓名不用說(shuō)了;對(duì)于Last Login Date來(lái)說(shuō),只要你一登錄,最近登錄日期就會(huì)變成今天;有些員工離職了或調(diào)走了就不再是Active了。
接下來(lái)點(diǎn)擊timesheet跳轉(zhuǎn)到員工工時(shí)表,員工的每一條工作記錄都會(huì)存在此表中。Roster Date,Roster Start和Roster End指的領(lǐng)導(dǎo)排的班次,也就是計(jì)劃上班的日期和時(shí)間。Actual Start和Actual End指的是實(shí)際上下班的時(shí)間。Comments指的是根據(jù)Roster和Actual的對(duì)比提示該員工是否遲到或早退(大部分老板都愛(ài)搞這個(gè))。
點(diǎn)擊OnlineStore來(lái)到網(wǎng)上商城,琳瑯滿目的商品,只可惜全是假的。雖然都是假的,但還都有標(biāo)價(jià)。點(diǎn)擊某商品的buy按鈕就會(huì)彈出一個(gè)頁(yè)面讓你選擇顏色材質(zhì)個(gè)數(shù),然后就可以放入購(gòu)物車結(jié)賬。
瀏覽了一遍網(wǎng)站,我們也就知道了它的某些功能。通常情況下導(dǎo)航欄中不同的項(xiàng)目代表不同的功能,是個(gè)天然的模塊分割器,所以我也是按導(dǎo)航欄來(lái)給測(cè)試點(diǎn)分模塊。項(xiàng)目的測(cè)試點(diǎn)分為四個(gè)模塊:
我們的框架中暫時(shí)只有登錄模塊和員工模塊,剩下的兩個(gè)模塊大家有興趣可以去寫寫,我就不做演示了。
第二步,測(cè)試用例整理。我們有四個(gè)模塊,每個(gè)模塊都有幾個(gè)需要測(cè)試的功能。因?yàn)橹皇茄菔荆抑惶暨x了幾個(gè)有代表性的測(cè)試點(diǎn)作為test case,實(shí)際項(xiàng)目中或許老板會(huì)讓你面面俱到盡可能覆蓋周全。Test case如下,一般會(huì)寫在Excel表里:
每個(gè)test case的具體步驟如下:
EmpLogin(登錄):
1. 正常登錄(用戶名/密碼輸入正確)
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕(斷言點(diǎn):登錄成功,用戶名與網(wǎng)頁(yè)顯示一直時(shí)表示登錄成功);
- 點(diǎn)擊退出按鈕(斷言點(diǎn):退出成功,登錄按鈕再次出現(xiàn)表示退出成功)。
2. 非正常登錄(用戶名/密碼錯(cuò)誤)
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕(斷言點(diǎn):登錄失敗,出現(xiàn)” usercode or password is incorrect”表示登錄失敗)。
3. 非正常登錄(用戶名/密碼為空)
- 打開(kāi)網(wǎng)站
- 輸入用戶名;
- 點(diǎn)擊登錄按鈕(斷言點(diǎn):登錄失敗,彈出對(duì)話框”Please enter password”表示登錄失敗)。
Employee(員工信息):
1. 員工登錄后最后登錄時(shí)間字段正確
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕;
- 登錄成功后在導(dǎo)航欄上點(diǎn)擊Employee(斷言點(diǎn):登錄員工Last Login Date應(yīng)與數(shù)據(jù)庫(kù)時(shí)間均顯示為當(dāng)天)。
Timesheet(工時(shí)表):
1. 按員工姓名搜索工時(shí)表
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕;
- 登錄成功后在導(dǎo)航欄上點(diǎn)擊Timesheets;
- 輸入員工姓名;
- 點(diǎn)擊查詢(斷言點(diǎn):返回被查詢員工的工時(shí)表,且數(shù)量正確。當(dāng)工時(shí)表上員工姓名和查詢字段一致,并且記錄數(shù)的xpath與期望一致即為查詢正確)。
2. 查看員工遲到早退
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕;
- 登錄成功后在導(dǎo)航欄上點(diǎn)擊Timesheets(斷言點(diǎn):Roster Time和Actual Time進(jìn)行對(duì)比,具體寫case時(shí)細(xì)講);
OnlineStore(網(wǎng)上商城):
1. 查看物品被添加到購(gòu)物車
- 打開(kāi)網(wǎng)站;
- 輸入用戶名;
- 輸入密碼;
- 點(diǎn)擊登錄按鈕;
- 登錄成功后在導(dǎo)航欄上點(diǎn)擊OnlineStore;
你也可以按照我提供的測(cè)試用例來(lái)完成工時(shí)表和網(wǎng)上商城兩個(gè)模塊的開(kāi)發(fā)。
第三步,框架選擇(framework selection)。我們用的是Selenium來(lái)寫,這個(gè)沒(méi)什么疑問(wèn)。有些公司基于Selenium自己又開(kāi)發(fā)新的框架工具,做得比較好的Robot Framework(用Python),Watir(用Ruby)等等。前三步雖然沒(méi)什么技術(shù)要求,但它幫你確定了測(cè)試模塊和范圍,合理規(guī)劃了整個(gè)項(xiàng)目,地位也很重要。
第四步是項(xiàng)目結(jié)構(gòu)定位。我們不斷地在修改加工框架,最后修成了現(xiàn)在這個(gè)樣子:
結(jié)構(gòu)包括以下幾層:
Managers(測(cè)試中樞層):最高層,負(fù)責(zé)測(cè)試用例執(zhí)行、選擇、以及設(shè)置測(cè)試環(huán)境,比如用什么driver,打開(kāi)哪個(gè)網(wǎng)站,執(zhí)行哪些test case。涉及的包是com.testalliance.hrsystem.managers;
Tests(測(cè)試用例層):第二層,里面包含每個(gè)test case以及它們執(zhí)行過(guò)程。涉及的包有com.testalliance.hrsystem.tests.login,com.testalliance.hrsystem.tests.employee。你會(huì)發(fā)現(xiàn)我就是按照項(xiàng)目分析得出來(lái)的模塊來(lái)命名每一個(gè)tests子包;
Page Object(業(yè)務(wù)邏輯層):第三層,里面裝了為實(shí)現(xiàn)某個(gè)功能而寫的方法,比如登錄(login),跳轉(zhuǎn)(navigate),查看(view)等等,以及該功能實(shí)現(xiàn)過(guò)程所需要的操作,也就是關(guān)鍵字,比如點(diǎn)擊(click),輸入(enter),斷言點(diǎn)(verify)。涉及的包是com.testalliance.hrsystem.pageobj;
Obj Repository(Object聲明層):第四層,里面存儲(chǔ)了所有網(wǎng)頁(yè)元素的聲明,在com.testalliance.hrsystem.objrepository中;
Utility(功能/應(yīng)用層):第五層,指的是除業(yè)務(wù)邏輯層之外的功能性方法,比如讀寫文件、數(shù)據(jù)庫(kù)連接、截圖、email測(cè)試結(jié)果等等。
雛形的結(jié)構(gòu)差不多就是這樣,大家可以根據(jù)自己的需要自行調(diào)整,方便自己的框架。總之,聽(tīng)你老板的。
之后就是寫代碼、代碼檢查和支付了,基本上就沒(méi)什么說(shuō)的了。你可以在我們這個(gè)框架的基礎(chǔ)上繼續(xù)加工,比如用log4j抓運(yùn)行信息,或是制作一個(gè)小的報(bào)告,或是重新設(shè)計(jì)配置文件滿足更高的要求。當(dāng)然,在修改框架之前我說(shuō)過(guò),市面上已經(jīng)有很多公司設(shè)計(jì)了測(cè)試框架,它們的功能遠(yuǎn)比我寫的這個(gè)更豐富、更強(qiáng)大,大家有空可以去研究研究,相信有了這幾篇的幫助,理解一個(gè)框架應(yīng)該不成問(wèn)題了。