上篇文章利用關(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è)試框架搞清楚。不要怕麻煩,搞清楚后下邊理解起來(lái)就方便多了。
和數(shù)據(jù)驅(qū)動(dòng)版一樣,關(guān)鍵字驅(qū)動(dòng)版也涵蓋登錄(EmpLogin)、員工信息(Employee)、工時(shí)表(Timesheet)以及網(wǎng)上商城(OnlineStore)這四個(gè)模塊。出于篇幅限制,我們只改寫登錄的部分,先回顧一下登錄成功的測(cè)試用例:
1. 打開(kāi)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)用處理:
先來(lái)改Page.java。不管是哪個(gè)模塊,需要的都是那幾個(gè)操作,比如輸入、點(diǎn)擊、切換、刷新等等,所以我們直接把這些關(guān)鍵字都寫到一起:
從第76行開(kāi)始就是關(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步都提取出來(lái),單獨(dú)放在一個(gè)文件里。新建文件夾testdata.functions -> login.xlsx:
把sheet的名稱定位login。我把測(cè)試網(wǎng)頁(yè)的網(wǎng)址也寫在了文件里,與代碼完全分離開(kāi)。與輸入、點(diǎn)擊、切換、刷新這種簡(jiǎn)單的操作不同,登錄操作屬于系統(tǒng)的功能操作,所以業(yè)內(nèi)又管這些功能操作叫做generic functions,這也是我為什么給這個(gè)文件夾起名為testdata.functions。
同樣,退出也是generic function,也經(jīng)常會(huì)在測(cè)試用例中重復(fù),所以我們也把它單獨(dú)提取出來(lái)放到另一個(gè)sheet里,:
雖然就1步,但因?yàn)橹貜?fù)性高,也單獨(dú)放。接下來(lái)把sheet的名字寫到測(cè)試文件中,替換掉原來(lái)的步驟。對(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í)行過(guò)程。再?gòu)?qiáng)調(diào)一遍,如果是個(gè)generic function,而且重復(fù)的可能性高,你可以給它單獨(dú)放到一個(gè)文件里,會(huì)省去很多麻煩。