上篇文章利用關(guān)鍵字驅(qū)動(dòng)配合POM演示了一個(gè)登錄案例,這篇我們把利用數(shù)據(jù)驅(qū)動(dòng)制作的測(cè)試框架改寫成用關(guān)鍵字驅(qū)動(dòng)制作的。首先,請(qǐng)結(jié)合以前的講解把數(shù)據(jù)驅(qū)動(dòng)版測(cè)試框架搞清楚挑社。不要怕麻煩,搞清楚后下邊理解起來就方便多了巡揍。
和數(shù)據(jù)驅(qū)動(dòng)版一樣痛阻,關(guān)鍵字驅(qū)動(dòng)版也涵蓋登錄(EmpLogin)、員工信息(Employee)腮敌、工時(shí)表(Timesheet)以及網(wǎng)上商城(OnlineStore)這四個(gè)模塊录平。出于篇幅限制,我們只改寫登錄的部分缀皱,先回顧一下登錄成功的測(cè)試用例:
1. 打開http://cslm-test.com/hrsystem/index.php斗这;
2. 輸入用戶名"1001";
3. 輸入密碼"123"啤斗;
3. 點(diǎn)擊登錄按鈕(斷言點(diǎn):home按鈕出現(xiàn)在home.php頁(yè))表箭;
4. 退出(斷言點(diǎn):登錄按鈕出現(xiàn)在index.php頁(yè))。
和數(shù)據(jù)驅(qū)動(dòng)版一樣钮莲,定位項(xiàng)目結(jié)構(gòu)時(shí)也需要四個(gè)包(部分) - com.testalliance.hrsystem.managers(測(cè)試中樞層)免钻,com.testalliance.hrsystem.objrepository(object聲明層),com.testalliance.hrsystem.pageobj(業(yè)務(wù)邏輯層)崔拥,com.testalliance.hrsystem.test(功能/應(yīng)用層)极舔。出于一些細(xì)節(jié)上的變化,負(fù)責(zé)測(cè)試用例的com.testalliance.hrsystem.tests可以不需要链瓦,一會(huì)兒就明白了拆魏。
com.testalliance.hrsystem.objrepository包里需要包含employeePage.properties和loginPage.properties兩個(gè)object文件,這點(diǎn)和數(shù)據(jù)驅(qū)動(dòng)版的一樣慈俯,不用修改:
com.testalliance.hrsystem.pageobj有一些變化渤刃。原先數(shù)據(jù)驅(qū)動(dòng)版里是loginPage.java,負(fù)責(zé)登錄模塊的各種操作贴膘,但現(xiàn)在因?yàn)橄到y(tǒng)代碼變化卖子,我們可以直接寫成Page.java,原因一會(huì)兒討論:
com.testalliance.hrsystem.managers包里也一樣刑峡,還是包含相同的三個(gè)java文件 - DriverManager.java洋闽,負(fù)責(zé)driver的聲明玄柠;EnvManager.java,負(fù)責(zé)設(shè)置測(cè)試環(huán)境诫舅;TestRunner.java羽利,負(fù)責(zé)測(cè)試框架入口:
com.testalliance.hrsystem.test也需要包含Test.java和Utility.java兩個(gè)文件,負(fù)責(zé)功能/應(yīng)用處理:
先來改Page.java骚勘。不管是哪個(gè)模塊铐伴,需要的都是那幾個(gè)操作撮奏,比如輸入俏讹、點(diǎn)擊、切換畜吊、刷新等等泽疆,所以我們直接把這些關(guān)鍵字都寫到一起:
從第76行開始就是關(guān)鍵字操作。當(dāng)然玲献,我這里寫得不全殉疼,其實(shí)操作還有很多,如果大家想到別的可以添在這里捌年。
下一步是設(shè)計(jì)測(cè)試文件瓢娜。關(guān)鍵字驅(qū)動(dòng)與數(shù)據(jù)驅(qū)動(dòng)的一個(gè)顯著不同點(diǎn)就在于測(cè)試文件,關(guān)鍵字驅(qū)動(dòng)是以操作為主體礼预,并且步驟順序必須與用例一致眠砾。那么對(duì)于第一個(gè)測(cè)試用例 - 登錄成功,我們?cè)O(shè)計(jì)的文件應(yīng)當(dāng)是這樣的:
創(chuàng)建文件之前再想一下托酸,如果登錄成功是這樣的褒颈,那第二個(gè)用例 - 員工代號(hào)或密碼錯(cuò)誤導(dǎo)致登錄失敗應(yīng)該怎么寫?是不是這樣:
你會(huì)發(fā)現(xiàn)這兩個(gè)test case前5步都是一樣的励堡,是一個(gè)完整的登錄操作谷丸,而且要知道,登錄操作這5步在大多數(shù)的測(cè)試用例中都會(huì)出現(xiàn)应结,很多功能都要依靠登錄作為第一步刨疼,如果每個(gè)用例的測(cè)試文件都重復(fù)前5步顯然太麻煩了,干脆咱們就把這5步都提取出來鹅龄,單獨(dú)放在一個(gè)文件里币狠。新建文件夾testdata.functions -> login.xlsx:
把sheet的名稱定位login。我把測(cè)試網(wǎng)頁(yè)的網(wǎng)址也寫在了文件里砾层,與代碼完全分離開漩绵。與輸入、點(diǎn)擊肛炮、切換止吐、刷新這種簡(jiǎn)單的操作不同宝踪,登錄操作屬于系統(tǒng)的功能操作,所以業(yè)內(nèi)又管這些功能操作叫做generic functions碍扔,這也是我為什么給這個(gè)文件夾起名為testdata.functions瘩燥。
同樣,退出也是generic function不同,也經(jīng)常會(huì)在測(cè)試用例中重復(fù)厉膀,所以我們也把它單獨(dú)提取出來放到另一個(gè)sheet里,:
雖然就1步二拐,但因?yàn)橹貜?fù)性高服鹅,也單獨(dú)放。接下來把sheet的名字寫到測(cè)試文件中百新,替換掉原來的步驟企软。對(duì)于登錄成功用例:
我還加了一個(gè)叫Module的新列,先不用管它饭望。對(duì)于失敗用例:
而且你還發(fā)現(xiàn)有一個(gè)叫LoginDetails的sheet仗哨,專門可以放多種測(cè)試數(shù)據(jù)。比如登錄失敗有可能是員工代號(hào)錯(cuò)誤铅辞,也有可能是密碼錯(cuò)誤厌漂,我們需要準(zhǔn)備兩組測(cè)試數(shù)據(jù):
測(cè)試文件到此準(zhǔn)備完畢,下篇我們修改測(cè)試步驟的執(zhí)行過程斟珊。再?gòu)?qiáng)調(diào)一遍苇倡,如果是個(gè)generic function,而且重復(fù)的可能性高倍宾,你可以給它單獨(dú)放到一個(gè)文件里和蚪,會(huì)省去很多麻煩菜谣。