Robot Framework + Selenium2Library自动化测试系列(8) - 测试步骤与验证分离

有成功就有失败。登录验证不光要验证成功的test case,也要覆盖各种失败的情况:比如用户名/密码输入错误,按钮出问题,跳转界面不正确等等。因为用户名/密码输入错误比较常见,这次我们就用它举例作为登录模块的第二个test case。

打开RIDE,加载之前的项目,并在Tests –> Login模块里创建第二个test case TCLOG-2:

我把里边内容也写上了一部分。很好理解,登录失败和登陆成功一样,也需要在运行前后关闭其它浏览器,所以同样把Setup和Teardown步骤写好。还有一点一样的是,程序运行起来也需要从文件里读取数据,只不过是错误的数据罢了。经过分析,无非有以下几种可能的错误:

1) 员工代号没填;

2) 密码没填;

3) 员工代号不存在;

4) 密码和员工代号不匹配。

我们就以第4种情况为例准备数据写test case,选一个合法的员工代号,但错误的密码。在Test_Data ->Login下新建一个文件叫TCLOG-2.xls,还是用1001号员工,他的正确密码是123。我们随便写个错误密码,比如“321”:

然后仿照TCLOG-1,把读取数据的部分写进前两行,注意把文件名改成TCLOG-2.xls:

Test case主体写完了,该写函数了。先打开登录成功的函数Login to hrsystem复习一下 – 打开浏览器,输入员工代号密码种种,我们会发现对于登录失败用户也得执行这些操作,我们完全可以复制粘贴,唯一不同的是最后验证方式不一样。对于登录成功会出现导航栏Home按钮,登录失败会出现警告“usercode or password is incorrect”:

所以我们只要验证是否会出现红色警告即可。出现警告就是pass,没有警告就是fail。右键点击Pages里的Login.html资源文件新建一个叫Invalid login to hrsystem的Keyword,代表登录失败的函数,然后复制粘贴Login to hrsystem中的前几步。还有,别忘了把员工代号和密码参数放到Arguments域中:

我们既可以检查网页包不包含该警告在网页上的位置,用page contains element即可,以前在登录成功的例子中用的就是这种。当然也可以检查该警告的内容是不是目标字符串“usercode or password is incorrect”。我们这次用第二种方法,先把这个目标字符串声明成一个变量:右键ObjRepository -> Login.html -> New Scalar,输入变量${tLoginErrorMsg},值是“usercode or password is incorrect”:

运行测试时从警告的xpath取出字符串。如果和这个目标值相同就pass,不同就fail:

回到函数Invalid login to hrsystem,在最后加上如图所示的两句话:

第7行代表的是从变量${locLoginErrMsg}中取出值,然后赋给变量${tcurrentErrMsg},第二列“Get Text”表示从哪个变量取。${tcurrentErrMsg}不需要在ObjRepository –> Login.html里创建,因为它只是个本地变量,作用域只限于当前函数中,不需要在别的函数中引用,用完就完了。第8行的关键字Should be Equal As Strings接受两个字符串作为参数,目的是比较两个字符串是否相等,也就是把第7步从警告xpath里取出的值与目标字符串${tLoginErrorMsg}进行比较。

函数修改完毕,回到TCLOG-2,把函数写到test case中: 

运行测试,因为从xpath得到的字符串和目标字符串相等,测试通过。这就是验证登录失败的test case,在实际项目中与登录成功的验证同等重要。刚才也说了,两个函数Login to hrsystem和InvalidLogin to hrsystem前几步都是相同的,写两遍太累,与我懒人气质不符。写程序时我们的目标是能省就省,能不重复绝不重复。继续优化,我们可以把操作和验证分开,在一个keyword里只写操作,而用另外两个分别写登陆成功和登录失败的验证。

打开Invalid Login to hrsystem,把前几步都删除,然后把Login to hrsystem和它所需要的员工代号密码两个参数写到第一行,如下图:

在Pages -> Login.html中新建一个叫Valid Login to hrsystem的keyword,这个函数是专门用来验证登录成功的。和Invalid Login to hrsystem一样修改:

Login to hrsystem函数只保留操作步骤,把验证部分删除:

你看,这么一改,操作步骤用Login to hrsystem,验证分别用另外两个,彼此互不干扰。最后,回到TCLOG-1修改相应函数名,TCLOG-2不需要:

同时运行两个test cases,测试通过:

这篇文章的源代码在[Test5](https://github.com/cslm/cslm.robotframework/tree/master/Test5)中。

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

推荐阅读更多精彩内容