Selenium Web Driver自動化測試(java版)系列下半部分(37) - 關(guān)鍵字驅(qū)動自動化測試框架(2)-測試過程

上篇我們開始用關(guān)鍵字驅(qū)動修改框架爹殊,定位了項(xiàng)目目錄铆农,還修改了測試文件雏吭,這篇我們繼續(xù)修改測試過程。和數(shù)據(jù)驅(qū)動框架版本一樣淮悼,測試過程的控制器還是TestRunner.java這個(gè)文件咐低,而且也分測試準(zhǔn)備、測試中袜腥、測試收尾渊鞋,相似度可以說是90%了。但鑒于關(guān)鍵字驅(qū)動讀取文件原理的不一樣瞧挤,所以唯一一點(diǎn)我們需要改的地方就是就是測試中這部分:

先回憶一下關(guān)鍵字驅(qū)動的特點(diǎn):在測試文件中按順序?qū)憸y試步驟锡宋,然后在程序中羅列操作,掃描文件時(shí)根據(jù)步驟判斷該執(zhí)行哪個(gè)操作:

但是特恬,上篇文章我們已經(jīng)修改了測試文件执俩,里面包含了login和logout兩個(gè)generic functions,我們上一篇介紹關(guān)鍵字驅(qū)動時(shí)的條件判斷中并沒有包括generic functions癌刽,按理說我們應(yīng)該把它們加進(jìn)去役首。不過等等,現(xiàn)在我們只有兩個(gè)generic functions显拜,但隨著test case越來越多未來還可能有很多很多個(gè)衡奥,問題是你真的要一個(gè)一個(gè)的加到條件判斷里嗎?這樣的話會不會使得判斷語句變得很長很長很長远荠?

所以矮固,這么做不太聰明,還得想別的辦法譬淳。既然這些新的都是generic functions档址,那我就把它們?nèi)珮?biāo)成一類操作,如果我把上圖中的switch-case語句變成if-else邻梆,那我是不是只需要多加一個(gè)else語句就行了守伸?指的是只要掃描到文件中的generic function,就執(zhí)行else:

再結(jié)合我們上篇修改的文件浦妄,是不是明白了點(diǎn)什么尼摹?以登錄成功的test case為例见芹,執(zhí)行過程大體畫張圖就是這樣:

圖畫得有點(diǎn)亂,別嚇著蠢涝。其實(shí)也沒那么亂玄呛,帶大家梳理一遍就清楚了。左邊部分是條件語句惠赫,右邊是涉及到的兩個(gè)測試文件 - tcLogin1.xlsx和login.xlsx把鉴。執(zhí)行過程如下:

第1步:程序開始執(zhí)行時(shí)先掃描tcLogin1.xlsx,遇到的第一個(gè)關(guān)鍵是login儿咱,隨即執(zhí)行最后一個(gè)else語句庭砍;
第2步:通過else里的種種操作使得程序開始掃描login.xlsx,執(zhí)行從Open Browser到Click Element之間的步驟混埠;
第3步:返回tcLogin1.xlsx怠缸;
第4步:繼續(xù)執(zhí)行下一個(gè)關(guān)鍵字Verify Element Text;
第5步:執(zhí)行關(guān)鍵字logout钳宪,再一次執(zhí)行了最后一個(gè)else語句揭北;
第6步:再一次通過else里的種種操作使得程序開始掃描login.xlsx,執(zhí)行Click Element;
第7步:返回tcLogin1.xlsx吏颖;
第8步:執(zhí)行最后一個(gè)關(guān)鍵字Verify Element Display搔体,結(jié)束。

這樣半醉,雖然看起來是掃描了一個(gè)測試文件tcLogin1.xlsx疚俱,但其實(shí)是一環(huán)套一環(huán),每次執(zhí)行完generic function后都要回到原來的地方繼續(xù)缩多。明白了這些呆奕,我們開始寫掃描文件中的測試步驟,這步是由Test.java完成衬吆。我給這個(gè)方法起個(gè)名叫stepThrough()梁钾,把測試文件作為參數(shù)傳進(jìn)去,然后把除最后一個(gè)else之外的條件語句都寫好:

理解起來沒什么難度逊抡,基本上就是關(guān)鍵字驅(qū)動這篇例子的翻版姆泻,我們先留著else里面不寫。除此之外秦忿,因?yàn)闇y試數(shù)據(jù)有時(shí)不止一組麦射,所以在掃描文件的測試步驟前還需先獲取數(shù)據(jù)集,這步也放在Test.java里灯谣,方法叫g(shù)etTestData():

有了數(shù)據(jù)源和測試步驟掃描,測試過程才完整蛔琅。為了看起來方便我們再寫一個(gè)叫executeTest()的方法把它們都放進(jìn)來:

