《软件自动化测试原理.ppt》由会员分享,可在线阅读,更多相关《软件自动化测试原理.ppt(40页珍藏版)》请在三一办公上搜索。
1、软件自动化测试技术,软件技术教研室 杨鹏,第3单元 软件自动化测试原理,3.1 代码分析3.2 GUI对象识别3.3 DOM对象识别3.4 捕获和回放3.5 脚本技术3.6 自动比较技术,自动化测试的实现方法,对于静态测试和动态测试有很大的不同:动态测试的自动化实现主要通过特定的程序来模拟软件的操作过程或操作行为,然后对软件所做出的反应或输出结果进行检查或验证。静态测试的自动化实现是按照代码规范和软件开发的最佳实践建立各种代码规则,然后依据这些规则对代码进行自动扫描,发现和规则不匹配的各种问题。软件测试自动化实现的原理和方法主要有:直接对代码进行静态和动态分析、测试过程的捕获和回放、测试脚本技
2、术、自动比较技术、虚拟用户技术和测试管理技术等。,软件自动化测试的原理,代码分析类似于高级编译系统,一般是针对不同的高级语言去构造分析工具,在工具中定义类、对象、函数、变量和常量等各个方面的规则。在分析时,通过对代码进行扫描和解析,找出不符合编码规范的地方,从而给出错误信息和警告信息。还可以根据某种质量模型评价代码的质量,生成系统的调用关系图,评估代码的复杂度等。,3.1 代码分析,Findbugs是一个静态分析工具,它检查类或JAR文件,将字节码与一组缺陷模式(Java代码规范)进行对比以发现各种可能存在的问题。通过静态分析工具可以在不运行程序的情况下对软件进行测试,更早地发现软件中的缺陷。
3、安装Findbugs(Findbugs可以独立运行,也可以作为Eclipse的插件)设置Java环境:安装JDK;配置环境变量安装Eclipse:下载Eclipse软件包并解压在Eclipse中安装Findbugs插件URL:http:/eclipse,用Findbugs做Java代码的分析,安装成功后,在Eclipse的“窗口”-“首选项”中,展开“Java”后发现Findbugs项,从中可以发现Findbugs定义了很多种检查器(Detector),而且分为不同的模式(pattern)和类型(category):纠错(correctness)、不合理的(dodgy)、不好的实践(bad p
4、ractice)、安全性(security)、性能(performance)和多线程纠错(multithreaded correctness)等问题。使用Findbugs:创建或打开一个Java项目选择该项目并单击右键,从菜单中执行“Find bugs”运行后的警告信息会显示在右下区域的Problems视图中双击某条警告信息会自动定位到编辑器中对应的源代码行,用Findbugs做Java代码的分析(续),用Findbugs做Java代码的分析(续),上述例子中没有执行代码,而是通过对代码的逐行扫描来分析代码,找出问题。这种静态测试是通过事先所建立的代码规则、由软件工具来自动执行。代码静态分析的
5、关键是建立各种规则,而这种规则的建立依赖于相应编程语言的语法。利用这些规则可以找出Java源程序的许多问题,如:没有用到的变量、多余的变量创建操作、空的catch块等。为了提高代码分析的效率,会把Java源代码解析成抽象语法树(Abstract Syntax Tree,AST),由Java符号流(对象)构成树型层次结构(语义层)。对一个规则的检验,就是对相应的AST的一次遍历。,代码分析的实现,举例说明:下面是为一个简单的计算语句而设立的规则。计算:Times=n*a+1规则:Times(plus(Var(“a”),Var(“n”),Int(“1”)它的操作过程可以抽象为 如右图所示的抽象语法
6、树:,代码分析的实现(续),还可以自定义一些代码规则来供静态分析工具使用。例如,代码复杂度和代码重复率是代码质量关心的主要问题之一。对于代码复杂度可能是含有过多的条件语句(if,while或for语句等)造成的,可通过圈复杂度的度量来检查。当圈复杂度为10或超过10时,一般就表明该方法过于复杂。所以,可设立如下的代码规则:,代码分析的实现(续),功能测试工具需要和用户界面打交道,就要能操作、控制用户界面上的各种对象,所以大部分功能测试工具是基于GUI对象识别技术来实现自动化测试的。安装功能测试工具AutoIT v3工具下载URL:英文版:/中文版:AutoIT安装成功后,从“开始”-“所有程序
7、”-“AutoIT v3”菜单中,选择执行“AutoIT窗口信息工具(AutoIT Window Info)”,就可以进行Windows对象识别的操作。,3.2 GUI对象识别,启动“AutoIT窗口信息工具”后,鼠标在Windows不同窗口或对象上移动,AutoIT窗口信息工具会显示鼠标所指向的对象信息。也可以移动查询工具来指定某个窗口、菜单、快捷键、按钮、输入框、文字信息 等各种对象,从而获得如右图所示 的信息。在操作中,会发现它可以识别工具 栏,但不能识别工具栏的某个具体 对象(如主页、打印机等图标),而对浏览器内的对象更是无能为力。,用AutoIT识别GUI对象,基于GUI对象识别和控
8、制的自动化测试工具,一般在脚本语言中采用Windows API(Application Programming Interface,应用程序编程接口)函数调用的方法来实现。Windows API涵盖了系统的管理、诊断、图形和多媒体、网络、安全性等各个方面,但在自动化测试工具中或对象识别中,主要使用Windows User Interface(用户界面)一类的API。这类函数封装了操作应用软件所需的接口函数,包括键盘和鼠标操作的捕获,以及窗口、按钮、选择项等的识别和操作。自动化测试工具可以基于这些API函数,来完成对象的识别和操作。,如何实现Windows对象识别,有些测试工具(如Seleniu
9、m)直接访问Web浏览器,利用脚本语言操纵浏览器和Web页面,这时就需要对DOM(Document Object Model,文档对象模型)对象进行识别,从而模拟用户控制浏览器中页面元素的操作。也只有获取DOM对象的属性,才可以验证页面实际的表现,即确定实际结果和期望结果是否一致。DOM定义了HTML的标准对象集合,是HTML文档的编程接口,与浏览器、平台、语言无关。DOM也就是定义了标准的访问和操纵HTML对象的方式,使得其他程序或软件可以访问页面的标准组件。DOM以层次结构组织节点、内容等相关信息,从而将一个Web页面转换为一个基于树或基于对象的多层次集合。,3.3 DOM对象识别,安装I
10、E Web Developer工具下载URL:使用IE Web Developer可以在IE浏览器内查看页面,获取完整的DOM信息。打开IE浏览器,点击“查看”-“浏览器栏”-“IE Web Developer”,启动后就可以看到当前页面的结构,并查看页面的各个元素,如下图所示。,用IE Web Developer识别DOM对象,安装Firebug(工具下载URL:)最好的DOM识别工具是Firebug,它可以JavaScript文件方式支持在IE、Opera和Safari等浏览器中运行,但推荐作为Firefox的一个插件使用。Firebug功能强大,集HTML查看和编辑、JavaScript
11、控制台、CSS/script/DOM查看器、网络状况监视器、测试于一体,可从各个不同的角度剖析Web页面内部的细节层面。打开Firefox工具下的Firebug后,在浏览器载入任何页面时,Firebug都可以生成DOM树,点击HTML标签,鼠标只要停在某个对象上,浏览器页面上相应的对象就会被明显标识出来。点击某个对象属性的参数,Firebug还可以编辑HTML。如果点击DOM标签,可以更详细的了解页面的DOM结构及其元素。,用Firebug识别DOM对象,用Firebug识别DOM对象(续),代码分析是一种白盒测试的自动化方法,捕获和回放则是一种黑盒测试的自动化方法。捕获是将用户每一步操作都记
12、录下来。这种记录的方式有两种:程序用户界面的像素坐标或程序显示对象(窗口、按钮、滚动条等)的位置,以及相对应的操作、状态变化或是属性变化。所有的记录转换为一种脚本语言所描述的过程,以模拟用户的操作。回放时,将脚本语言所描述的过程转换为屏幕上的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。这可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。,3.4 捕获和回放,关于自动化测试中的“录制-回放”技术 目前的自动化负载测试解决方案几乎都是采用“录制-回放”的技术。所谓的“录制-回放”技术,就是先由手工完成一遍需要测试的流程,同时由计算机记录下这个流程期间客户端和
13、服务器端之间的通信信息,这些信息通常是一些协议和数据,并形成特定的脚本程序(Script)。然后在系统的统一管理下同时生成多个虚拟用户,并运行该脚本,监控硬件和软件平台的性能,提供分析报告或相关资料。这样,通过几台机器就可以模拟出成百上千的用户对应用系统进行负载能力的测试。,捕获和回放(续),脚本是一组测试工具执行的指令集合,也是计算机程序的一种形式。脚本可以通过录制测试的操作产生,然后再做修改,这样可以减少脚本编程的工作量;也可以直接用脚本语言编写脚本。自动化测试脚本和程序代码比较接近,包括指令和数据,还包括其他内容,如:同步,何时进行下一个输入;比较信息,是测试验证点所需要的,包括比较什么
14、、如何比较及和谁比较;捕获何种屏幕数据及存储在何处;从何处读取测试数据;控制信息等。,3.5 脚本技术,测试脚本可以分为以下几类:线性脚本:是录制手工执行的测试用例得到的脚本。结构化脚本:类似于结构化程序设计,具有各种逻辑结构。共享脚本:是指某个脚本可被多个测试用例使用。数据驱动脚本:将测试输入存储在独立的数据文件中。关键字驱动脚本:是数据驱动脚本的逻辑扩展。线性脚本是最简单的脚本,如同流水账那样描述测试过程,一般由自动录制得来;而结构化脚本是对线性脚本的加工,类似于结构化设计的程序,是脚本优化的必然途径之一。而数据驱动脚本和关键字驱动脚本可以进一步提高脚本编 写的效率,极大地降低脚本维护的工
15、作量。目前大多数测 试工具都支持数据驱动脚本和关键字驱动脚本。,测试脚本的分类,线性脚本是直接基于手工操作而录制的脚本,这种脚本包 含用户所做的所有键盘和鼠标操作。如果仅使用线性脚本 技术,所有录制的测试用例可以通过脚本完整的回放。优点:不需要深入的工作或计划;可以加快开始自动化;对实际执行操作可以审计跟踪;测试用户可以不必是编程人员;提供良好的(软件或工具)演示。缺点:过程烦琐,一切依赖于每次捕获的内容;测试输入和比较是“捆绑”在脚本中的;无共享或重用脚本;容易受 软件变化的影响;修改代价大,维护成本高;容易受意外事件的影响,引起整个测试失败。适用情况:演示或培训;执行量较少、且环境变化小的
16、测试;数据转换。,线性脚本,线性脚本示例,线性脚本结构不清晰,有很多重复脚本,很难维护,所以线性脚本不能真正应用于实际项目的自动化测试中,必须转换为结构化的脚本,或者直接开发出结构化的脚本。结构化脚本类似于结构化的程序,含有控制脚本执行的指令。这些指令或为控制结构,或为调用结构。控制结构中包括“顺序”、“循环”和“分支”,和结构化程序设计中的概念相同。调用结构是在一个脚本中调用另外的脚本,当子脚本执行完成后再继续运行父脚本。优点:健壮性好,具有很好的可重用性、灵活性,脚本易于维护,可通过循环和调用减少工作量。缺点:脚本较复杂,而且测试用例(测试数据)“捆绑”在 脚本中。,结构化脚本,结构化脚本
17、示例,共享脚本是指脚本可以被多个测试用例使用,一个脚本可以被其他的脚本所调用。使用共享脚本可以节省脚本的生成时间和减少重复工作量,当重复任务发生变化时,只需修改一个脚本或几个共享的脚本。共享脚本可以是在不同主机、不同系统之间的共享脚本,也可以是在同一主机、同一系统之间的共享脚本。优点:以较少的开销实现类似的测试;维护开销低于线性脚本;能删除明显的重复。缺点:需要跟踪更多的脚本,给配置管理带来一定的困难;对于每个测试,仍然需要特定的测试脚本,维护费用比较高;共享脚本通常是针对被测软件的某部分,存在部分脚本不能直接运行。,共享脚本,数据驱动脚本将测试脚本(执行步骤)和数据进行分离,将测试输入数据存
18、储在独立的数据文件中,而不是直接存储在脚本中。在脚本中引入变量,执行时通过变量来读取数据文件中的数据,脚本本身描述测试的具体执行过程。使用数据驱动脚本,同一个脚本可以针对不同的输入数据来进行测试,提高了脚本的使用效率和可维护性。优点:可以快速增加类似的测试;测试者增加新测试不必掌握工具脚本语言的技术;对第二个及以后类似的测试无额外的维护开销。缺点:初始建立的开销较大;需要专业(编程)支持;必须易于管理。,数据驱动脚本,数据驱动脚本示例,关键字驱动脚本实际上是比较复杂的数据驱动技术的逻辑扩展。它将测试数据文件变成测试用例的描述,用一系列关键字指定要执行的任务。关键字驱动脚本实际上封装了各种基本的
19、操作,每个操作由相应的函数实现,而在开发脚本时,不需要关心这些基础函数,直接使用已定义好的关键字,脚本编写的效率会大大提高,脚本也更易于维护。而且,关键字驱动脚本构成简单,脚本开发按关键字来处理,可以看作是业务逻辑的文字描述,每一个测试人员都能开发脚本。关键字驱动脚本的数量不随测试用例的数量变化,而仅随软件规模而增加。这种脚本还可以实现跨平台的测试用例共享,只需更改支持脚本即可。,关键字驱动脚本,关键字驱动脚本示例,没有验证点的自动化测试就不能被称为测试,验证某个测试用例的结果,实质上就是将实际结果(输出)与期望结果进行比较。自动化测试时,预期输出是事先定义的,要么插入脚本中或记录在数据库、数
20、据文件中,然后在测试过程中运行脚本,将捕获的结果和预期的输出进行比较,从而确定测试用例是否通过。通过自动比较技术,验证实际获得的测试结果和事先定义的期望结果是否一致。如果不一致,将记录所执行的具体日志(log),报告错误。,3.6 自动比较技术,自动比较可以是最简单的数字比较,也可能是比较复杂的图像比较。例如,自动比较有两类模式验证(Verify)和断言(Assert)。它们所具有的功能(命令)是非常相近的,只是对验证结果的处理不同。当Assert失败时,则退出当前测试;而当Verify失败时,测试会继续运行。Web功能测试工具Selenium中Verify验证失败的界面 Web功能测试工具S
21、elenium中自动比较的命令自动比较还可以对比分析屏幕或屏幕区域图像、比较窗口或窗口上控件的数据或属性、比较网页、比较文件等。,自动比较技术的实现,图片或自绘窗口特效的验证是自动化测试中的难点。虽然有些自动化测试工具提供了验证图片的功能,但稳定性都不是很好。一般图片验证的原理是首先截取并保存正确的图片,然后将脚本运行时截取的图片与保存的图片进行比较。由于这种比较是在像素级上进行的。极微小的差异都会被认为是不同的,这可能导致同样的脚本在不同物理机器(显卡、OS等不同)上运行时,常常会因为显示上的微小差异而导致检查结果失败,但用户是可以接受的。有的测试工具可以设定阈值,允许存在微小的差异,高于阈
22、值的被认为是“差异明显存在”,认定验证失败;低于或等于阈值的差异将被忽视,认定验证通过。这样,测试结果会比较稳定、可靠。如果阈值可以根据实际情况或用户的特定要求进行自动调整,则可以称为“智能比较”。,自动比较技术的实现(续),从自动比较的方式和技术看,自动比较可分为以下四类:静态比较和动态比较动态比较是在测试过程中进行比较;静态比较是通过另外一个单独的工具进行结果比较。简单比较和复杂比较简单比较要求实际结果和期望结果完全匹配;复杂比较是一种智能比较,允许实际结果和期望结果有一定的差异。敏感性测试比较和健壮性测试比较敏感性测试比较要求比较尽可能多的信息;健壮性测试比较只比较最少量、最需要的信息。
23、比较过滤器对实际输出结果和期望输出结果进行预先处理,执行过滤任务之后再进行比较。,自动比较技术的分类,完成以下实践内容,将实践中要求记录的内容保存在一个Word文档中并提交:任选一个Java项目,使用Findbugs对该项目进行Java代码分析,记录Findbugs的运行结果。使用AutoIT的窗口信息工具识别Windows自带的“计算器”程序界面的GUI对象,记录界面上主要控件的属性。在Firefox浏览器中打开学校主页,使用Firebug识别页面上的DOM对象,记录其HTML查看器和DOM查看器的内容。使用AutoIT的脚本录制工具Au3Record录制在“计算器”程序中执行“3*6+4.
24、8=”运算的过程,记录Au3Record自动产生的线性脚本。,上机实践(一),根据给出的文档“WinRunner7.6学习手册.pdf”,在测试工具WinRunner中完成以下实践内容:根据其中“1 WinRunner简介”的内容,熟悉WinRunner7.6的主界面和主要的工具按钮。根据其中“2 设定GUI Map”的内容,识别Flight Reservation的GUI对象,并建立相应的GUI Map File。根据其中“3 录制测试脚本”的内容,完成在两种录制模式下录制测试脚本的操作。(选做任务)根据其中“4 同步点”的内容,完成在脚本中插入和使用同步点的操作。(选做任务)根据其中“5 GUI对象检查点”的内容,完成在脚本中插入和使用GUI对象检查点的操作。,上机实践(二),