用于自动测试web应用的方法和系统的制作方法

文档序号:7913538阅读:212来源:国知局
专利名称:用于自动测试web应用的方法和系统的制作方法
用于自动测试WEB应用的方法和系统技术领域
本发明总体上涉及软件应用的开发,并且更具体地,涉及用于测试web应用的方法。
背景技术
Web应用的一大问题在于找出一种有效的方法用于web接口的测试自动化。该问题与利用web 2.0新技术(如AJAX或Javakript框架,例如Dojo)而建立的web接口更为相关。Web 2. O应用的网页不仅仅是动态的而且是非常复杂的应用,它是多个面向对象语言 DOM元素(D0M是文档对象模型,它是用于表示HMTL页面以及管理HMTL中对象的硬件和语言独立的模型)的合成的结果。每个DOM元素可以通过Jav必cript (JavaScript是SUN微系统公司或其子公司在美国和其他国家的商标或注册商标)代码而动态构建,JavaScript 代码与后端交互并且实现AJAX (异步JavMcript和XML)技术,以创建客户端侧web应用甚至应用CSS样式表以允许从客户端侧改变外观。而且,用于创建DOM元素的代码散布在多个点中,还可能由独立编写的(利用AJAX框架创建的)小部件(widget)生成以实现单个功能。
主要问题不仅仅在于实现用于单元测试套件的系统以测试单个功能、单小部件类,而且还在于测试由小部件生成的DOM元素与产生DOM元素的其他对方之间的真实交互。
用于测试web应用的现有技术工具仅基于网页或应用的“外部”外观,或者即使他们知道DOM元素,也将完全不顾应用的内部。反之,应用无法强制对这一重要区域的测试, 因为它无法访问和驱动自身的“外部”行为,这种软件对于主控环境(例如,浏览器中运行的那些应用)具有强依赖性。自动地测试此类web应用是当今的一个挑战。
美国专利申请US2004/0025083A1描述了在程序中嵌入测试代码的一般性思想, 使得该程序能够测试其功能。但是,尽管该发明的范围较宽,但是不能够使用该方法来解决完全在浏览器和主控浏览器的操作系统的上下文中对应用的内部进行测试这一问题。应用中依赖于环境差异的某些代码部分无法被测试;此外,应用中不仅依赖于此类差异而且还依赖于此类差异可能导致执行的不同代码路径的某些代码部分同样将无法测试。例如, web应用必须在所支持的诸如hternet Explorer (Internet Explorer是微软公司在美国和/或其他国家中的商标)、Firefox (Firefox是Mozilla Foundation的注册商标)、 Opera (Opera是Opera Software ASA的商标或注册商标)等每个浏览器上独立地测试。然而,出于测试的目的,使测试代码忽略每个浏览器可能引起的差异并且仅仅考虑对软件功能的直接调用,这样做是不可靠的。
需要一种利用对web接口的页面中的用户输入进行仿真代码来配置接口代码的方法,以便在浏览器和主控浏览器的操作系统的上下文中测试应用的内部。发明内容
因此,本发明的目的之一在于提供一种自动测试方法,其对web接口的页面中的用户输入进行仿真,并且在浏览器和主控该浏览器的操作系统的上下文中验证web应用的 web接口内部数据结构。
根据权利要求1,该目的利用一种用于自动测试运行在测试计算机的web浏览器内部的web应用的方法来实现,该web应用配备(400)有测试代码,所述方法包括
-通过web应用中定义的API,从该web应用中执行的测试代码向HTTP服务器发送(410)消息以请求该HTTP服务器对用户输入进行仿真,所述用户输入与该web应用中运行的测试代码相关;
-HTTP服务器接收消息G20),根据该消息通过至少一个系统事件对用户输入进行仿真,并且将其提供给该网络浏览器;
-Web浏览器处理(430)仿真的至少一个系统事件,该仿真的至少一个系统事件自身触发web应用中的一些代码的执行;
-Web应用中的测试代码通过检视包括Javascript和DOM对象的web应用内部数据结构来检查G40)由该至少一个系统事件对web应用中的一些代码的触发的结果的有效性。Web应用的该内部数据结构包括网页上可见的HTML元素以及内部计数器或其他可能的变量和对象。
该方法还允许通过在仿真用户输入之后对应用数据结构的检视来测试该应用的数据结构。该方法还允许通过将仿真用户输入已经发生之后的对象状态与已存储的模型对象状态进行比较来检查应用内部数据结构。
对象可以是HTML对象、DOM对象或Javascript对象。一种自动测试系统将包括 HTTP服务器以及用于生成与所测试的系统输入相对应的仿真系统事件的代码。
为了全面地测试web应用,本发明的方法不仅包括编写一些测试代码并且将该测试代码嵌入到应用中,而且还给予web应用对“外部”环境的访问,包括重现用户与web应用的真实交互的能力。该方法允许对外部输入进行仿真,使得能够如同该外部输入来自人类用户或一些其他外部事件源那样接收该外部输入。以此方式,主控环境将也能够处理该事件并且更新主控环境自己的数据结构,这对应用的行为也具有直接影响。在没提出该系统的情况下,没有测试能够覆盖整个软件功能。
Web应用能够借助于外部服务从“外部”与其自身交互。该服务控制浏览器和外部系统(盘等),并且借助于与特殊编码的URL的HTTP连接来向web应用提供服务。Web应用转而使用所提供的服务从“外部”操纵和控制该web应用自己的内部状态,这通常无法利用目前的测试自动化系统实现。
下面的方法和系统通过对人类用户输入进行重现和仿真而克服了目前测试方法的限制,并且使用该仿真来验证其内部数据结构和算法。该方法从该网页本身内部的 Javascript代码调用由用户输入生成的系统事件,并且产生web接口的改变(由此改变例如对象模型元素DOM元素)。一旦改变被反映在DOM元素上(通过用户事件请求), Javascript代码可以通过与预期值进行比较来检查该内部数据结构的状态。
本发明的方法提供以下优点
-可以通过测试应用网页中的全部DOM元素来测试重现客户情景的DOM元素的一切。该技术方案允许将感兴趣的测试用例覆盖到其他类型的产品无法覆盖的高级示例部分上。
-可以在页面自己的内部和外部测试网页。
-一种基于DOM检查和/或通过JSON(用于Javascript对象标记,是用串来表示对象的简单格式)对象比较的检查验证点的方式。
-该技术方案不仅使用于DOJO框架,而且可以在用于生成网页DOM元素的全部技术上使用。
-可以在用于测试套件和应用的语言不同于Javascript时实现本发明的方法。语言只需要是浏览器可理解的。
相对于现有技术的自动测试产品和方法,特别是对于web应用的自动测试产品和方法,现有技术虽然提供了多种特征,但是最终测试结果是通过将应用的“输出”与已知为正确的某些模板进行比较来获得的。对于web应用,输出基本上是其产生或改变的HTML页面,或者等效地说,是其DOM表示。利用本发明的方法,web应用可以访问“外部”环境并且对真实行为(包括人类输入)进行仿真,这通过简单的代码配备是不可能的。只能够检视程序“外观”的工具不具有检视内部结构的能力。