當(dāng)然胎许,page objects也不能落下。先不用管executeTest()里面接了四個(gè)參數(shù),分別是driver辜窑,文件名钩述,文件的sheet,以及module穆碎,也就是模塊牙勘。前面三個(gè)好理解,為什么最后還要有個(gè)模塊呢所禀?先跳過這個(gè)問題方面,一會兒就明白了。很明顯色徘,executeTest()就是我們的測試過程恭金,我們只需要在TestRunner.java中調(diào)用它就可以了:

現(xiàn)在還不能執(zhí)行,別忘了褂策,Test.java里邊還有個(gè)else沒寫呢横腿,應(yīng)該寫什么呢?再看一遍上面的執(zhí)行流程斤寂,剛才說了耿焊,這個(gè)過程看起來是掃描了一個(gè)測試文件tcLogin1.xlsx,但其實(shí)是一環(huán)套一環(huán)遍搞,每次執(zhí)行完generic function后都要回到原來的地方繼續(xù)罗侯。你體會一下,不管是掃描一個(gè)測試文件尾抑,還是它的generic functions歇父,執(zhí)行方式感覺都是一樣的,逐步遞進(jìn)再愈,按步回歸榜苫。這點(diǎn)像什么?是不是像我們之前介紹java時(shí)說的遞歸方法翎冲?所以垂睬,我們只需要在else語句中重復(fù)這個(gè)過程即可:

里面我設(shè)置了一個(gè)module參數(shù),指的是訪問哪個(gè)包含generic functions的文件】购罚現(xiàn)在明白當(dāng)初為什么要在測試文件上加一列module了吧驹饺?就是要作為參數(shù)傳進(jìn)這里邊的。程序本身不難理解缴渊,把參數(shù)想成實(shí)際值帶入一下就好了赏壹。

這就是把數(shù)據(jù)驅(qū)動框架改成關(guān)鍵字驅(qū)動框架的一個(gè)例子。還是那句話衔沼,框架的設(shè)計(jì)方式成千上萬蝌借,你也可以設(shè)計(jì)自己喜歡的昔瞧,只要解決問題就可以了。我個(gè)人感覺關(guān)鍵字驅(qū)動設(shè)計(jì)起來還是挺費(fèi)事的菩佑,咱們現(xiàn)在程序簡單自晰,只測了登錄功能,但隨著其它功能的引入稍坯,很可能你會發(fā)現(xiàn)原來的測試文件需要添加其它信息酬荞,一個(gè)module已經(jīng)不好使了。而且越來越復(fù)雜瞧哟,一個(gè)人寫起來很困難混巧。所以,市面上有很多現(xiàn)成的以關(guān)鍵字為驅(qū)動的框架我們可以直接拿來用绢涡,不少還是開源的牲剃,你一看就知道不是一個(gè)人開發(fā)的,需要一整個(gè)團(tuán)隊(duì)雄可。其中一個(gè)叫Robot Framework凿傅,很流行,我也寫了簡單的入門材料数苫,大家有時(shí)間可以看一下聪舒。

這篇文章的源代碼是SeleniumKeywordDrivenFramework項(xiàng)目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虐急,一起剝皮案震驚了整個(gè)濱河市箱残,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌止吁,老刑警劉巖被辑,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敬惦,居然都是意外死亡盼理,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門俄删,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宏怔,“玉大人,你說我怎么就攤上這事畴椰‰铮” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵斜脂,是天一觀的道長抓艳。 經(jīng)常有香客問我,道長帚戳,這世上最難降的妖魔是什么壶硅? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任威兜,我火速辦了婚禮销斟,結(jié)果婚禮上庐椒,老公的妹妹穿的比我還像新娘。我一直安慰自己蚂踊,他們只是感情好约谈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犁钟,像睡著了一般棱诱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涝动,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天迈勋,我揣著相機(jī)與錄音,去河邊找鬼醋粟。 笑死靡菇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的米愿。 我是一名探鬼主播厦凤,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼育苟!你這毒婦竟也來了较鼓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤违柏,失蹤者是張志新(化名)和其女友劉穎博烂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漱竖,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡禽篱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闲孤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆级。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讼积,靈堂內(nèi)的尸體忽然破棺而出肥照,到底是詐尸還是另有隱情,我是刑警寧澤勤众,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布舆绎,位于F島的核電站,受9級特大地震影響们颜,放射性物質(zhì)發(fā)生泄漏吕朵。R本人自食惡果不足惜猎醇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望努溃。 院中可真熱鬧硫嘶,春花似錦、人聲如沸梧税。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽第队。三九已至哮塞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凳谦,已是汗流浹背忆畅。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尸执,地道東北人家凯。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像剔交,于是被迫代替她去往敵國和親肆饶。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

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