一 Selenium概述:
Selenium是现在使用最为广泛的一款开源自动化测试工具,也是非商业支持的稳定性易用性最好的一款自动化测试工具。和由HP提供强大商业支持的QTP相比,selenium不仅在软件投资上有比较大的优势,在针对web测试的稳定性上也有绝对的优势。以下介绍的内容会通过和QTP在各方面的比较中进行,并针对简单的测试样例,对基本的使用进行简单说明。
二 Selenium的组成:
和QTP等其他工具类似,selenium也有几个组件组成,同时在使用的时候还需要一些开发的IDE平台进行支持。
对于初步的简单使用,需要先掌握seleniumIDE,RC的基本使用,以及对象识别方式Xpathe的基本知识。
1) seleniumIDE:
selenium和QTP类似,同样需要先进行一定的脚本录制工作,而它默认支持的录制浏览器是firefox,IDE就充当了一个脚本记录的工作,它的表现形式为firefox的一款插件。
它可以记录准备过程中,用户在firefox上的制定网址下所做的一切操作,并转化为自己需要的一种开发语言,包括:java、perl、PHP、C#、Ruby等等。
2) RC:
RC是selenium的特色组件,它通过从底层向不同的浏览器发出动作指令,达到用脚本控制web的效果,和QTP的activeX驱动的模式有着本质的不同,只要浏览器的动作指令原理不发生本质性的变化,就可以利用selenium达到自动化测试的效果,不会由于出现新的浏览器,还要等待HP重新开发相应的activeX控件。
其他:
由于selenium的非商业支持,所以很多类似于QTP中的组件都使用了firefox插件的办法得到了补充。
Firebug:帮助用户对页面上的对象进行识别,它可以准确捕捉到任何一个可见元素和不可见元素,同时支持由对象找代码和由代码找对象的使用方法,非常类似于QTP的spy和控件高亮显示功能。
Xpather:帮助用户利用xpath标记对象的位置信息,根据xpath的实现方式,可以将页面上的每一个控件元素做唯一性标识,非常类似于QTP的对象库,区别在于Xpath只记录元素的位置样式属性,不会记录截图。
三 Selenium的简单使用:
1) 测试的准备工作:
这里所说的准备工作,只一个自动化测试的准备,预计基本的测试用例等内容已经准备完成。
假如被测系统为ADCPX:
首先:用firefox打开被测系统的首页,启动IDE插件。
需要注意的是,IDE的baseUrl一定是当前要测试的web首页,默认生成的第一个testcase的名称可以通过属性进行更改。一个IDE中可以录制或生成多个testcase。
通过IDE的options-format,调整source中的显示内容,只有显示HTML的内容时,才能对代码进行手动调整,增加或减少动作。
当format为HTML时,可以激活table标签,对录制的内容进行手动调整。这部分基本上可以理解为QTP的关键字视图。Table整体分上下两部分,上边是已经录制的动作效果,下边可以手动添加新动作或修改已有的动作。
Command:动作的基本指令,录制会自动记录,也可以点击下拉列表选择适当的指令;
Target:实现动作的位置,也就是在哪个控件上完成动作,这里结合了XPath的内容,因此这里显示的都是xpath路径,而因为开始录制时已经设定了首页的地址,所以当前的首页地址用”/”标识,其他元素遵循xpath规定。
Value:根据实际内容填写。
在这里可以手动的增加两种页面校验:verify和assert。他们都能对显示内容,输出内等做验证,区别在于:
Verify:验证出现问题时,脚本的执行不会停止,会在最终结束时给出提示;
Assert:出现异常马上终止所有的脚本执行;
这个可以结合QTP的检查点进行联想,不过selenium的检查更为灵活。
2) 单一脚本回放
在IDE中准备好基本的脚本后,确定输入内容正确无误,也做好了验证设定,可以回放当前脚本,最终IDE会给出提示通过情况和不通过情况。
多个testcase可以设置运行不同的场景,通过java的变量等内容进行不同的用例测试;
至此,IDE的工作已基本完成,可以进入真正的自动化测试操作。
3) 调试selenium的自动化运行环境RC:
i. 配置java运行环境,JDK和JRE以及系统环境变量;
ii. 安装集成开发环境,因为选择使用java语言进行执行,所以我选择了比较实用的eclipse作为执行平台。
iii. 在eclipse创建一个javaproject;
其他内容可默认,也可根据需要新建不同的目录。
选中新建的project,通过属性的javaBuildPath,加载一个外部jar包,选中selenium-remote下的selenium-server.jar文件,build进project中,至此才能由eclipse驱动脚本进行测试。
iv. 把脚本放入eclipse:
首先需要生成一个JUnitTestCase,推荐使用Junit3,名称要保持和IDE中的testcase一致;
上图为基本脚本放入eclipse最初的状态,语法调试和基本使用完全遵循java在eclipse中的使用规范。
可以根据具体情况,建立多个JUnitCase,分别针对不同内容进行测试。
由于在IDE中已经对脚本进行初步的回放调试,在eclipse中就可以直接执行了。首先:启动remote组件。
在cmd中运行java –jar\selenium-server-1.0.3,确保代理服务正常运行;
右键选中要执行的Junitcase,执行run as的Junit test,就可以通过eclipse驱动脚本进行执行了。
当脚本执行发生错误的时候,红圈部分标识发生错误的class,右键点击可以选择焦点跳转到出错的位置。
红线部分为提示出错的内容。
若脚本调试,环境设置都正确的时候,执行结果就会告知用户本次测试通过。
四 Selenium结合eclipse的高级使用:
Selenium的强大之处就在于可以使用集成开发环境,让用户使用自己最熟悉的开发语言进行调试操作。IDE仅是最最基本的准备,真正的自动化工作,是由java等开发语言和selenium的外部jar进行支持的。
首先在eclipse中,引用了selenium-server.jar后,可以使用众多的class,输入“selenium.”可以自动列出所有可用的class,对于输入一半的命令,可以通过“alt+\”进行补全操作。
1) 把用例放到脚本中执行:
类似于QTP的参数化,只不过这里使用的是生成变量的办法,将需要替换的内容创建变量,统一由变量进行修改,当然结合数组进行一定的循环,可以达到更好的效果。然后根据验证的内容,选择对检查内容使用verify验证或assert验证,达到最终执行用例的效果。
2) 对数据库的检查:
QTP中的数据库检查点原理,就是通过执行指定位置的查询,然后设置搜索结果的过滤条件,判断是否通过。使用selenium,则直接使用java的数据库连接语句和查询语句进行操作,同样在查询条件上加verify或assert验证。
3) ERP等专门针对流程的项目测试:
通过实际的使用经验发现,当使用QTP进行流程类操作,需要引用大量变量的时候,非常容易引起工具的崩溃,当选择selenium的时候,可以非常好的避免这种情况的发生。因为selenium是真正的通过编写代码实现驱动的测试工具,而且所有的变量直接写在语句中,所以当出现流程测试的时候,可以将不同的步骤和场景分别写在不同的class里,变量声明为public的形式,方便任何包中的class调用。
五 Selenium的扩展使用:
1) 对象识别的基础:xpath
XPath 类似档案系统的路径命名方式,“/”标识根目录,@标记标识该元素的属性,完整的一个xpath语句标识一个指定的元素,在每一个页面上标记该页面的特有元素。
例如:
/html/body/div[@id='main']/div[@id='header']/div[@id='topNav']/div[@id='channel']/ul/li[2]/a/span
从左到右,从大到小的范围,确定这个元素最终是一个span标签,而它必然是在前面一层一层的过滤限定之下的,也就是说在当前这个页面上(根是10.0.0.116),必然存在且唯一存在一个元素可由上面的xpath语句进行识别。
Xpath可以手动在eclipse里进行编写,也可以在IDE中进行先期编写,最简单的办法是通过firefox的相关插件,直接获取到某个元素的xpath值,再根据比较,在代码中替换变量,通过循环或其他办法增加代码的自动化执行效果。
2) 从构建版本到发送测试报告的一路自动化:selenium+ant
这里主要使用的是ant的版本构建功能,这部分更多的利用的是ant的功能,因此不在此文中进行描述,也是自身继续提高的下一个目标。