Selenium Web Driver自動化測試(java版)系列下半部分(28) - 用數(shù)據(jù)驅(qū)動搭建測試框架雛形(1) - 修改java包結(jié)構(gòu)签舞,分離測試用例、數(shù)據(jù)源柒瓣、測試準備掃尾工作

上兩篇我們結(jié)合數(shù)據(jù)驅(qū)動討論了page object模型儒搭,分別用了Excel和csv進行演示。其中Excel參與的演示項目叫SeleniumExcelDataDrivenPOM芙贫,現(xiàn)在打開這個項目搂鲫,看Test.java文件:

雖然我們已經(jīng)把object,測試步驟和驗證過程都加到了LoginPage.java中磺平,可現(xiàn)在這個主類還是很長魂仍。關(guān)鍵問題不是長拐辽,而是非常冗余。比如我現(xiàn)在再寫一個關(guān)于登錄模塊的用例擦酌,比如驗證登錄失敗吧俱诸,除了測試步驟和驗證過程不一樣之外,你要把開頭的driver初始化仑氛,打開網(wǎng)頁乙埃,最大化網(wǎng)頁,讀取測試數(shù)據(jù)源等等等等重寫一遍锯岖。有多少個測試用例你就得寫多少遍這些步驟介袜,非常麻煩。所以出吹,我們需要把一個更加標準的系統(tǒng)來簡化我們的工作量遇伞。從這篇開始,我就帶著大家繼續(xù)一點點改進我們的數(shù)據(jù)驅(qū)動測試系統(tǒng)捶牢,搭建一個框架雛形鸠珠。

所謂的自動化測試框架,我理解就是一個標準化的測試系統(tǒng)秋麸,其特征是一致渐排、復用、擴展性強:

我先不解釋這幾個詞灸蟆,大家可以隨著程序的改進慢慢體會這幾個詞驯耻。其實市面上已經(jīng)有不少自動化的測試框架,很多還是開源的炒考,比如Robot Framework等等可缚,有的公司用現(xiàn)成的框架,有的公司在其基礎(chǔ)上擴展改進斋枢。不得不說現(xiàn)在純寫代碼搞框架已經(jīng)是越來越少了帘靡,因為維護起來有些困難。這一點隨著程序改進大家也能慢慢體會瓤帚。有些人問那為什么你不直接討論現(xiàn)成框架呢描姚?知其然知其所以然,之所以我一定要帶著各位一點一點改進缘滥,嘗試搭建框架過程轰胁,就是想讓大家熟悉一個自動化測試系統(tǒng)的內(nèi)部結(jié)構(gòu),便于以后大家理解其它的現(xiàn)成框架朝扼,同時也鍛煉了寫代碼的能力赃阀,有助于未來在現(xiàn)成框架的基礎(chǔ)上進行小規(guī)模擴展。當然,我也分別寫了Robot Framework榛斯,TestNG观游,和Cucumber的教程供大家學習。不過我強烈建議你們先別走驮俗,先跟著我把框架的結(jié)構(gòu)搞清楚:)

我們開始改懂缕,因為讀取數(shù)據(jù)源大多數(shù)測試用例都需要,所以我先把讀取數(shù)據(jù)源的步驟封裝在一個方法里王凑,并寫到另一個類中搪柑。從現(xiàn)在開始我也要規(guī)范包名,之前介紹過包名的規(guī)范索烹,用的是“所在公司的互聯(lián)網(wǎng)域名.公司名.項目名.功能名”這個格式工碾,我新增一個包命名為叫com.testalliance.hrsystem.test,里面專門放測試過程中需要的一些前提或條件:

然后在該包下創(chuàng)建一個叫Test.java的文件百姓,把讀取數(shù)據(jù)源的步驟放進去渊额。因為com.test里已經(jīng)有一個叫Test.java的文件了,一個項目里最好不要有兩個同名文件垒拢,把com.test改成com.testalliance.hrsystem.managers(為什么起名為managers一會兒再說)旬迹,然后它下面的Test.java改成TestRunner.java:

讀取數(shù)據(jù)源的步驟封裝在Test.java的getTestData()方法中:

第33行我修改了一下,以前testDataCell位置是直接寫死了兩列求类,但這里我動態(tài)求了列數(shù)奔垦,因為有些用例的測試數(shù)據(jù)Excel表格可能是兩列,有些可能是多列尸疆,我們不好把握宴倍。那么現(xiàn)在TestRunner就可以簡化一些了,直接調(diào)用方法仓技。這樣,以后寫其它test case需要測試數(shù)據(jù)時直接調(diào)用就行了俗他,唯一注意的地方就是傳入的文件不一樣罷了脖捻。還一點,以前我們用的都是文件的絕對路徑兆衅,這回我改成了相對路徑地沮。System.getProperty("user.dir")返回的是項目的路徑,你只需要在后面加上剩余的部分就行了羡亩。這么做的好處就是一不用寫大長串摩疑,二如果項目的路徑改了你也不用修改,System.getProperty("user.dir")會自動定位到新的項目畏铆。我們以后最好使用相對路徑雷袋。

順帶著把另外兩個包名也改過來:

接下來就該把另一部分重復的代碼挪出去了,也就是driver初始化辞居,打開網(wǎng)頁楷怒,最大化網(wǎng)頁蛋勺,關(guān)閉driver這幾步,每個測試用例都會用到鸠删。仔細想一下抱完,初始化driver屬于一個測試過程的準備步驟,而關(guān)閉driver屬于掃尾步驟刃泡,嚴格說它們都是在控制管理driver實例巧娱,那可不可以單獨創(chuàng)建一個管理driver的類,然后把它們也封裝到相應的方法里呢烘贴?我們在com.testalliance.hrsystem.managers中新建一個類叫DriverManager.java:

然后粘貼如下代碼:

初始化和關(guān)閉driver分別封裝在preTest()和cleanUp()里禁添。同樣,未來使用它們時直接調(diào)用即可庙楚。打開網(wǎng)頁和最大化網(wǎng)頁這兩步其實可以放在LoginPage.java中上荡,因為我們一般都把網(wǎng)址當作是一個特殊的object并寫在object repository中。打開loginPage.properties馒闷,把網(wǎng)址填進去:

然后把這兩步寫入LoginPage.java:

回到TestRunner.java中酪捡,對它們分別調(diào)用:

現(xiàn)在問題來了,TestRunner.java里面目前只有一個測試用例纳账,如果我想再加一個呢逛薇?TestRunner.java已經(jīng)是主類了,我總不能再繼續(xù)追加吧疏虫?那所有的用例豈不都寫在一起了永罚?所以,測試用例也要挪出去卧秘。我再建一個包com.testalliance.hrsystem.tests.login呢袱,目的是裝所有和login相關(guān)的測試用例。再新建一個類叫TCLogin1.java(同時也把存數(shù)據(jù)的文件名稱改成TCLogin1.xlsx):

把TestRunner.java里面的內(nèi)容全部挪到TCLogin1.java里翅敌,注意把路徑中的文件名也改過來:

封裝的方法叫test()羞福,這樣我們只用在TestRunner.java中直接實例化TCLogin1并調(diào)用test()方法即可:

這篇的改進就到這兒。如果這時你再給登錄模塊添加一個測試用例蚯涮,起名為TCLogin2.java治专,那它也可以被TestRunner類調(diào)用、控制遭顶,有幾個管幾個张峰。TestRunner類就好像一個中控一樣管理著測試用例的調(diào)度:

這下明白為什么把TestRunner.java和DriverManager.java所在的包叫做managers了吧?一個管理測試用例棒旗,一個管理其核心driver喘批。下一篇我們新增幾個登錄模塊的用例,大家再體會一下。

這篇文章的源代碼在SeleniumExcelDataDrivenFrame1項目里邊谤祖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婿滓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粥喜,更是在濱河造成了極大的恐慌凸主,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件额湘,死亡現(xiàn)場離奇詭異卿吐,居然都是意外死亡,警方通過查閱死者的電腦和手機锋华,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門嗡官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毯焕,你說我怎么就攤上這事衍腥。” “怎么了纳猫?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵婆咸,是天一觀的道長。 經(jīng)常有香客問我芜辕,道長尚骄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任侵续,我火速辦了婚禮倔丈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘状蜗。我一直安慰自己需五,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布轧坎。 她就那樣靜靜地躺著警儒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眶根。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天边琉,我揣著相機與錄音属百,去河邊找鬼。 笑死变姨,一個胖子當著我的面吹牛族扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼渔呵,長吁一口氣:“原來是場噩夢啊……” “哼怒竿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扩氢,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤耕驰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后录豺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朦肘,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年双饥,在試婚紗的時候發(fā)現(xiàn)自己被綠了媒抠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咏花,死狀恐怖趴生,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昏翰,我是刑警寧澤苍匆,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站矩父,受9級特大地震影響锉桑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窍株,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一民轴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧球订,春花似錦后裸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至开睡,卻和暖如春因苹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背篇恒。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工扶檐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胁艰。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓款筑,卻偏偏與公主長得像智蝠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奈梳,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容