一种Web应用程序自动化测试工具及方法与流程

文档序号:12464248阅读:554来源:国知局

本发明涉及一种Web应用程序自动化测试工具及方法,属于软件测试的应用领域。



背景技术:

大型软件的测试是一件复杂而耗时的工作,自动化测试为测试程序的编写提供了很好的基础。

Selenium WebDriver是一个能够自动模拟人工操作的软件系统。通过使用Selenium WebDriver提供的接口函数,Java代码可以模拟人对网页进行点击,输入字符,选择下拉菜单等操作。但是Selenium只提供了基本操作的接口,要实现完整的测试序列,还需要大量的开发工作。

JMeter功能强大,可以进行多线程,多用户的web程序测试,STAX也是一个支持多种功能多种语言的自动测试软件。但是这些工具设置起来比较麻烦,不适合处理用户自定义的复杂序列,用来模拟网页测试也不容易上手。Cucumber是国外的一款自动测试软件。该软件的优势在于,用户通过输入一段类似测试描述文字的代码,即可得到一个完整的测试程序。但是描述一个测试就需要较长的代码,同样不适合复杂的测试序列。Watir虽然使用方便,但是需要用户熟悉Ruby语言。



技术实现要素:

本发明技术解决问题:为了克服现有软件自动化测试技术的不足,本发明提供一种Web应用程序自动化测试方法和工具,解决了传统软件测试过程中手动测试任务繁重、测试代码编写复杂、无法自动化测试整个系统的缺点,同时本发明适用于多种Web应用程序的自动化测试。

本发明所采用的技术方案是:一种Web应用程序自动化测试工具,包括:基本的浏览器及网页操作实现模块、自定义代码编译模块、启动测试程序模块,其中:

基本的浏览器及网页操作实现模块:采用Java语言编写,基于Selenium编写大量的网页操作函数,实现基本的浏览器操作及基本的网页操作,为用户提供使用的内建函数接口;用户在编写测试程序时,通过调用内建函数来实现;

自定义代码编译模块:用于将自定义语言代码进行编译,生成Java代码;该模块包含T语言编译器及预处理器,T语言编译器以T语言测试代码为输入,通过预处理器将其改写为C语言风格代码,再通过词法分析,语法分析,生成语法树,在遍历语法树过程中,生成Java代码;T语言是Java语言和C语言的简化版,只需了解网页测试场景和简单的编程基础知识,就能轻松使用;预处理器用python语言编写;

启动测试程序模块:用于运行自定义代码编译模块生成的Java代码,进行Web应用程序的测试;

系统整合模块:用于将基本的浏览器及网页操作实现模块、自定义代码编译模块、启动测试程序模块整合到一起,使用python脚本将以上过程联合,形成完整测试流程,在测试场景及测试用例设计完成后,实现全自动化运行。

所述基本的浏览器及网页操作实现模块包括:

(1)基本浏览器操作包括:浏览器自动启动、最大化、输入网址、关闭;

(2)基本网页操作包括:

a.通过ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH特征定位网页元素,对网页元素进行操作,包括点击链接,点击按钮,选择下拉菜单,在文本框输入文字;

b.检查某网页元素是否存在,通过id,css selector特征,找到相应的网页元素;

c.检查网页中表格单元的值,此类函数将网页元素的某个值与函数输入值相比较,通过ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH定位表格,然后在表格中通过键值、偏移量定位单元格,再比较单元格中内容相应值,相应值包括比较单个和多个单元格的值;

d.检查网页中某表格某列是否都是或都包含某字符串,定位表中的列之后,对此列每个单元格进行检查;

e.检查表格某一行或结构树中某一结点是否被勾选,此类操作需要定位表格行或复选框元素,进行检查;

f.得到某网页元素的某种值,例如,得到某表格中某个单元格的文本;

g.向网页发送一个按键,如Enter;

h.在网页上登录或退出;

i.上传文件;

j.初始化表头;

k.其他网页操作,包括改换frame,清空文本框,检查某文本框或下拉菜单是否可用,关闭弹出的对话框;

(3)操作过程:

a.通过Selenium提供的接口,实现按ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH来定位一个网页元素;

在找到网页元素之后,通过Selenium接口,向该控件发送动作请求,例如,点击,或输入某键,在动作前后等待一个预定的时间,以确保网页元素可用,以及动作得以完成;

b.找不到某控件时抛出异常;

c.对选择下拉菜单的操作,创建一个Select类的实例,根据传入参数来调用此类的不同选择函数;

