Selenium Web Driver自動化測試(java版)系列下半部分(31) - 用數(shù)據(jù)驅(qū)動搭建測試框架雛形(4) - 添加測試配置文件以及利用java反射機制優(yōu)化控制類

上篇我們添加了用戶模塊的test case锨侯,算上登錄模塊逼裆,我們已經(jīng)有五個test case了睛驳。TestRunner.java看起來如下:

可以看出來凰浮,隨著TestRunner.java越來越長,如果有很多test case你就得實例化每一個+調(diào)用test()方法拙已,很不方便維護决记。比如我現(xiàn)在只想執(zhí)行登錄模塊的,不想執(zhí)行別的倍踪?或者是系宫,現(xiàn)在的系統(tǒng)默認是用chrome來跑的,我想用ie或是firefox該怎么辦呢建车?其中一個答案就是設(shè)置一個配置文件來解決扩借。通過讀取文件上的值我們可以自由配置我們想要的測試參數(shù),如果希望改變則直接修改配置文件即可缤至。

首先聲明一下潮罪,配置文件可以是任意格式、任意后綴名的,只要滿足你設(shè)計的框架要求就行了嫉到。我們設(shè)計框架以來一直用的都是Excel文件沃暗,那這次搞配置文件我們就用csv文件吧,順便復習一下何恶。新建文件夾config -> config.csv:

在里面寫上如下內(nèi)容:

就這一行孽锥,里面有4列,定義了用哪種瀏覽器细层,driver的路徑惜辑,以及測試的模塊等:

先把csv文件上的數(shù)據(jù)讀到數(shù)組里,文件讀取也屬于測試中的一些常用的疫赎、必要的步驟盛撑,所以還是放在com.testalliance.hrsystem.test中,這里我們創(chuàng)建一個新類Utility.java:

寫如下代碼:

依靠getModules()方法讀取csv文件的內(nèi)容虚缎,讀到逗號時進行分割并把當前一行信息放入一個數(shù)組中撵彻,然后把每一個數(shù)組放入ArrayList里。不太理解的朋友可以去參考csv文件操作那篇实牡。接下來我們把TestRunner.java改成下面這個樣子:

第16行調(diào)用getModules()方法獲取所有的配置信息陌僵,然后通過循環(huán)ArrayList一個個讀取出來。第27行和28行是處理測試模塊的步驟创坞,可能有些人看不太懂碗短。第27行用字符串的replace()方法將"{"和"}"去掉,然后以“|”為新的分隔符再劃分成幾部分放入arr_modules數(shù)組中题涨。比如我們例子中從ArrayList讀取出來的最后一列字符串是"{login|employee}"偎谁,先將左右括號去掉后變成"login|employee",再以"|"為分隔符把login和employee放進數(shù)組arr_modules里纲堵。另外巡雨,你可以把每個case的test()方法都修改成接受三個參數(shù)用于執(zhí)行測試步驟。這么一改席函,我發(fā)現(xiàn)可以有選擇性地執(zhí)行模塊了铐望。

但即便是這樣,我們還是覺得TestRunner.java很臃腫茂附,測試用例多了之后還要加上各種判斷語句和實例化過程正蛙,其實并沒有改變太多。所以营曼,我們還要繼續(xù)修改乒验。首先觀察一下測試用例類和測試文件的名稱:

文件名稱是一一對應的,只不過后綴名不一樣而已蒂阱。仔細想一下锻全,如果只希望執(zhí)行某個模塊的測試用例狂塘,我們勢必要遍歷整個測試文件夾:

每讀到一個文件,就要實例化對應的用例鳄厌,比如讀到TCLogin3.xlsx睹耐,我們就要實例化TCLogin3,讀到TCEmp1.xlsx部翘,我們就要實例化TCEmp1。測試文件名本質(zhì)上是一個字符串响委,而類名本質(zhì)上是一個類新思,那我可不可以有一種辦法,可以把字符串轉(zhuǎn)成類赘风,這樣是不是程序執(zhí)行時只要通過循環(huán)讀取文件名就能自動實例化類了夹囚?是不是我們就不用再一遍遍來回寫了?做這步之前邀窃,我們先簡單修改一下TestRunner.java:

