Selenium Web Driver自动化测试(java版)系列下半部分(37) - 关键字驱动自动化测试框架(2)-测试过程

上篇我们开始用关键字驱动修改框架,定位了项目目录,还修改了测试文件,这篇我们继续修改测试过程。和数据驱动框架版本一样,测试过程的控制器还是TestRunner.java这个文件,而且也分测试准备、测试中、测试收尾,相似度可以说是90%了。但鉴于关键字驱动读取文件原理的不一样,所以唯一一点我们需要改的地方就是就是测试中这部分:

先回忆一下关键字驱动的特点:在测试文件中按顺序写测试步骤,然后在程序中罗列操作,扫描文件时根据步骤判断该执行哪个操作:

但是,上篇文章我们已经修改了测试文件,里面包含了login和logout两个generic functions,我们上一篇介绍关键字驱动时的条件判断中并没有包括generic functions,按理说我们应该把它们加进去。不过等等,现在我们只有两个generic functions,但随着test case越来越多未来还可能有很多很多个,问题是你真的要一个一个的加到条件判断里吗?这样的话会不会使得判断语句变得很长很长很长?

所以,这么做不太聪明,还得想别的办法。既然这些新的都是generic functions,那我就把它们全标成一类操作,如果我把上图中的switch-case语句变成if-else,那我是不是只需要多加一个else语句就行了?指的是只要扫描到文件中的generic function,就执行else:

再结合我们上篇修改的文件,是不是明白了点什么?以登录成功的test case为例,执行过程大体画张图就是这样:

图画得有点乱,别吓着。其实也没那么乱,带大家梳理一遍就清楚了。左边部分是条件语句,右边是涉及到的两个测试文件 - tcLogin1.xlsx和login.xlsx。执行过程如下:

第1步:程序开始执行时先扫描tcLogin1.xlsx,遇到的第一个关键是login,随即执行最后一个else语句;
第2步:通过else里的种种操作使得程序开始扫描login.xlsx,执行从Open Browser到Click Element之间的步骤;
第3步:返回tcLogin1.xlsx;
第4步:继续执行下一个关键字Verify Element Text;
第5步:执行关键字logout,再一次执行了最后一个else语句;
第6步:再一次通过else里的种种操作使得程序开始扫描login.xlsx,执行Click Element;
第7步:返回tcLogin1.xlsx;
第8步:执行最后一个关键字Verify Element Display,结束。

这样,虽然看起来是扫描了一个测试文件tcLogin1.xlsx,但其实是一环套一环,每次执行完generic function后都要回到原来的地方继续。明白了这些,我们开始写扫描文件中的测试步骤,这步是由Test.java完成。我给这个方法起个名叫stepThrough(),把测试文件作为参数传进去,然后把除最后一个else之外的条件语句都写好:

理解起来没什么难度,基本上就是关键字驱动这篇例子的翻版,我们先留着else里面不写。除此之外,因为测试数据有时不止一组,所以在扫描文件的测试步骤前还需先获取数据集,这步也放在Test.java里,方法叫getTestData():

有了数据源和测试步骤扫描,测试过程才完整。为了看起来方便我们再写一个叫executeTest()的方法把它们都放进来:

当然,page objects也不能落下。先不用管executeTest()里面接了四个参数,分别是driver,文件名,文件的sheet,以及module,也就是模块。前面三个好理解,为什么最后还要有个模块呢?先跳过这个问题,一会儿就明白了。很明显,executeTest()就是我们的测试过程,我们只需要在TestRunner.java中调用它就可以了:

现在还不能执行,别忘了,Test.java里边还有个else没写呢,应该写什么呢?再看一遍上面的执行流程,刚才说了,这个过程看起来是扫描了一个测试文件tcLogin1.xlsx,但其实是一环套一环,每次执行完generic function后都要回到原来的地方继续。你体会一下,不管是扫描一个测试文件,还是它的generic functions,执行方式感觉都是一样的,逐步递进,按步回归。这点像什么?是不是像我们之前介绍java时说的递归方法?所以,我们只需要在else语句中重复这个过程即可:

里面我设置了一个module参数,指的是访问哪个包含generic functions的文件。现在明白当初为什么要在测试文件上加一列module了吧?就是要作为参数传进这里边的。程序本身不难理解,把参数想成实际值带入一下就好了。

这就是把数据驱动框架改成关键字驱动框架的一个例子。还是那句话,框架的设计方式成千上万,你也可以设计自己喜欢的,只要解决问题就可以了。我个人感觉关键字驱动设计起来还是挺费事的,咱们现在程序简单,只测了登录功能,但随着其它功能的引入,很可能你会发现原来的测试文件需要添加其它信息,一个module已经不好使了。而且越来越复杂,一个人写起来很困难。所以,市面上有很多现成的以关键字为驱动的框架我们可以直接拿来用,不少还是开源的,你一看就知道不是一个人开发的,需要一整个团队。其中一个叫Robot Framework,很流行,我也写了简单的入门材料,大家有时间可以看一下。

这篇文章的源代码是SeleniumKeywordDrivenFramework项目。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容