d.检查网页元素是否存在或是否符合某值的函数,在找不到此元素或值不符合要求时抛异常;

e.对表中单元格的检查和操作,先定位表,再根据表头信息和行/列信息定位单元格;

f.对上传文件这样的操作,取得文件路径,作为参数传给网页元素,以实现选择文件并上传。

所述自定义代码编译模块实现过程:

(1)自定义测试语言(T语言)

数据类型:字符串,整型,null,列表;

基本语句:变量定义,函数定义,内建函数调用,自定义函数调用,for循环语句,if条件分支语句等。

语言基本特征及要求:

a.每个语句末尾加分号;

b.支持中文字符串;

c.支持null;

d.自定义函数返回类型均为void;

e.变量定义时无需指定数据类型;

f.使用test关键字作为程序入口函数;

g.for循环语句格式为“for(iter in list){…;op(iter);…;},其中iter为循环变量,即list中的一个元素,in为关键字,list为待遍历数组,op()为在循环变量上进行的操作;

(2)代码预处理:使用python脚本对输入的T语言代码进行预处理,包括对for…in…循环进行改写,并对未声明变量进行声明,使之适合C风格代码;

(3)编译及代码生成:通过改造一个LALR(0)的C语言编译器,使用三次遍历完成代码生成输入到编译器中的步骤二改写过的T语言代码,第一次遍历,词法分析和语法分析,为T语言代码生成相应的语法树;第二次遍历,语法检查;第三次遍历,遍历语法树的同时,为每个结点生成相应Java代码,最后,生成Java import语句,类定义语句、声明函数库所在类的实例,形成完整Java文件,并放入Maven的测试文件夹。

所述启动测试程序模块实现过程:

(1)安装Java SDK,并修改系统环境变量,添加用户变量JAVA_HOME=Java安装路径;

(2)安装MAVEN,并修改系统环境变量,添加用户变量MVN_HOME=MAVEN安装路径;

(3)在环境变量Path中添加”;%JAVA_HOME%\jre\bin;%MAVEN_HOME%\bin”;

(4)安装chrome Driver;

(5)打开“开始”->“命令提示符”,目录切换到项目home目录,运行命令”mvn test–Dtest=xxx”,其中”xxx”为待测Web应用程序功能模块测试Java代码的相对路径,一旦启动,便开始了自动测试,整个过程无须人工干预。

一种Web应用程序自动化测试方法,实现步骤如下:

(1)基于Selenium编写大量的网页操作函数,实现基本的浏览器操作及基本的网页操作,为用户提供使用的内建函数接口;用户在编写测试程序时,通过调用内建函数来实现;

(2)将自定义语言代码进行编译,生成Java代码,包含T语言编译器及预处理器,参考C语言语法,利用bison和flex工具,设计和编写T语言编译器及预处理器,编译器用C语言编写,预处理器用python语言编写;T语言编译器以T语言测试代码为输入,通过预处理器将其改写为C语言风格代码,再通过词法分析,语法分析,生成语法树,在遍历语法树过程中,生成Java代码;T语言是Java语言和C语言的简化版,只需了解网页测试场景和简单的编程基础知识,就能轻松使用;根据Web应用程序的需求和特点,利用selenium接口编写基本函数库,用Java语言编写;根据写好的函数库,在编译器中加上内建函数列表;

(3)使用python语言编写脚本,将以上过程联合,形成完整测试流程,在测试场景及测试用例设计完成后,实现全自动化运行。

本发明与现有技术相比的有益效果在于:

(1)本发明提供了一种简单的非程序员也可以轻松上手的语言,让测试人员有更多精力专注测试场景及测试用例的设计,而非复杂语言的语法规范。

(2)本发明包含了一个自定义语言编译模块,可以将语言自动编译为可运行的Java代码。

(3)本发明提供了一种较为通用的Web测试框架,适用于多种Web应用系统,在对不同的Web应用系统进行测试的时候,只需要更新自定义测试语言测试代码即可。

(4)本发明提供了一种自动化测试的框架,使用此框架可以自动测试整个Web应用系统,无需人工介入。测试程序的结果会生成测试报告自动保存到本地磁盘,方便人工审核测试结果,发现Web应用系统bug。

附图说明

图1为本发明的实现流程图。

具体实施方式

下面结合附图及实施例对本发明进一步详细说明。本发明的主要实施步骤如下:

如图1所示,本发明主要由基本的浏览器及网页操作实现模块、自定义代码编译模块、启动测试程序模块、系统整合模块组成。

整体实现过程如下:

