一.selenium的使用1.Selenium概述Selenium是现在使用最为广泛的一款开源自动化测试工具,也是非商业支持的稳定性易用性最好的一款自动化测试工具。和由HP提供强大商业支持的QTP相比,selenium不仅在软件投资上有比较大的优势,在针对web测试的稳定性上也有绝对的优势。以下介绍的内容会通过和QTP在各方面的比较中进行,并针对简单的测试样例,对基本的使用进行简单说明。2.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控件。3)其他:由于selenium的非商业支持,所以很多类似于QTP中的组件都使用了firefox插件的办法得到了补充。Firebug:帮助用户对页面上的对象进行识别,它可以准确捕捉到任何一个可见元素和不可见元素,同时支持由对象找代码和由代码找对象的使用方法,非常类似于QTP的spy和控件高亮显示功能。Xpather:帮助用户利用xpath标记对象的位置信息,根据xpath的实现方式,可以将页面上的每一个控件元素做唯一性标识,非常类似于QTP的对象库,区别在于Xpath只记录元素的位置样式属性,不会记录截图。3.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,执行runas的Junittest,就可以通过eclipse驱动脚本进行执行了。当脚本执行发生错误的时候,红圈部分标识发生错误的class,右键点击可以选择焦点跳转到出错的位置。红线部分为提示出错的内容。若脚本调试,环境设置都正确的时候,执行结果就会告知用户本次测试通过。4.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调用。5.Selenium的扩展使用1)对象识别的基础:xpathXPath类似档案系统的路径命名方式,“/”标识根目录,@标记标识该元素的属性,完整的一个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的功能,因此不在此文中进行描述,也是自身继续提高的下一个目标。二.如何看待自动化测试自动化测试广义说法包括,白盒自动化测试,GUI自动化测试,性能自动化测试GUI自动化测试的原理:通过软件模拟用户实际的鼠标和键盘操作,实现自动化执行和操作的过程。性能自动化测试的原理:通过客户端模拟多个虚拟用户并发请求,来检验服务器的性能行为是否满足系统要求。自动化测试的优点:1、通过录制,编写脚本执行测试,减少回归测试2、执行手工测试困难,或不可能做得测试,(模拟多个用户并发测试)3、更好的利用资源,(将繁琐的任务自动化,利用晚上或周末的时间进行执行自动化测试)4、测试具有一致性和可重复性,(重复多次相同的测试,在不同配置下执行,可以在不同的操作系统测试)5、测试的复用性6、缩短测试的时间和周期自动化测试局限:1、不能取代手工测试2、手工测试比自动化测试发现的bug要多3、自动化测试不能提高有效性4、工具本身不具有想象力5、对测试质量的依赖性极大三.元素定位webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法。1.工具选择在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成seleniumIDE的浏览器,并且firebug给用户提供了丰富的扩展组件,我们可以根据自己的需要来选择,一般情况下,使用firebug+firefinder就足够使用了,firefinder支持xpath以及css选择器定位元素的功能,很方便帮助我们调试测试脚本2.元素定位的方法findElement()与findElements():findElement()该方法返回基于指定查询条件的webElement对象,或抛出不符合条件的异常eg:driver.findElement(By.id(userID));findElements()该方法返回指定查询条件的WebElement的对象集合,或返回null3.各种定位元素策略ID:driver.findElement(By.id())Name:driver.findElement(By.name())className:driver.findElement(By.className())tagName:driver.findElement(By.tagName())linkText:driver.findElement(By.linkText())partialLinkText:driver.findElement(By.partialLinkText())css:driver.findElement(By.cssSelector())xpath:driver.findElement(By.xpath())4.ID、Name及Class定位webelement类提供了诸多方法,在我们开发脚本过程中如何选择最可靠,效率最高的方法,使用id,name是首选,因为他们在