基于Selenium JS UI的自动化测试框架设计与实现
2017-09-22任洪敏
李 艳,任洪敏,刘 芳
(上海海事大学 信息工程学院,上海 201306)
基于Selenium JS UI的自动化测试框架设计与实现
李 艳,任洪敏,刘 芳
(上海海事大学 信息工程学院,上海 201306)
Web技术的发展,以及Web UI组件的广泛应用,给自动化测试带来了挑战。因此设计了一套基于Selenium JS UI的自动化测试框架。该框架结合了TestNG、Selenium框架,并且利用了关键字驱动、数据驱动技术。将框架分为关键字、测试用例、执行引擎、配置报告四层,使测试用例、测试脚本、测试数据相分离,跨平台,不仅解决了自动化测试定位难的问题,而且大大提高了测试效率。
自动化测试框架;Selenium;Web UI组件;关键字驱动
0 引言
目前大多数企业的应用系统都是基于Web的应用系统,人们可以通过Internet浏览器来访问它们。当前很多公司采用持续改进的开发模式来应对这种趋势。在持续开发模式中,需要不断地进行迭代测试。传统人工测试会变得缺乏效率,很难满足需求,这个时候必须引入自动化测试[1]。自动化测试框架是由一些假设、概念和为自动化软件测试提供支持的实践组成的集合[2]。目前的自动化测试框架主要分为录制回放、数据驱动技术、关键字驱动技术、数据驱动技术、混合型驱动技术等[3]。
文中提出一种基于Selenium JS UI自动化测试框架,主要针对Web系统页面频繁变化问题,提出一种新的UI定位方法,结合混合型驱动测试框架设计一套能适应于不同Web 应用系统的测试方法,该框架将测试脚本及测试数据相分离,提高了测试脚本的可复用性及测试效率。
1 基于Selenium JS UI 自动化测试框架
1.1自动化测试框架工作原理
自动化测试平台是将多个开源软件组合进行二次开发,结合不同的框架优势,从而达到更好的测试性能。主要完成的工作是:调研不同的Web UI组件库,将UI通用操作设定为关键字,并将关键字保存在关键字库中,提出一种新的UI定位方法,基于Web应用系统,定位页面元素和操作,并从关键字库中提取相关关键字,实现关键字函数,生成一套测试用例的语法规约,编写执行引擎,由执行引擎去调度测试脚本,并监听测试结果,按自定义格式生成测试报告。
1.2自动化测试框架架构
自动化测试框架总体架构如图1所示,主要分为关键字层、测试用例层、执行引擎层、配置报告层四大层。
图1 自动化测试框架结构图
(1)关键字层中主要包含关键字的定义、关键字函数的实现以及关键字库管理等。关键字库管理主要用来管理关键字、对其进行增删改等操作。
(2)测试用例层中包含测试用例语法规范以及测试用例集,测试用例采用Excel表格维护,一行代表一条测试用例,测试用例由测试例名称、测试步骤序号、测试步骤描述、关键字和操作值,以及测试结果组成。
(3)执行引擎层主要负责解析测试用例,提取关键字和操作值并进行整合,以此执行测试脚本,完成自动化测试及生成测试报告等。
(4)配置报告层主要是配置文件的输入,以及测试报告的输出。
2 Web UI测试关键字定义与实现
2.1界面元素定位技术
Selenium 测试工具操作简单,功能比较单一,对Web UI 元素支持不全面,最常用的是采用Xpath定位技术,但Xpath定位的不稳定性及冗余性给测试人员带来诸多麻烦,因此本文提出一种新的UI元素定位技术,在Web UI类库中存放UI组件库和接口的方法。Web 应用系统中UI定位从被测系统页面入手,采用JS 和Web UI库中组件接口和方法定位页面元素,代替了Selenium 库函数中的findElement(By. xpath(“***”))对页面元素的定位,减少了Xpath的使用,使用Web UI定位技术的优点是定位精确,且效率高。
2.2定义关键字
关键字的思想是将界面元素名与测试工具对象名的分离、执行动作与具体实现细节的分离以及测试脚本与测试数据的分离[4]。文中提出调研不同的Web UI组件库,将这些UI库中都具有的、常用的Web UI组件:执行动作定义为关键字,将这些关键字保存至关键字库中,除这些关键字之外,还会增加一些特定的关键字,即检查点函数。如通常会比较两个String 数组是否相等以及获取当前行数等,这些都是与特定的Web程序无关而且本身API没有提供这些函数[5],将这些自定义的关键字收集起来统一放在关键字库中,进而可应用于不同的Web 项目中。表1以jEasy UI中DataGrid 控件为例,说明定义关键字的方法。
2.3实现关键字
关键字的设计是将执行动作与具体实现细节进行分离,为了增强测试脚本的可复用性,需要将测试数据和界面元素从测试脚本中独立出来并存于专用文件中,形成相
表1 定义关键字方法表
应的测试数据集和函数库。关键字的实现是自定义的函数库,函数的命名是与关键字对应的。将页面元素的关键字参数作为函数的参数调用,采用JS框架语言编写脚本函数。它具体依赖于Selenium 测试工具,Selenium的函数getEval提供了在网页中执行自定义javaScript脚本的能力[5]。关键字函数脚本实现具体如下所示:
function getRows() {
$(‘#showUser’).datagrid(‘getRows’);
}
function selectRow(index) {
$(‘#showUser’).datagrid(‘selectRow’, index);
}
function refreshRow(index) {
$(‘#showUser’).datagrid(‘refreshRow’,index);
}
function deleteRow(index){
$(‘#showUser’).datagrid(‘deleteRow’,index);
}
2.4关键字库
对于关键字库中的关键字,在对不同Web应用系统进行测试时,这些关键字可以完全复用,根据业务逻辑、测试数据的一些差异选择关键字,不一定所有的关键字都能用上,还需进一步筛选。建立关键字库的目的是用来对关键字进行维护、扩展及优化。
3 Web UI测试用例的规约
3.1测试用例语法规约
基于上文定义Web UI关键字的方法,结合数据驱动思想,提出一套测试用例的定义语法规范,并将此规范用BNF范式描述,用户可根据此规范来编写测试用例。语法规约具体如下:
<测试用例>::=”(“<测试用例名称>”,”<测试步骤序号>”,”<测试步骤描述>”,”<关键字>”,”<操作值>”)”
<测试用例名称> ::= <句子>
<测试步骤序号> ::= <数字>
<测试步骤描述> ::= <句子>
<关键字> ::=<标识符>
<操作值> ::= <数字><字符串><数组>
<句子> ::= {{<字母>},{<字母>}}
<标识符> ::= <字母>|<标识符><字母数字串>
<字母数字串>::=<字母><数字><字母数字串><字母><字母数字串><数字>
<字母> ::= -<大写字母><小写字母>
<小写字母> ::= a|b|c|d|e|f|g……
<大写字母> ::= A|B|C|D|E|F|G……
<数字> ::= 1|2|3|4|5|6|7|8……
<字符串> ::= <字母><字母><字符串>
<数组> ::= <数字><数字><数组>
3.2测试用例结构
本文中提出的测试用例采用Excel表格维护,测试用例文件中包括:测试用例名称、 测试步骤序号、测试步骤描述、关键字、操作值及测试结果。具体如表2所示。
表2 测试用例结构表
4 执行引擎
Web 自动化测试就是通过自动化测试工具打开被测试页面,通过键盘和鼠标,点击或操作该页面中的被测试对象,判断整个程序的正确性[6]。本文中的执行引擎图如图2所示。
图2 执行引擎图
执行引擎是整个测试的核心,实现了测试框架中所有的功能。主要是测试行为的控制,根据XML 文件配置目标路径加载测试用例,同时发出数据驱动引擎来解析测试用例文件[7],每一行数据都是测试用例,可被框架解析,实现数据驱动[8],由解析到的测试用例中的测试步骤、关键字及操作值,匹配关键字脚本,在测试脚本函数库中调用并执行相应功能函数,组合生成Selenium 测试工具可以执行的脚本。由Selenium 中的WebDriver对象来驱动浏览器,按照测试用例的要求,对界面的元素,通过Selenium 的API模拟人工操作,完成与浏览器的交互,最终实施自动化测试,执行引擎将测试步骤结果记录在测试用例文件中,每个测试用例执行完毕之后,检查点函数对测试用例进行校验,并记录每个测试用例的执行结果。
框架中提出的测试报告在TestNG基础上构建,可通过XML配置文件对测试用例进行设定,比如测试的执行顺序以及依赖关系等,同时集成Log4j框架测试详细信息,结束后会生成一个详细的测试结果报表,同时框架中设定一个变量对每个测试步骤进行监控,将单个测试结果写入Excel测试用例特定列中,在这些情况下方便测试人员定位详细信息。
5 结束语
文中提出了一种基于Selenium JS UI 的自动化测试框架,该框架采用混合型数据驱动技术进行开发设计,以关键字为核心,提出一种新的UI定位方法,可以运用在不同Web 程序中。该框架具有独立性,在运用时可根据Web 程序特点进行扩展及设计,但目前还存在不同之处,如何更好地设计关键字库,更好地设计编写测试用例,以及更好地输出详细的日志报表文件,是以后重点的研究方向。
[1] 温素剑.零成本实现Web自动化测试-基于Selenium WebDriver和Cucumber[M].北京:电子工业出版社,2015.
[2] 周娟.蒋外文.基于Web的自动化测试框架[J].计算机工程,2009,35(18):65-66.
[3] 吴伶琳.基于关键字驱动的自动化测试的研究与实现[J].电脑与信息技术, 2013,12(6):47-48.
[4] 王磊.关键字驱动的自动化测试框架设计与实现[J].电子测试,2010,8(8):87-88.
[5] 陈江勇,许力.Web 自动化测试框架的设计实现[J].福建师范大学学报(自然科学版),2013,29(4):42-44.
[6] 陈斌仙,陈佳丽,陈阿妹.基于Selenium的自动化测试研究[J].赤峰学院学报(自然科学版),2016,32(9):19-21.
[7] 冯振华,高菊,曾红卫.Web应用自动化测试的研究[J].计算机工程与设计,2010,31(1):175-178.
[8] 赵金丹.基于Selenium的Web自动化测试脚本设计研究[J].科技传播,2014(1):94-95.
Design and implementation of automated testing framework based on Selenium JS UI
Li Yan, Ren Hongmin, Liu Fang
(College of Information Engineering, Shanghai Maritime University, Shanghai 201306, China)
The technological development of Web and the extensive use of its UI components pose great challenges to automated testing. Hence this thesis designs a set of automated testing framework, which is based on Selenium JS UI and integrated with TestNG, Selenium framework under the help of keyword-driven and data driven technologies. Dividing the framework into four parts which are keywords, test case, execution engine and configuration report to segregate testing case, script and data, it not only solves the problem of locating in automated testing, but also greatly improves the testing efficiency.
automated testing framework ; Selenium;Web UI components; keyword-driven
TP92
:A
10.19358/j.issn.1674- 7720.2017.17.007
李艳,任洪敏,刘芳.基于Selenium JS UI的自动化测试框架设计与实现[J].微型机与应用,2017,36(17):24-26,30.
2017-03-14)
李艳(1990-),女,硕士,主要研究方向:软件开发与项目管理。
任洪敏(1969-),通信作者,男,副教授,主要研究方向:软件工程。E-mail:hmren@shmtu.edu.cn。
刘芳(1991-),女,硕士,主要研究方向:计算机系统应用。