软件自动化测试原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Findbugs做Java代码的分析(续)
代码分析的实现
上述例子中没有执行代码,而是通过对代码的逐行扫描来 分析代码,找出问题。这种静态测试是通过事先所建立的 代码规则、由软件工具来自动执行。代码静态分析的关键 是建立各种规则,而这种规则的建立依赖于相应编程语言 的语法。
利用这些规则可以找出Java源程序的许多问题,如:没有 用到的变量、多余的变量创建操作、空的catch块等。为了 提高代码分析的效率,会把Java源代码解析成抽象语法树 (Abstract Syntax Tree, AST),由Java符号流(对象)构成 树型层次结构(语义层)。对一个规则的检验,就是对相 应的AST的一次遍历。
用Firebug识别DOM对象
安装Firebug(工具下载URL:http://getfirebug.com) 最好的DOM识别工具是Firebug,它可以JavaScript文件 方式支持在IE、Opera和Safari等浏览器中运行,但推荐 作为Firefox的一个插件使用。Firebug功能强大,集HTML 查看和编辑、JavaScript控制台、CSS /script /DOM查看 器、网络状况监视器、测试于一体,可从各个不同的角度 剖析Web页面内部的细节层面。 打开Firefox工具下的Firebug后,在浏览器载入任何页面 时,Firebug都可以生成DOM树,点击HTML标签,鼠标 只要停在某个对象上,浏览器页面上相应的对象就会被明 显标识出来。点击某个对象属性的参数, Firebug还可以 编辑HTML。如果点击DOM标签,可以更详细的了解页面 的DOM结构及其元素。
线性脚本是最简单的脚本,如同流水账那样描述测试过程, 一般由自动录制得来;而结构化脚本是对线性脚本的加工, 类似于结构化设计的程序,是脚本优化的必然途径之一。 而数据驱动脚本和关键字驱动脚本可以进一步提高脚本编 写的效率,极大地降低脚本维护的工作量。目前大多数测 试工具都支持数据驱动脚本和关键字驱动脚本。
用AutoIT识别GUI对象
启动“AutoIT窗口信息工具”后,鼠标在Windows不同窗 口或对象上移动,AutoIT窗口信息工具会显示鼠标所指向 的对象信息。也可以移动查询工具来指定某个窗口、菜单、 快捷键、按钮、输入框、文字信息 等各种对象,从而获得如右图所示 的信息。
在操作中,会发现它可以识别工具 栏,但不能识别工具栏的某个具体 对象(如主页、打印机等图标), 而对浏览器内的对象更是无能为力。
3.3 DOM对象识别
有些测试工具(如Selenium)直接访问Web浏览器,利用 脚本语言操纵浏览器和Web页面,这时就需要对DOM (Document Object Model, 文档对象模型)对象进行识别, 从而模拟用户控制浏览器中页面元素的操作。也只有获取 DOM对象的属性,才可以验证页面实际的表现,即确定实 际结果和期望结果是否一致。 DOM定义了HTML的标准对象集合,是HTML文档的编程 接口,与浏览器、平台、语言无关。DOM也就是定义了标 准的访问和操纵HTML对象的方式,使得其他程序或软件 可以访问页面的标准组件。DOM以层次结构组织节点、内 容等相关信息,从而将一个Web页面转换为一个基于树或 基于对象的多层次集合。
用Firebug识别DOM对象(续)
3.4 捕获和回放
代码分析是一种白盒测试的自动化方法,捕获和回放则是 一种黑盒测试的自动化方法。捕获是将用户每一步操作都 记录下来。这种记录的方式有两种:程序用户界面的像素 坐标或程序显示对象(窗口、按钮、滚动条等)的位置, 以及相对应的操作、状态变化或是属性变化。所有的记录 转换为一种脚本语言所描述的过程,以模拟用户的操作。 回放时,将脚本语言所描述的过程转换为屏幕上的操作, 然后将被测系统的输出记录下来同预先给定的标准结果比 较。这可以大大减轻黑盒测试的工作量,在迭代开发的过 程中,能够很好地进行回归测试。
3.1 代码分析
代码分析类似于高级编译系统,一般是针对不同 的高级语言去构造分析工具,在工具中定义类、 对象、函数、变量和常量等各个方面的规则。 在分析时,通过对代码进行扫描和解析,找出不 符合编码规范的地方,从而给出错误信息和警告 信息。 还可以根据某种质量模型评价代码的质量,生成 系统的调用关系图,评估代码的复杂度等。
代码分析的实现(续)
举wk.baidu.com说明:下面是为一个简单的计算语句而设立的规则。

计算:Times = n*a + 1 规则:Times(plus(Var(“a”), Var(“n”)), Int(“1”)) 它的操作过程可以抽象为
如右图所示的抽象语法树:
代码分析的实现(续)
还可以自定义一些代码规则来供静态分析工具使用。例如, 代码复杂度和代码重复率是代码质量关心的主要问题之一。 对于代码复杂度可能是含有过多的条件语句(if, while或for 语句等)造成的,可通过圈复杂度的度量来检查。当圈复杂 度为10或超过10时,一般就表明该方法过于复杂。所以, 可设立如下的代码规则: <module name=“CyclomaticComplexity”> <property name=“max” value=“10”/> </module>
3.2 GUI对象识别
功能测试工具需要和用户界面打交道,就要能操作、控制 用户界面上的各种对象,所以大部分功能测试工具是基于 GUI对象识别技术来实现自动化测试的。
安装功能测试工具AutoIT v3 工具下载URL: 英文版:www.autoitscript.com/site/autoit/downloads/ 中文版:www.autoit.net.cn AutoIT安装成功后,从“开始”-->“所有程序”-->“AutoIT v3”菜单中,选择执行“AutoIT窗口信息工具(AutoIT Window Info)”,就可以进行Windows对象识别的操作。
软件自动化测试技术
软件技术教研室 杨鹏 yangp@pyp.edu.cn
第3单元 软件自动化测试原理
3.1 代码分析 3.2 GUI对象识别 3.3 DOM对象识别 3.4 捕获和回放 3.5 脚本技术 3.6 自动比较技术
软件自动化测试的原理
自动化测试的实现方法,对于静态测试和动态测试有很大的 不同: 动态测试的自动化实现主要通过特定的程序来模拟软件的操 作过程或操作行为,然后对软件所做出的反应或输出结果进 行检查或验证。 静态测试的自动化实现是按照代码规范和软件开发的最佳实 践建立各种代码规则,然后依据这些规则对代码进行自动扫 描,发现和规则不匹配的各种问题。 软件测试自动化实现的原理和方法主要有:直接对代码进行 静态和动态分析、测试过程的捕获和回放、测试脚本技术、 自动比较技术、虚拟用户技术和测试管理技术等。

设置Java环境:安装JDK;配置环境变量 安装Eclipse:下载Eclipse软件包并解压 在Eclipse中安装Findbugs插件 URL:http://findbugs.cs.umd.edu/eclipse
用Findbugs做Java代码的分析(续)
安装成功后,在Eclipse的“窗口”-->“首选项”中,展开 “Java”后发现Findbugs项,从中可以发现Findbugs定义了 很多种检查器(Detector),而且分为不同的模式(pattern)和 类型(category):纠错(correctness)、不合理的(dodgy)、不 好的实践(bad practice)、安全性(security)、性能 (performance)和多线程纠错(multithreaded correctness)等 问题。 使用Findbugs: 创建或打开一个Java项目 选择该项目并单击右键,从菜单中执行“Find bugs” 运行后的警告信息会显示在右下区域的Problems视图中 双击某条警告信息会自动定位到编辑器中对应的源代码行
用IE Web Developer识别DOM对象
安装IE Web Developer 工具下载URL:www.ieinspector.com/dominspector 使用IE Web Developer可以在IE浏览器内查看页面,获取 完整的DOM信息。打开IE浏览器,点击“查看”-->“浏览 器栏”-->“IE Web Developer”,启动后就可以看到当前页 面的结构,并查看页面的各个元素,如下图所示。
3.5 脚本技术
脚本是一组测试工具执行的指令集合,也是计算机程序的 一种形式。脚本可以通过录制测试的操作产生,然后再做 修改,这样可以减少脚本编程的工作量;也可以直接用脚 本语言编写脚本。 自动化测试脚本和程序代码比较接近,包括指令和数据, 还包括其他内容,如: 同步,何时进行下一个输入; 比较信息,是测试验证点所需要的,包括比较什么、如何 比较及和谁比较; 捕获何种屏幕数据及存储在何处; 从何处读取测试数据; 控制信息等。
如何实现Windows对象识别
基于GUI对象识别和控制的自动化测试工具,一般在脚本 语言中采用Windows API(Application Programming Interface, 应用程序编程接口)函数调用的方法来实现。 Windows API涵盖了系统的管理、诊断、图形和多媒体、 网络、安全性等各个方面,但在自动化测试工具中或对象 识别中,主要使用Windows User Interface(用户界面) 一类的API。这类函数封装了操作应用软件所需的接口函 数,包括键盘和鼠标操作的捕获,以及窗口、按钮、选择 项等的识别和操作。 自动化测试工具可以基于这些API函数,来完成对象的识 别和操作。
线性脚本
线性脚本是直接基于手工操作而录制的脚本,这种脚本包 含用户所做的所有键盘和鼠标操作。如果仅使用线性脚本 技术,所有录制的测试用例可以通过脚本完整的回放。 优点:不需要深入的工作或计划;可以加快开始自动化; 对实际执行操作可以审计跟踪;测试用户可以不必是编程 人员;提供良好的(软件或工具)演示。 缺点:过程烦琐,一切依赖于每次捕获的内容;测试输入 和比较是“捆绑”在脚本中的;无共享或重用脚本;容易 受 软件变化的影响;修改代价大,维护成本高;容易受意 外事件的影响,引起整个测试失败。 适用情况:演示或培训;执行量较少、且环境变化小的测 试;数据转换。
测试脚本的分类
测试脚本可以分为以下几类: 线性脚本:是录制手工执行的测试用例得到的脚本。 结构化脚本:类似于结构化程序设计,具有各种逻辑结构。 共享脚本:是指某个脚本可被多个测试用例使用。 数据驱动脚本:将测试输入存储在独立的数据文件中。 关键字驱动脚本:是数据驱动脚本的逻辑扩展。
用Findbugs做Java代码的分析
Findbugs是一个静态分析工具,它检查类或JAR文件,将 字节码与一组缺陷模式(Java代码规范)进行对比以发现 各种可能存在的问题。通过静态分析工具可以在不运行程 序的情况下对软件进行测试,更早地发现软件中的缺陷。 安装Findbugs(Findbugs可以独立运行,也可以作为 Eclipse的插件)
捕获和回放(续)
关于自动化测试中的“录制-回放”技术 目前的自动化负载测试解决方案几乎都是采用 “录 制-回放”的技术。
所谓的“录制-回放”技术,就是先由手工完成一遍 需要测试的流程,同时由计算机记录下这个流程期间客户 端和服务器端之间的通信信息,这些信息通常是一些协议 和数据,并形成特定的脚本程序(Script)。然后在系统的 统一管理下同时生成多个虚拟用户,并运行该脚本,监控 硬件和软件平台的性能,提供分析报告或相关资料。这样, 通过几台机器就可以模拟出成百上千的用户对应用系统进 行负载能力的测试。
相关文档
最新文档