畫紅框的部分就是增加或修改的地方荸哟,第30行到37行就是遍歷某個測試數(shù)據(jù)文件夾然后取出某個文件名的過程。取出的文件名帶有后綴.xlsx瞬捕,要去掉鞍历,因為類名是沒有后綴的。這里用到的都是字符串的操作肪虎,不說太多了劣砍。正是因為我們每次取出一個文件代表一個類,也就是一個測試用例扇救,我們其實可以把測試的準備工作從每個test()方法中單獨提取出來刑枝,這步在第45行和46行。因為單獨提取出來了迅腔,那我們完全可以在準備步驟里就傳入driverBrowser装畅,driverPath和browser三個參數(shù),test()方法里只需要傳入driver即可沧烈。這樣掠兄,準備工作是準備工作,測試步驟是測試步驟掺出,兩者分開了徽千。把測試類中test()方法里的準備步驟去掉,以TCLogin1.java為例:

現(xiàn)在更明顯了吧汤锨?我們現(xiàn)在要做的就是要把TestRunner.java里面的if-else語句替換成文件名轉(zhuǎn)類名的過程就行了双抽。好了,問題來了闲礼,怎樣才能把文件名轉(zhuǎn)成類名呢牍汹?java里有一個類似的功能铐维,叫做反射機制,可以幫助我們慎菲。

首先我們回顧一下之前介紹的一些java基本概念嫁蛇。在討論面向?qū)ο蟮臅r候我們說實例化一個對象時內(nèi)存中應該是這樣的:

當執(zhí)行到Wanghong w = new Wanghong()時,Wanghong對象被創(chuàng)建出來露该,但與此同時其實還有一個對象被創(chuàng)建出來(其實是在.class文件被加載到JVM的時候)睬棚,這個對象的類型是Class,指向的是Wanghong類的一些信息:

我們在介紹java的第一篇就說了解幼,一段程序運行時首先會生成一個.class文件抑党,隨后這個.class文件會被加載到java虛擬機(JVM)中并被執(zhí)行,這個Class類型的對象就是這個時候創(chuàng)建的撵摆。那怎樣得到這個對象呢底靠?為了演示,我新建了一個叫JavaReflection的項目:

看下面的代碼:

Wanghong.java:

Test.java:

看Test.java特铝,第一種得到Class類對象的方法就是用Wanghong類的對象調(diào)用一個叫g(shù)etClass()的方法暑中,然后可以打印出來它的一些基本信息;第二種方法直接調(diào)用class屬性鲫剿;第三種調(diào)用forName()方法鳄逾,需要添加該類的完整路徑作為參數(shù),注意是完整路徑牵素,包括包名严衬。

