计算机系统应用ISSN 1003-3254,CODEN CSAOBN E—mail:csa@iscas.ac.cn Computer Systems&Applications,2018,27(1 1):51—56[doi:10.15888 ̄.cnki.csa.006601] http:llwww.C—S—a.org.cn ◎中国科学院软件研究所版权所有. Tel:+86—10—62661041 基于Selenium的Web自动化测试解释器① 沈大框 ,黄永锋 ,罗保国 (东华大学计算机科学与技术学院,上海201620) (中国科学院软件研究所,北京100190) 通讯作者:黄永锋,E.mail:741239226@qq.tom 摘要:Selenium自动化测试工具在测试领域已经被广泛应用.使用时它需要依赖其它编译器或解释器才能执行测 试.一方面让测试人员需要熟练的编程技术才能使用,另一方面让测试开发难度过高.为了降低自动化测试门槛,针 对Web自动化测试设计了一种基于Selenium的解释器.首先深入剖析Selenium的测试原理,依据它测试接口的使 用状况对主要的测试类构建依赖关系,然后根据Web程序的测试需求构建解释器的各个模块.参照编程人员的编 码习惯和参考Python、JQuery等语法对每个模块的语法详细设计.最后设计一个具体的测试用例对解释器进行评 价.实验结果表明,该解释器克服了使用Selenium门槛高的缺点,让编写的测试脚本更加简短整洁,测试性能也有 明显的提高. 关键词:解释器;Selenimu;Web;自动化测试 引用格式:沈大框,黄永锋,罗保国.基于Selenium的Web自动化测试解释器.计算机系统应用,2018,27(11):51~56.http://www.C_s-a.org.crgl003— 3254/6601.html Web Automatic Test Inerpreter Based on Selenium SHEN Da—Kuang ,HUANG Yong.Feng ,LUO Bao—Guo (Computer Science and Technology Academy,Donghua University,Shanghai 201620,China) (Institute ofSoftw ̄e,Chinese Academy ofSciences,Beijing 100190,China) Abstract:Selenium automated testing tools have been widely used in the field of testing.In the scenario,they need to rely on other compilers or interpreters to perform tests.On the one hand,testers need sophisticated programming skills to use the tools,and on the other hand,test development is too dififcult.In order to reduce the automation test threshold,an interpreter based on Selenium is designed for Web automated testing.Firstly,it analyzes the testing principle of Selenium, and builds dependencies on the main test classes based on the usage of the test interface,and then constructs the modules of the interpreter according to the testing requirements of the Web program.For detailed design of each module’S syntax, we referred to the programmer’S coding conventions,Python,JQuery,and other syntax.Finally,a speciifc test case is designed to evaluate the interpreter.The experimental results show that the interpreter overcomes the disadvantages of using Selenium’S high threshold,makes the wriRen test script more concise and cleaner,and the test performance has also been significantly improved. Key words:interpreter;Selenium;Web;automated testing 21世纪以来,随着通信技术的飞速发展,互联网行 下的手工软件测试己经不能满足市场的需求,Web程 业市场份额所占比重越来越高.传统落后而且效率低 序自动化测试技术越来越受人们的重视.这几年,各种 ①收稿时间:2018—03.19;修改时问:2018.04.11;采用时fqn:2018—04.2O;csa在线出版时间:2018 10—24 System Construction系统建设5l 汁 机系统应用 http://www.C—S—a.org.cn 2018, l27珏 1 1螂 Web 动化测试工j }皮卡¨继摊J ‘技行,已经得到广泛 的应加.但这些测试l 』lt要研究浏览 中Javascript 试的流 和Selenium n勺测试功能的划分刈’ 幺 释器十jJ 建模块.从测试的需求ff 5发,使能卡』J 砹汁H 5一个以 的执 机制和它们对不 浏览器的兼容性.以此往原米 的基础』 丰富库函数,从而增_f『【J测试的功能和提高测 试: 具的稳定性.虽然这些测试工具功能全面,能够 l: 繁琐的仟务一动化, 省人 资源,降低测试成本. 是近 -2的研宄只是对测试工具的助能积木式的累JJl】 并没有实质的创新 j突破.人多数测试 具依然 借助传统的编译器才能执行测试.这需要使用者 桥 Selenium为后端,更7JlJ符合人们使川 惯的 本解释 器.最终期望测试人 使JI J该解释器能够降低『1动化 测试的门槛币lJ提高测试J}:技n勺效 l解释器的模块构建 1.1 Selenium的工作原理 Selenium升级到2.0以 ,它- ^发眨J Selenium ‘定的编程能力,I 儿测试脚本开发成本较高.所以 1卜Web软件自动化I:具的发展依然 测试具 很 的门槛【¨j. H前,较为常见的Web¨动化测试]二具集主要也 Ranorex、QTP WinRunner、Selenium、Watir、 Sahi等.前三者是商川的Web程序自动化测试工』} 功能强人但价格昂 . 哲足外源的Web程序I l zJ|J 化测试1: .虽然存使川【 比/f 上商用所能提供便利的 uJ 视化效果和舒适的使川办式,但是己经能够满足测 试人员的使用需求. }1.web应用不同于传统的 Window应用,Web产:一l^ 有产品数量大、产品变化 快、对硬件环境和 络敏感等特点.所以人们会去优先 选川像Selenium这种胀容性较强的测试工具 ]. 事实上,SeleniUnl测试 具是历史发展最为悠 久、测试功能最为个= 、脚本支持最多的测试框架. Selenium口J‘以音口署 :Windows、Linux和macOS J1 台 已支持脚本的录制 引司放功能,通过Selenium IDE米录制测试脚本,并提供uI编辑中间的任何步骤. 录制保存后可以后可以使用Se1 enium RC或者 Selenium WebDriver来l口J放录制内容.录制的脚本被记 录在Selenese中,这足‘种针对测试Web应用程J 的 Selenium命令集.仉是它的命令集不具备编程语吉的 特性,只能处理简单的测试单元.实际应用中,人们很 少使用Selenese来编写测试 }_}]例,而是使用Java, Python Ruby等_5J _所以本文选择以Seleniu11"1为切入点,从研究 Selenium的测试机制…发,设计一个专用的Web 动 化解释器.该解释器能实现测试脚奉与测试数据的分 离、自动生成测试报街 1支持半自动化测试,从而提高 Web自动化测试的莱性和实用性.通过分析Selenium WebDriver API中的测试功能来构建测试的类的依赖 父系,把Selenium测试功能划分成为一个层次分叫干¨ 分工明确的结构体.然后根据Web应用程序自动化测 52系统建设System Construction WebDriver.由之前的必 』 ;动Selenium Server使J 与各个浏览器进行通 i爻1f 发J 剑“按州rH浏览器小 身的WebDrive驱动进 j浏览 的会 ,‘.绕过JavaScript 沙箱,提高r Selenium的测 效 刈‘ 个浏览器的 兼 性。 1足Selenium的测 . 代的Selenium 做web软件[]动化洲试,小埙f 址渊川Sele11iUlll API关J WebDriver的API.WebDriver址嵌入 :浏 器 {l1的驱动,能够直接渊川浏。 器的 t-JavaScript l水 控制浏览器,相当丁模拟人类对浏览器的操作./』l】 t 1f 某个位置、给某个输入 输入键 等.小 从Selenim11 WebDriver入手,着 分 WebDriver API接I】的特 点,先对Selenium测试进 馍块拆解,然 埘m午释器 行模块建立I . 1.2构建解释器模块 根据SeleniumAPl迎{=、 ,.Selenium对浏 器的 制操作牛要放在了RemoteWebDriver、RernoteWeb— Element、RemoteWindow Actions返 U个类l1I.j1I=『- 2018年第27卷第11期 http://www.C·S·a.org.cn 计算机系统应用 个类分别表示浏览器、控件、和窗口层次的概念.浏 览器位于最高层次,RemoteWebDriver类中的方法能 用它所依赖的程序语言人工编程实现.这也就给测试 带来很多额外的开发成本.从测试需求出发,在解释器 设计阶段给解释器增加数据验证与检查模块.这样能增 够对浏览器和窗口的特性进行控制,也可以对控件进 行查找并创建控件对象.RemoteWebElement类里包含 控件的属性值和控件的动作,它自己也提供对控件的 查找与创建.RemoteWindow类中包含窗口的属性值和 窗口的动作,但是它必须通过浏览器来创建并控制窗 口的动作.图2是三个测试类之间的依赖关系. Actions类对上述三个类测试功能的扩展,一方面它提 加解释器的可扩展性,降低测试脚本、测试数据和测 试报告之间的耦合性. 供了模拟鼠标和键盘的一些动作以及组合键使用.另 一方面Actions类既可以完成控件单一的动作,也可以 把多个动作合成一个具有测试顺序的组合动作.综上 所述,根据这几个类提供的测试方法对其进行分类,可 以把Selenium的测试分为5个模块,分别为:获取控件 属性值,获取窗口属性值、控件定位、执行控件动 作、执行窗口动作,这也是对应解释器的初始模块. RemoteWebDrivet +Title:String +Url:String +Handle:String +Navigate0:Void Create +Close0:Void +FindElement0:RemoteWebElement +Manage().Window:RemoteWindow RemoteWebElement RemoteWindow +Text:String +Tagname:String +Position:Point +Size:Size  ̄-Click0:void +Maximize:void +SendKeys0:void  ̄-FindElement0:RemoteWebElemenl 图2测试类之间的依赖关系图 在Web自动化测试中,除了对浏览器的窗口与页 面进行模拟人类的操作.还需要去检查页面的属性值 是否和预设的结果一样,以及触发某一动作后,检查一 下该动作是否触发成功.所以除了根据Selenium提供 的API把解释器构建成上述5个模块以外,还需要根 据实际的测试需求增加数据的验证.上述5个模块的 测试都需要进行数据验证,它们共同指向数据验证模 块.如图3是解释器的模块结构图.SeleniumAPI中没 有对数据验证提供相关的接口,需要测试开发人员使 图3解释器的模块结构图 2解释器语法的研究 Selenium使用Java、Python、Ruby等编程语言编 写的测试脚本,一方面开发难度较高,另一方面可读性 较差.本文研究的基于Selenium的解释器是专门针对 测试的,避免了像Selenese那样仅提供测试指令集,无 法进行具有控制逻辑的测试.解释器的基础的语法参 照Python和Octave等解释器型的语法规则,删除了与 测试无关的部分,同时也根据测试的特点进行改进和 增添新的测试使用方式.该解释器仍包含一般编程语 言具有的基本模块如变量与常量、表达式、算术运算 符、关系运算符、逻辑运算符、条件语句、循环语 句、宏定义、内部函数与外部函数、输入与输出等. 这使得解释器能完成具有复杂逻辑的测试需求,同时 简化整个编译器的语法,降低使用难度. 2.1窗口属性值和控件元素属性值获取模块 在测试的过程中,经常有获取浏览器窗口与控件 元素属性值的需求.如获取这些属性值来验证它们的 正确性或者暂时保存下来给后续的测试步骤使用.窗 口属性值主要包括窗口的URL、窗口的标题、窗口 的Handle、窗口的Bodv内容等.控件元素的属性主要 包括xY(横纵1坐标、元素的标签名、元素的属性 值、和元素的CSS属性值等.如果用Java或Python的 Selenium来获取上述属性值,则需先创建窗口或控件 的对象,然后调用对象里的方法来实现,这需要测试人 System Construction系统建设53 计算机系统应用 http |f、≯『、 nN.C—S—a.org.cn 2018年第27卷第11期 员有面向对象的编程思想,并且开发步骤繁琐.参考 Javascript的框架JQuery获取元素对象的方法,Selenium 解释器可以使用¥(string name)来获取窗口的属性 值,其中括号里的变量为窗口属性的名称.用¥( var)、 ¥(.class)、¥Cattr)等获取控件元素的属性值,其中 var表示控件元素特定简写值如x、Y分别表示坐标; class表示控件元素的class属性值:attr表示控件元素 的Attirbute属性值. 2.2控件定位模块 Selenium在获取当前页面的控件元素时,通过筛 选方法来得到控件对象.使用时需要调用FindElement (string type,string value)函数,它传入了两个参数:定 位方式和定位的属性值.解释器依照上述使用方式,把 定位方式定义到脚本的语法层次.根据web程序测试 的特性,Selenium提供了8种控件查找方式,分别是 Xpath、LinkText、Id、Tagname、ClassName、 Name、PartialLinkText、CssSelector.为了提高控件抓 取的效率,和抓取控件的多样性、以及符合编程人员 的使用习惯,解释器参考JQuery和W3C对网页的定 义的标准,用@/xpath、@&LinkText、@#id、 @<t a g n a m e、@.C l a s s N a m e、@ n a m e、 @-PartialLinkText、@*CssSelector来表示控件的定位. 2.3窗口与控件的动作执行模块 执行动作包含两类动作:一是当前控件的动作,二 是浏览器的窗口的动作.控件的动作包括点击、文本 框传入键值、移动鼠标到指定位置等.浏览器的窗口 动作包括打开某一版本的浏览器、切换窗口、导航窗 口到指定链接、处理弹框等.执行动作时与函数的调 用一样,把动作执行看做内部函数的调用.直接使用函 数名称并传入相应的参数来实现,比如OpenWindow (string ur1)表示当前浏览器打开一个指定URL的新窗口. 2.4验证与检查模块 Web软件自动化测试要求在测试某个功能后,需 要检查该功能的正确性.即验证当前页面或者经过某 次执行动作后页面的一些属性值与给定的参数值是否 相等.验证检查需求有很多,如验证窗口的URL、控件 元素的标签名、某个Select控件是否被选中等.使用 Java或Python的Selenium做Web自动化测试验证, 需要根据根据测试报告的格式定义数据结构,然后手 工编程实现判断验证内容的正确性,最后把验证结果 写入测试报告对象中,它们均不能自动生成测试报告. 54系统建设System Construction 在解释器层面先引入测试步骤的概念,并在它内部预 先定义好通用的测试报告格式,这些测试报告可以用 外部配置文件去修改,以便兼容其他平台或公司内部 测试报告格式.使用验证表达式!(¥(ur1)=:ur1)能够直 接完成上述验证测试的需求,并把验证结果写入到测 试报告 J. 2.5半自动化测试 解释器为了适应市场的需求,率先提出“半自动化 测试”的思路,在适合自动化执行的地方嵌入机器代码, 在不适合于自动化的地方仍旧由人工进行.脚本中嵌 入/1:message,解释器遇到这行代码会弹出提示信息, 提示信息即脚本中的message.测试人员可以先手工测 试一段难以实现自动化的步骤,并填写是手工测试的 完成情况,然后点击弹框的确定按钮,解释器会继续执 行后续的测试.这种设计方案中,提供人工操作与机器 代码执行可随时切换的功能,从而让测试团队在安排 自动化测试的任务时更加灵活. 2.6解释器执行过程 解释器(英语:Interpreter),是一种计算机程序,能 够把高级编程语言逐行解释运行.在本文设计的解释 器中,它先调用词法分析器取得Token,每遇到一个终 止符就调用语法分析器生成语法树.然后调用已经封 装好的基于C拌的Selenium特征库,执行该语句.浏览 器web页面会接收到解释器发来的命令,处理相应的 动作.总之解释器的目标是努力向前按步执行下去,直 到脚本程序执行结束 Ⅲ.图4是自动化测试解释器流 程图. 3解释器的测试与评价 3.1解释器的测试 为了证明该解释器的功能性、测试脚本的简易性 和可阅读性.专门设计一个登陆验证的测试用例,然后 使用本文设计的解释器对测试用例进行脚本开发和测 试执行.登陆验证通过对登录名和密码的输入框分别 键值为空、键值错误信息、键值正确信息,一共9种 情况,然后点击登录,验证登录结果与预先设定的结 果是否一致.这9组数据全部测试通过,登录验证功能 才能判断为通过【l”.登录验证的测试脚本和测试报告 如下: Import E:/login.CSV as¥var//导入数据源 Chrome(56)//启动chrome 56版本 2018年第27卷第1 1期 http://www.C—S—a.org.cn 汁算机系统 川 lmplicitlyWait(60)//设置 局等待时间为60 S Navigate(http://localhost:8088/biz/login/toLogin.do) 于Selenium的其他语言,得出该解释器的执仃效率也 有所提升.总体来说本文设计的解释器在Web 动化 测试方面具有更高的实用性和优越 //导航到指定链接 while(¥var1//开始循环 @#admin code//按照id admin code杏找控件 SetElementText(¥user)//输入框先清空在传值 @#password SetElementText(¥pw) @#1ogin—action clickElement(1//鼠标左击控件 @#message !(¥( N)==¥text)//验证登录并记录测试报告 endwhile//结束循环 Fial Checkpoint Test Cyele Fail Cycle Fial Rate 的【}j r】 . 的密码l I I() 的川 乞.1}f 的密1_;ij l () ’ ()t 的刚r_杞. 确的密码 I 【 J’ ()% 锵谋的川 . 的密码 l () ’( 锵 的川 名,}持嵌的密蚂 l (1 ()% 铸隈的川 , 舶的密码 l 【 1() 确的川 韶, 的密码 1 (} (}% 正确的川r】瓠.铺 的密码 l ll(1( 确的川rl靶, 确的密码 1 { I 。0% 从上述测试脚本看出,儿乎每行测试脚本都能看 到测试的影子,脚本具有极强的可读性.十几行代码就 实现一个完整的登录验证测试,并能自动生成测试报 告.说明该解释器语法的设计很适合进行Web自动化 测试,测试开发很容易实现. 3.2解释器的评价 为了能综合评价该解释器的实用性,使用本文'l殳 计的解释器与Selenium的Java、Python和Ruby版对 上节登录验证的测试用例在9组登录数据上进行了脚 本开发,并执行测试.脚本开发过程巾对开发难度做和 测试数据卜j测试脚本分离难度做了评估.测试过程中, 采集了测试片{例的运行时间.最后综合从开发难度、 是否生成测试报告、是否支持半自动化测试、测试数 据与测试脚本分离难度和运行时间5个维度综合评价 解释器.其【f】运行时间能有效评估解释器的执行效率. 表1是Selenium测试的比较. 由此叮 ,本文设计的解释器更加容易实现测试 开发和测试数据和测试脚本的分离.并且解释器增加 了白动生成测试报告和支持半自动化测试的功能.一 定程度上增强了该解释器的实用性.1}J表中的运行时 间数据,该解释器在 一个测试用例卜的运行时问少 冈4『J动化测试角牟释 流 表1 Selenium测试的比较 4总结与展望 本文从解释器的研究出发优化J Selenium 勒化 测试,初步设计 一个 门 于Web} j动化测试n,j 释器.该解释器的语法从测试角嫂f JJ技,使得洲 人 j 更加容易学习和使用.从实验 可以看…j jJ Selenium的解释器【叮以降低测试人 的使用『J ,抛 升测试的效率,具有 高的使用价值. 当前 补 刈 Web测试的语法还 够精炼和龙泞,解释器的稳 t 计算机系统应用 http ffwwW.c-s—a.org.cn 2018年第27卷第11期 和执行效率还有很大的提升空间.未来将会在这两个 方向去做更深入的研究. Computer Science and Technology,2017,32(1):199-210 [doi:10.1007/sl 1390—017—1699一x] 6石敏.面向Web网页的自动化测试技术研究f硕士学位论 参考文献 1马春燕,朱怡安,陆伟.Web服务自动化测试技术.计算机 文1.上海:东华大学,2014. 7张竞帆.基于Selenium的一种Web自动化测试系统的设 计与实现【硕士学位论文].北京:北京交通大学,2017. 8 Barany G.Python interpreter performance deconstructed. Proceedings of the Workshop on Dynamic Languages and Applications.Edinburgh,United Kingdom.2014.1-9. 科学,2012,39(2):162—169.[doi:10.3969 ̄.issn.1002—137X. 2012.02.038] 2 Satheesh A,Singh M.Comparative study of open source automated Web testing tools:Selenium and Sahi.Indian Journal ofScience&Technology,2017,10(13):1 9. 3黄华林.使用Selenium进行web应用自动化测试的研究. 电脑开发与应用,2012,25(4):54—56.[doi:10.3969 ̄.issn. 1003—5850.2012.04.019] 4沈佳宇,喻擎苍.基于Watir框架的Web自动化测试.电脑 编程技巧与维护,2012,(14):95—96,158.[doi:10.3969 ̄.issn 1006—4052.2012.14.039】 5 Qi XF,Wang ZY,Mao JQ,et a1.Automated testing of web applications using combinatorial strategies.Journal of 56系统建设System Construction 9 Cao L,Dong KJ,Yuan BW.Design and implementation of a test automation platform for Web applications based on selenium.e—Science Technology&Application,2014,5(6): 44--52. 10张军林,阳富民,胡贯荣.JavaScript语言解释器的设计与 实现.计算机工程与应用,2003,39(30):124-125.[doi: 10.33210.issn:1002—8331.2003.30.039] 11尹帮治.一种新的网站用户登录验证方案.微型电脑应用 2008,24(1O):13—15.[doi:10.3969 ̄.issn.1007—757X.2008. 1O.0051