基本的浏览器及网页操作实现模块:该模块用Java语言编写,基于Selenium编写了大量的网页操作函数,主要实现了基本的浏览器操作及基本的网页操作,为用户提供使用本工具的内建函数接口。

自定义代码编译模块:用于将测试场景及测试用例设计模块中编写的自定义语言代码进行编译,生成Java代码。该模块包含T语言编译器及预处理器。编译器以T语言测试代码为输入,通过词法分析,语法分析,生成语法树,在遍历语法树过程中,生成目标Java测试代码。

启动测试程序模块:用于运行自定义代码编译模块生成的Java代码,进行应用程序功能模块的测试。

自定义语言编译模块包括:

(1)自定义测试语言(T语言)

数据类型:字符串,整型,null,列表;

基本语句:变量定义,函数定义,内建函数调用,自定义函数调用,for循环语句,if条件分支语句等。

语言基本特征及要求:

a.每个语句末尾加分号;

b.支持中文字符串;

c.支持null;

d.自定义函数返回类型均为void;

e.变量定义时无需指定数据类型;

f.使用test关键字作为程序入口函数;

g.for循环语句格式为“for(iter in list){…;op(iter);…;},其中iter为循环变量,即list中的一个元素,in为关键字,list为待遍历数组,op()为在循环变量上进行的操作;

h.支持字符串相加。

(2)代码预处理:使用python脚本对输入的T语言代码进行预处理,包括对for…in…循环进行改写,并对未声明变量进行声明等,使之适合C风格代码;

(3)编译及代码生成:通过改造一个LALR(0)的C语言编译器,使用三次遍历完成代码生成。第一次遍历,词法分析和语法分析,为T语言代码生成相应的语法树;第二次遍历,语法检查;第三次遍历,遍历语法树的同时,为每个结点生成相应Java代码。最后,生成Java import语句,类定义语句等,形成完整Java文件,并放入Maven的测试文件夹。

启动测试程序模块实现过程:

(1)安装Java,并修改系统环境变量,添加用户变量JAVA_HOME=Java安装路径;

(2)安装MAVEN,并修改系统环境变量,添加用户变量MVN_HOME=MAVEN安装路径;

(3)在环境变量Path中添加”;%JAVA_HOME%\jre\bin;%MAVEN_HOME%\bin”;

(4)安装chrome Driver;

(5)打开“开始”->“命令提示符”,目录切换到项目home目录,运行命令”mvn test–Dtest=xxx”,其中”xxx”为待测Web应用程序功能模块测试Java代码的相对路径。

系统整合模块实现过程:

使用python脚本将以上过程联合,形成完整测试流程。

上述各模块的具体实现过程如下:

1.基本的浏览器及网页操作实现模块

该模块用Java语言,基于Selenium接口,编写网页操作函数,主要实现了基本的浏览器操作及基本的网页操作,为用户提供使用本工具的内建函数接口。

基本浏览器操作包括:浏览器自动启动、最大化、输入网址、关闭等;

基本网页操作:根据id,css selector,link text等寻找网页元素、根据id,css selector,link text等点击网页元素、根据id,css selector,link text等填充文本框、根据id,css selector,link text等选中复选框、根据id,css selector等定位表格元素、查看表格某元素是否为预期值、查看表格中某单元格是否包含某字符串等。主要有以下几种操作:

(1)通过Selenium提供的接口,实现按ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH来定位一个网页元素。然后,对网页元素进行操作,如点击链接,点击按钮,选择下拉菜单,在文本框输入文字等。

(2)检查某网页元素是否存在,通过ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH,找到相应的网页元素。

(3)检查网页中表格单元的值。此类函数将网页元素的某个值与函数输入值相比较。通过ID,TAG_NAME,NAME,CLASS_NAME,CSS_SELECTOR,LINK_TEXT,PARTIAL_LINK_TEXT,XPATH定位表格,然后在表格中通过键值或偏移量定位单元格,再比较其相应值。包括比较单个和多个单元格的值。

(4)检查网页中某表格列都是某字符串或都包含某字符串。定位表中的列之后,对此列每个单元格进行检查。

(5)检查表格某一行或结构树中某一结点是否被勾选。此类操作需要定位表格行或复选框元素,进行检查。

(6)得到某网页元素的某种值,例如,得到某表格中某个单元格的文本。

(7)向网页发送一个按键,如Enter。

(8)关闭某弹出对话框。

(9)勾选表中某行行首的复选框,或结构树中的某个复选框。通过值为"preceding-sibling::span[1]"的XPATH来定位复选框。