有一點需要指出的是,在同一個運行時一個類只有一個Class類對象被創(chuàng)建出來笆呆,也就是說wClass1请琳、wClass2、wClass3它們都是一個東西赠幕。Java反射這部分知識在測試中暫時用得不多俄精,我就講到這兒,具體可以參考其它一些文章榕堰,我參考的就是這篇竖慧,講得很詳細。大家現(xiàn)在仔細看看第三種方式逆屡,類的完整路徑是一個字符串圾旨,我們通過這個字符串可以獲得類名。有人說你講這個反射我還是沒明白和咱們的測試執(zhí)行有什么關(guān)系魏蔗,接著看砍的。java映射的概念就是可以把一個類中的成員(包,構(gòu)造方法莺治,成員方法廓鞠,成員變量等等)映射成一個個對象帚稠,比如Class對象,是通過com.test包中的Wanghong類得到的床佳。同樣滋早,如果我們寫Class c = Class.forName("com.testalliance.hrsystem.tests.login.TCLogin1“)也會得到一個Class對象。TCLogin1.java里有一個test()方法砌们,用于執(zhí)行測試用例杆麸,我們也可以把這個成員方法映射成對象。TCLogin1.java默認還有構(gòu)造函數(shù)浪感,用于初始化一個對象角溃,我們還可以把構(gòu)造函數(shù)映射成對象。這么多對象干什么用篮撑?答案在下面的紅框里:

第59行是成員方法的反射使用。用Class對象調(diào)用getMethod()方法可以獲取到某個成員方法的對象匆瓜,它接收的參數(shù)一個是方法名赢笨,還一個是參數(shù)類型,因為我們是driver驮吱,所以寫WebDriver.class茧妒。參數(shù)類型根據(jù)方法的參數(shù)個數(shù)而定,test()方法只有一個driver參數(shù)左冬,所以我們只放一個WebDriver.class桐筏。第61行是構(gòu)造方法的反射使用,構(gòu)造方法的作用是初始化一個類拇砰,在這里會得到測試類的對象classObj梅忌,這一步相當于Wanghong w = new Wanghong()。第63行用方法對象調(diào)用invoke方法傳入classObj和driver作為參數(shù)除破,相當于調(diào)用了test()方法牧氮。其實還是一個道理,只不過對象瑰枫、方法踱葛、參數(shù)都顛倒過來了,感覺很別扭光坝。這種正向反向可以看下圖對比一下:

想初始化測試類就得先獲取Class對象尸诽,想調(diào)用test()方法就得先獲取方法對象,這么理解可能就容易些盯另。更多反射的用法還是可以參照這篇性含,我就不再啰嗦了。

執(zhí)行一下土铺,測試通過胶滋。改動到此為止板鬓,下一篇我們再做幾個簡單的變化,這個框架雛形就完成了究恤。對于配置文件來說還是那句話俭令,只要和自己設(shè)計的框架吻合就可以了。

這篇文章的源代碼在SeleniumExcelDataDrivenFrame4項目里邊部宿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抄腔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子理张,更是在濱河造成了極大的恐慌赫蛇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雾叭,死亡現(xiàn)場離奇詭異悟耘,居然都是意外死亡,警方通過查閱死者的電腦和手機织狐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門暂幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人移迫,你說我怎么就攤上這事旺嬉。” “怎么了厨埋?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵邪媳,是天一觀的道長。 經(jīng)常有香客問我荡陷,道長雨效,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任废赞,我火速辦了婚禮设易,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛹头。我一直安慰自己顿肺,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布渣蜗。 她就那樣靜靜地躺著屠尊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕拷。 梳的紋絲不亂的頭發(fā)上讼昆,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音骚烧,去河邊找鬼浸赫。 笑死闰围,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的既峡。 我是一名探鬼主播羡榴,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼运敢!你這毒婦竟也來了校仑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤传惠,失蹤者是張志新(化名)和其女友劉穎迄沫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦方,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡羊瘩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盼砍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片困后。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衬廷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汽绢,我是刑警寧澤吗跋,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站宁昭,受9級特大地震影響跌宛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜积仗,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一疆拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寂曹,春花似錦哎迄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渺氧,卻和暖如春旨涝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侣背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工白华, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慨默,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓弧腥,卻偏偏與公主長得像厦取,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸟赫,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法蒜胖,類相關(guān)的語法,內(nèi)部類的語法抛蚤,繼承相關(guān)的語法台谢,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 上兩篇我們結(jié)合數(shù)據(jù)驅(qū)動討論了page object模型岁经,分別用了Excel和csv進行演示朋沮。其中Excel參與的演...
    馬可吃菠蘿閱讀 719評論 0 2
  • 屋頂不高。瓦片灰塵掉落在地板上缀壤,像一朵朵雪白的云絮沒有一絲風堆在一起樊拓。淡淡的陽光在玻璃窗縫射進來。辛而緊接對著她的...
    兔m閱讀 329評論 0 0
  • 防皺養(yǎng)顏:山藥燴秋葵 主料:山藥180克塘慕,胡蘿卜180克筋夏,黃秋葵120克,玉米筍120克图呢,大棗30克条篷。 配料:油3...
    89不離食閱讀 321評論 0 0
  • 想研究美圖的初衷在于其做為廈門目前最知名的互聯(lián)網(wǎng)公司之神秘(身為廈門人的我更為好奇)赴叹。 而且這2年其動作之頻繁: ...
    ElekChen閱讀 488評論 4 2