图1示出了可在其中实现本发明的技术方案的web应用的常见上下文;
图2示出了 web应用的常见上下文中的优选实施方式的方法的实现;
图3是与根据优选实施方式的仿真事件交叉的web应用环境的示意图4是根据优选实施方式的本发明方法的一般性流程图。
具体实施方式
图1示出了能够在其中实现本发明的技术方案的web应用的常见上下文。Web应用的常见上下文包括在用户工作站(105)的浏览器(110)中运行的web客户端应用(115)。 浏览器使用用户的工作站的操作系统的文件系统(120)。如果web应用服务器是远程服务器,web客户端应用已通过网络从web应用服务器被下载。Web应用可以用Javascript编写。用户通过浏览器生成的网页与该应用交互。用户输入可以是在生成系统事件的网页字段中输入的数据(例如来自键盘或鼠标)。
图2示出了在web应用的常见上下文中的优选实施方式的方法的实现。以浏览器可理解的语言(例如JavMcript)编写的测试套件作为web应用(115)运行在测试主机 (240)上。网络测试自动化系统O00)向运行在测试主机上的web应用(11 提供测试服务。测试服务包括三个子系统用于接收命令的HTTP服务器010),用于生成特定系统事件的系统事件生成器(21 ,以及用于在测试计算机是远程计算机时向运行测试套件的主机分派事件的远程事件分派器025)。这些子系统可实现为软件程序。测试服务的子系统使用库(220)来下载/保存表示应用状态的串行化对象或其他数据(JS0N可以是编码存储在该库中的串行化对象的一个实例)。
在测试主机中运行的web应用中,Javascript API支持Javascript测试代码的自引导(self-piloting)。用于Javascript API的自引导命令(235)允许来自浏览器(web 应用)的Javascript代码与测试服务之间的通信。浏览器启动器(230)是可选的,并且用于基于测试主机的URL启动浏览器。当使用时,它从远程事件分派器(225)接收事件并且将事件传输给浏览器,远程事件分派器(22 本身从系统事件生成器(21 接收事件。当不存在浏览器启动器时,浏览器可以直接接收仿真系统事件,因为浏览器在web应用中的测试代码执行之前即被启动。浏览器(110)接收并且处理测试主机上的相同事件。在web 应用内部,测试套件代码(包含html/Javascript/Dojo代码的网页)包含用于测试对象的代码,并且使用用于Javascript API的自引导命令(235)来检查验证点以及触发针对提供测试服务的HTTP服务器010)的动作。
注意,包括测试自动化系统和测试服务器的组件的整个测试系统可以位于单个计算机上。在测试系统和测试服务器位于单个计算机上的情况中,不需要具有远程事件分派器(22 ,并且库是web应用本地的。
Javascript API建立与HTTP服务器的通信,以允许web应用发送事件命令。服务得到该命令,并且通过系统事件生成器生成由浏览器(其总是作为置顶窗口运行)捕捉的键盘或鼠标事件,事件和网页改变如同由用户自己创建的那样发生改变。此时,测试自动化代码继续在web应用内部执行自己。
基于网页对象检查(例如,DOM检查)的验证点的示例
假设web接口提供按钮。当用户点击该按钮时显示新面板。在该示例中,测试自动化的Javascript代码应该是下面这样的Javascript请求鼠标在上述按钮的元素上的点击。然后,服务通过Javascript API接收命令并且产生相关的系统事件。一旦接收到事件,在DOM中生成新的容器结构(<DIV>)以包含新面板(子DOM)。Javascript代码继而可以检查该DOM元素是否如预期那样被插入。
基于对象状态检查的示例验证点
用于实现验证点的另一种方式是在请求仿真系统事件之前保存对象(例如被线性化为JSON串),然后一旦接收仿真系统事件并且改变应被应用于D0M,便可以加载之前保存的JSON对象并且将其与改变的对象进行比较。假设web应用在网页中包括一个小部件, 其在鼠标位于其上时改变背景颜色。假设,在主库上将该小部件对象串行化为主值(当鼠标位于该小部件之上时具有预期颜色的背景颜色)。在这种情况中,Javascript测试包括请求Javascript命令事件“鼠标在小部件之上”,继而,当该事件到达浏览器并且鼠标自动移动到该小部件之上时,Javascript测试请求服务对实际小部件状态与库中维护的小部件状态进行比较。这些测试套件中的每个测试套件生成以下动作在动态页面上做出HTTP请求,保存JSON对象作为当前状态,生成事件命令,(由浏览器)捕获事件和页面改变,通过将结果与主值(模板)进行比较来验证DOM改变,将JSON对象与主值进行比较。每个测试套件生成浏览器与系统之间的任意类型的常见交互。
可以实现以下示例性测试
· “预测”,(生成用于键入要搜索的字符串的第一字符的事件)。
· “字段确认”(生成全部键盘字符)。
· “保存页面”(生成用于访问浏览器菜单并且保存页面的事件)。
· “文件上传”(生成用于在浏览器弹出窗口上键入并且打开文件的事件)。
· “本地化”(生成访问浏览器菜单并且改变浏览器语言的事件)。
· “浏览器依赖”,生成用于测试事件在不同浏览器上的不同行为的相同键盘和鼠标事件。
“可访问性测试用例”,使用一系列键盘事件(空格、回车)。
用于Javascript API的自引导命令在一个端口上被异步地发送到HTTP服务器, 例如
http//Servicehostname :port/ ? receiverhost = hostname&command = < name > &argl = valuel&.......&argN = valueN
某些基本API命令可以如下
click(x,y)(点击(x,y))
doub 1 ec 1 ick (χ,y)(双击(χ, y))
key(k)’特殊的键是(制表,回车,左,右,上,下)
pause (delay)(暂停(延迟))
fileload(filename)(文件上传(文件名))
filesave (filename)(文件保存(文件名))
用于基于JSON比较的验证点的一些API命令可以如下
saveAsJSON(object, name),保存对象为 JSON 字串。
ObjectloadJSON(name),将 JSON 字串转化成对象。
checkJSON(object, object),比较两个 JSON 对象。
图3是与根据优选实施方式的仿真事件交叉的web 2. 0应用环境的示意图。对于事件处理的学习允许理解与仅仅提出将代码嵌入到程序中的现有测试方法的差异。Web 2.0应用存活于容器(例如,web浏览器)中,该容器提供对关键组件的支持(例如,HTML 绘制、文档的DOM表示,Javascript语言解释器和函数库、HTTP和HTTPS网络通信,等等) 以及用于从系统接收实践(例如,响应于用户动作或输入)的机制。此类容器以及全部相关组件的实现和行为对于web 2. 0应用而言至关重要如果在测试期间没有考虑这种的复杂环境,则无法全面测试web 2. 0应用。
从图3中的步骤编号2处开始(向系统的事件生成请求)。基本上这同样是用户动作的相同起始点。如图所示,在被分派到web 2.0应用之前,实践通过多个组件和代码层并由其处理。在这期间,它通常通过例如修改其数据结构等而在代码层和组件中“留下踪迹”。当事件最终分派并且由web应用处理之后,应用可以对事件做出响应,就如同它在真实世界情况中被“真实”触发一样,也即,web应用将发现其环境已经处理了该事件并且有机会对其做出反应。这在应用仿真完全靠它自己接收事件而忽略所有这些处理的情况下是不可能的。
在web应用只能测试其对一类“抽象”事件(它是未知的,并且不影响环境和web 应用容器)的响应的情况下,完全代码覆盖是不可能的。相反,每个容器(例如,web浏览器)彼此不同,并且通常甚至与他自己的其他版本也是不同的,对于web应用尤其如此。因此,有必要在每个所支持的环境中测试web应用,并且在在环境完全被集成到测试情境中的情况下也肯定是不可能的。
图3是事件如何被生成以及被分派到软件应用的示例。在事件被处理的同时,存在无法由嵌入式代码单独重现的影响主机环境的步骤(步骤编号3,用于对事件进行仿真的事件处理;以及编号5,由图中的浏览器重现事件的事件)。
图4是根据优选实施方式的本发明方法的一般性流程图。该方法在一个主机上实现,或者在两个主机但是两个服务器上实现。一个服务器在其环境(web浏览器)中运行 web应用,并且与web应用对接的一个测试服务器操作测试。用于自动测试web应用的方法包括用于在web应用代码内实现测试代码以测试web应用的第一步骤000)。第二步骤 (410)由一段测试代码执行,用于通过API向测试服务器发送包括命令的消息。在第三步骤 (420)中,测试服务器接收消息,并且解释该命令以对web应用的页面中的用户输入进行仿真,或者以生成web应用的环境和web应用均可理解的系统事件。用户输入或系统事件与 web应用中运行的测试代码相关。web浏览器(430)处理触发所测试的通常web应用执行的用户输入或系统事件。Web应用中的测试代码编程地或是通过将web应用内部数据结构的表示与已知模板进行比较来检视web应用内部数据结构,从而检查(440) web应用代码执行的结果的有效性。
该方法的某些特定步骤涉及基于HTML对象检查的验证点的示例。例如,假设web 面板(它是网页的一部分)中的用户鼠标点击生成将由应用显示的新web面板,则步骤410 将包括要求鼠标点击仿真,并且步骤430还将包括web应用在其常规代码执行(不包括测试代码执行)中生成与一个HTML对象(D0M对象)实例化相对应的新容器结构,该HTML对象实例化对应于将要显示的新网页。步骤440将包括测试代码检查与新网页相对应的对象已在web应用中被正确地实例化。
该方法的其他特定步骤涉及基于对象状态检查的验证点的示例。例如,检查用户对小部件的使用已正确地改变了 HTML页面的背景颜色。来自web应用的测试代码的请求 (410)可以包括要求保存该小部件对象的初始状态(例如,将小部件保存为库中的JSON字串),并且通过Javascript命令要求要求在被显示给用户并且包括此小部件的网页中对系统事件(例如,鼠标的小部件上移动)进行仿真。继而,在接收到仿真系统事件时,当浏览器执行仿真鼠标移动时,web应用执行相应功能,并且测试代码(440)捕获网页改变、向测试服务(410)发送从库中获取保存对象(JS0N字串)的新请求、通过web应用API接收保存的对象,测试代码读取当前小部件状态并且通过将JSON对象与库中保存的对象进行比较来验证DOM改变。每个测试套件生成浏览器与系统之间的任意类型的常见交互。
归纳而言,用于自动测试web应用的方法是完整的,因为它测试web应用的内部结构(440)和web应用的外部环境(430)。
说明内部结构测试的一个示例是如果假设web应用保持内部计数器以跟踪出错小部件的数目,使得如果该数目大于零则整个面板是无效的并且不能被处理。检查web应用对来自用户的无效输入的正确响应的测试可以包括3个测试
1)相应的小部件改变背景颜色以便显示错误,
2)消息出现以通知用户,
3)内部计数器增加一个单位。第3)点涉及应用的内部数据结构。内部计数器仅存在于web应用中,不能通过测试外部输入来测试内部计数器,因为没有HTML元素或外部表示对应于该计数器。代码可以分析自身。HTML对象、DOM对象或Javascript对象具有一种数据结构,当从web应用的web接口看时它是外部,而当其包括web应用的内部数据(如上述计数器)时它是内部的。
示出web应用的外部环境测试的一个示例是假设在主控web应用的计算机的操作系统中,在web应用之外发生了一些事情。该测试方法可以测试该应用如何响应于系统事件而做出反应。如果改变浏览器或者改变web应用执行于其上的主机中的操作系统,则行为是不同的。因此,内部结构可以响应于外部事件而被测试,就像现有技术方法的嵌入式测试代码一样;应用的内部结构可以仅可以响应于由测试代码本身而非由系统上下文仿真的内部输入而被测试。
权利要求
1.一种用于自动测试运行于测试计算机的web浏览器内部的web应用的方法,所述 web应用配备(400)有测试代码,所述方法包括通过所述web应用中定义的API,从所述web应用中执行的所述测试代码向HTTP服务器发送(410)消息以要求所述HTTP服务器对用户输入进行仿真,所述用户输入与运行于所述web应用中的所述测试代码相关;所述HTTP服务器接收所述消息020),并且触发系统事件生成器(215)对与所述用户输入相对应的至少一个系统事件进行仿真,并且将仿真的至少一个系统事件提供给所述 web浏览器;所述web浏览器处理(430)所述仿真的至少一个系统事件,所述仿真的至少一个系统事件自身触发所述web应用中的代码的执行;所述web应用中的所述测试代码通过检视web应用内部数据结构,来检查(440)所述至少一个系统事件对所述web应用中的代码的所述触发的结果的有效性。
2.根据权利要求1所述的方法,其中所述测试代码的检查步骤(440)包括检查所述web应用正确地生成与将由所述web 应用显示的网页修改相对应的内部数据结构。
3.根据权利要求2所述的方法,其中所述仿真的至少一个系统事件是需要所述网页修改的鼠标点击。
4.根据权利要求1所述的方法,还包括所述发送的步骤(410)包括所述测试代码存储网页中的内部对象数据结构或外部对象数据结构的初始状态,在所述消息中要求所述HTTP服务器将所述初始状态存储在库中并且对与所述网页中的所述对象相关的至少一个系统事件进行仿真;所述测试代码的检查步骤(440)包括检查所述web应用已改变所述网页中的所述内部对象数据结构或所述外部对象数据结构,在所述网页的改变之后捕获所述对象数据结构,通过所述web应用中定义的相同API在新消息中要求测试服务器从所述库中获取所述对象的所述初始状态,接收获取的初始对象状态,并且通过将初始内部数据结构与改变的内部数据结构进行比较来验证所述改变是否正确。
5.根据权利要求4所述的方法,其中所述仿真的至少一个系统事件是网页中在对象之上的鼠标移动,所述对象是小部件。
6.根据权利要求1到5任一项所述的方法,其中所述步骤在HTML对象、DOM对象或 Javascript对象上执 亍。
7.根据权利要求6所述的方法,其中在所述发送的步骤和所述检查的步骤中,当所述对象是Javascript对象时,所述对象由所述HTTP服务器作为JSON串在所述库中进行存储和获取。
8.根据权利要求1到7任一项所述的方法,其中所述发送的步骤还包括在所述HTTP 服务器在远程的情况下,将所述至少一个系统事件从所述HTTP服务器分派至所述web应用在其上执行的服务器。
9.根据权利要求1到8任一项所述的方法,还包括以所述浏览器可理解的语言来编码所述测试和所述web应用的初始步骤。
10.根据权利要求1到9任一项所述的方法,还包括以Javascript来编码所述测试和所述web应用的初始步骤。
11.根据权利要求1到10任一项所述的方法,其中所述发送的步骤(410)和所述应用检查的步骤(440)还包括通过引导应用来手动触发所述应用内部的所述测试代码的初始步骤。
12.根据权利要求1到10任一项所述的方法,其中所述发送的步骤(410)和所述应用检查的步骤G40)由所述web应用在启动之后的执行而被自动执行。
13.—种系统,包括适于执行根据权利要求1到12任一项所述的方法的装置。
全文摘要
一种用于自动测试WEB浏览器内部运行的WEB应用的方法和系统。测试代码段被包括在WEB应用代码中。HTTP服务器向配备有测试代码的WEB应用提供测试服务。通过API接口,测试代码请求HTTP服务器对用户输入进行仿真并且将其发送给浏览器。HTTP服务器生成与该用户输入相对应的仿真系统事件(鼠标点击、键盘输入等),并且将其发送给浏览器。浏览器照常处理针对WEB应用的系统事件。以此方式,测试代码将检查WEB应用的数据结构(对象),并且WEB应用的整个环境也将被包括。当检查到WEB应用对对象的良好处理时,WEB应用测试代码可以请求HTTP服务器将对象(例如,JSON格式)存储在库中并且从库中获取对象。测试代码将会对WEB应用处理之前和之后的对象进行比较以检查正确执行。
文档编号H04L12/26GK102511037SQ201080040943
公开日2012年6月20日 申请日期2010年8月10日 优先权日2010年8月10日
发明者A·斯科蒂, F·卡特里, F·平佐蒂, L·拉扎罗 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1