(10)检查某控件是否可用。使用isEnabled函数来实现。

(11)在网页上登录或退出。这是通过输入用户名,密码,点击登录这一系列的操作实现的。具体值由用户在调用函数时输入。

(12)其他网页操作,如改换frame,清空文本框,检查某文本框或下拉菜单是否可用,关闭弹出的对话框等。

(13)对选择下拉菜单的操作,创建一个Select类的实例,根据传入参数来调用此类的不同选择函数。

(14)检查网页元素是否存在或是否符合某值的函数,在找不到此元素或值不符合要求时抛异常。

(15)对上传文件这样的操作,取得文件路径,作为参数传给网页元素,以实现选择文件并上传。

对不同类型的网页操作,在操作之前和操作之后,加上了不同的延时。此延时参数可调,以保证测试时有足够的等待时间使网页做出反应。此外,对需要等待时间较长的检查操作,进行轮询,以保证有足够的等待时间,以及网页做出反应后及时返回。定义BaseCommon类,上述所有函数都作为此类的成员函数声明和定义。

2.自定义代码编译模块

(1)自定义测试语言(T语言)

T语言与C语言类似,使用基本的过程式编程方法,用户通过调用内建函数来实现网页操作。而操作流程可以使用循环语句和条件分支语句来控制。T语言中的变量无须定义类型,一律视为字符串,同时支持字符串用加号连接,并使用null来代表未赋值的字符串。用T语言编写测试程序,比用Java或C语言写代码要简单很多,因此,即使没有很多编程经验的人,只要熟悉业务场景,也能使用本工具。

数据类型:字符串,整型,null,列表;

基本语句:变量定义,函数定义,内建函数调用,自定义函数调用,for循环语句,if条件分支语句等。

语言基本特征及要求:

a.每个语句末尾加分号;

b.支持中文字符串;

c.支持null;

d.自定义函数返回类型均为void;

e.变量定义时无需指定数据类型;

f.使用test关键字作为程序入口函数;

g.for循环语句格式为“for(iter in list){…;op(iter);…;},其中iter为循环变量,即list中的一个元素,in为关键字,list为待遍历数组,op()为在循环变量上进行的操作;

h.支持字符串相加。

(2)代码预处理:使用python脚本对输入的T语言代码进行预处理,对for…in…循环进行改写,改为C语言的for(iter=0;iter<length;iter++)形式。对未声明变量进行声明,将声明语句放到块首,使之适合C语言风格。

(3)编译及代码生成:根据flex和bison为T语言生成词法分析器和语法分析器,使用三次遍历完成代码生成。浏览器和网页操作函数都作为内建函数处理。

第一次遍历,词法分析和语法分析,为T语言代码生成相应的语法树,在生成过程中如有不能解析的语句,则报错;

第二次遍历,语法检查,对输入代码的语法错误进行提示,例如,对用户自定义函数的调用,如果参数个数不对,则报错;

第三次遍历,遍历语法树的同时,为每个结点生成相应Java代码。在生成Java代码时,按照T语言与Java语言的对应关系,将相应Java代码输出到文件中。例如,在每个语句结束时,输出分号。再如,对于字符串相加操作,输出用双引号引起来的字符串,以及两个字符串中间的加号。对null标识符,作为一个单独的标识符来处理。当函数名为test时,声明为:

@Test

public void test()

以表示这是Java程序中的test函数。

给函数中的变量,添加String类型声明。如果是字符串数组,则以String[]类型来声明。为分支语句生成相应的if和else关键字,以及在恰当的位置生成大括号。

最后,生成Java import语句,将selenium等必需的包引入。另外,根据测试文件名定义测试类,声名此类的对象。声明BaseCommon类对象base。对T语言代码中调用的内建函数,按已定义函数处理,在生成代码时加“base.”。

生成完整.java文件后,将.java文件放入Maven的测试文件夹。

3.启动测试程序模块

(1)安装Java,并修改系统环境变量,添加用户变量JAVA_HOME=Java安装路径;

(2)安装MAVEN,并修改系统环境变量,添加用户变量MVN_HOME=MAVEN安装路径;

(3)在环境变量Path中添”;%JAVA_HOME%\jre\bin;%MAVEN_HOME%\bin”;

(4)安装chrome Driver;

(5)打开“开始”->“命令提示符”,目录切换到项目home目录,运行命令”mvn test–Dtest=xxx”,其中”xxx”为待测Web应用程序功能模块测试Java代码的相对路径。

本发明未详细阐述部分属于本领域公知技术。

以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1