已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件自动化测试技术 软件技术教研室杨鹏yangp 第3单元软件自动化测试原理 3 1代码分析3 2GUI对象识别3 3DOM对象识别3 4捕获和回放3 5脚本技术3 6自动比较技术 自动化测试的实现方法 对于静态测试和动态测试有很大的不同 动态测试的自动化实现主要通过特定的程序来模拟软件的操作过程或操作行为 然后对软件所做出的反应或输出结果进行检查或验证 静态测试的自动化实现是按照代码规范和软件开发的最佳实践建立各种代码规则 然后依据这些规则对代码进行自动扫描 发现和规则不匹配的各种问题 软件测试自动化实现的原理和方法主要有 直接对代码进行静态和动态分析 测试过程的捕获和回放 测试脚本技术 自动比较技术 虚拟用户技术和测试管理技术等 软件自动化测试的原理 代码分析类似于高级编译系统 一般是针对不同的高级语言去构造分析工具 在工具中定义类 对象 函数 变量和常量等各个方面的规则 在分析时 通过对代码进行扫描和解析 找出不符合编码规范的地方 从而给出错误信息和警告信息 还可以根据某种质量模型评价代码的质量 生成系统的调用关系图 评估代码的复杂度等 3 1代码分析 Findbugs是一个静态分析工具 它检查类或JAR文件 将字节码与一组缺陷模式 Java代码规范 进行对比以发现各种可能存在的问题 通过静态分析工具可以在不运行程序的情况下对软件进行测试 更早地发现软件中的缺陷 安装Findbugs Findbugs可以独立运行 也可以作为Eclipse的插件 设置Java环境 安装JDK 配置环境变量安装Eclipse 下载Eclipse软件包并解压在Eclipse中安装Findbugs插件URL 用Findbugs做Java代码的分析 安装成功后 在Eclipse的 窗口 首选项 中 展开 Java 后发现Findbugs项 从中可以发现Findbugs定义了很多种检查器 Detector 而且分为不同的模式 pattern 和类型 category 纠错 correctness 不合理的 dodgy 不好的实践 badpractice 安全性 security 性能 performance 和多线程纠错 multithreadedcorrectness 等问题 使用Findbugs 创建或打开一个Java项目选择该项目并单击右键 从菜单中执行 Findbugs 运行后的警告信息会显示在右下区域的Problems视图中双击某条警告信息会自动定位到编辑器中对应的源代码行 用Findbugs做Java代码的分析 续 用Findbugs做Java代码的分析 续 上述例子中没有执行代码 而是通过对代码的逐行扫描来分析代码 找出问题 这种静态测试是通过事先所建立的代码规则 由软件工具来自动执行 代码静态分析的关键是建立各种规则 而这种规则的建立依赖于相应编程语言的语法 利用这些规则可以找出Java源程序的许多问题 如 没有用到的变量 多余的变量创建操作 空的catch块等 为了提高代码分析的效率 会把Java源代码解析成抽象语法树 AbstractSyntaxTree AST 由Java符号流 对象 构成树型层次结构 语义层 对一个规则的检验 就是对相应的AST的一次遍历 代码分析的实现 举例说明 下面是为一个简单的计算语句而设立的规则 计算 Times n a 1规则 Times plus Var a Var n Int 1 它的操作过程可以抽象为如右图所示的抽象语法树 代码分析的实现 续 还可以自定义一些代码规则来供静态分析工具使用 例如 代码复杂度和代码重复率是代码质量关心的主要问题之一 对于代码复杂度可能是含有过多的条件语句 if while或for语句等 造成的 可通过圈复杂度的度量来检查 当圈复杂度为10或超过10时 一般就表明该方法过于复杂 所以 可设立如下的代码规则 代码分析的实现 续 功能测试工具需要和用户界面打交道 就要能操作 控制用户界面上的各种对象 所以大部分功能测试工具是基于GUI对象识别技术来实现自动化测试的 安装功能测试工具AutoITv3工具下载URL 英文版 中文版 AutoIT安装成功后 从 开始 所有程序 AutoITv3 菜单中 选择执行 AutoIT窗口信息工具 AutoITWindowInfo 就可以进行Windows对象识别的操作 3 2GUI对象识别 启动 AutoIT窗口信息工具 后 鼠标在Windows不同窗口或对象上移动 AutoIT窗口信息工具会显示鼠标所指向的对象信息 也可以移动查询工具来指定某个窗口 菜单 快捷键 按钮 输入框 文字信息等各种对象 从而获得如右图所示的信息 在操作中 会发现它可以识别工具栏 但不能识别工具栏的某个具体对象 如主页 打印机等图标 而对浏览器内的对象更是无能为力 用AutoIT识别GUI对象 基于GUI对象识别和控制的自动化测试工具 一般在脚本语言中采用WindowsAPI ApplicationProgrammingInterface 应用程序编程接口 函数调用的方法来实现 WindowsAPI涵盖了系统的管理 诊断 图形和多媒体 网络 安全性等各个方面 但在自动化测试工具中或对象识别中 主要使用WindowsUserInterface 用户界面 一类的API 这类函数封装了操作应用软件所需的接口函数 包括键盘和鼠标操作的捕获 以及窗口 按钮 选择项等的识别和操作 自动化测试工具可以基于这些API函数 来完成对象的识别和操作 如何实现Windows对象识别 有些测试工具 如Selenium 直接访问Web浏览器 利用脚本语言操纵浏览器和Web页面 这时就需要对DOM DocumentObjectModel 文档对象模型 对象进行识别 从而模拟用户控制浏览器中页面元素的操作 也只有获取DOM对象的属性 才可以验证页面实际的表现 即确定实际结果和期望结果是否一致 DOM定义了HTML的标准对象集合 是HTML文档的编程接口 与浏览器 平台 语言无关 DOM也就是定义了标准的访问和操纵HTML对象的方式 使得其他程序或软件可以访问页面的标准组件 DOM以层次结构组织节点 内容等相关信息 从而将一个Web页面转换为一个基于树或基于对象的多层次集合 3 3DOM对象识别 安装IEWebDeveloper工具下载URL 使用IEWebDeveloper可以在IE浏览器内查看页面 获取完整的DOM信息 打开IE浏览器 点击 查看 浏览器栏 IEWebDeveloper 启动后就可以看到当前页面的结构 并查看页面的各个元素 如下图所示 用IEWebDeveloper识别DOM对象 安装Firebug 工具下载URL 最好的DOM识别工具是Firebug 它可以JavaScript文件方式支持在IE Opera和Safari等浏览器中运行 但推荐作为Firefox的一个插件使用 Firebug功能强大 集HTML查看和编辑 JavaScript控制台 CSS script DOM查看器 网络状况监视器 测试于一体 可从各个不同的角度剖析Web页面内部的细节层面 打开Firefox工具下的Firebug后 在浏览器载入任何页面时 Firebug都可以生成DOM树 点击HTML标签 鼠标只要停在某个对象上 浏览器页面上相应的对象就会被明显标识出来 点击某个对象属性的参数 Firebug还可以编辑HTML 如果点击DOM标签 可以更详细的了解页面的DOM结构及其元素 用Firebug识别DOM对象 用Firebug识别DOM对象 续 代码分析是一种白盒测试的自动化方法 捕获和回放则是一种黑盒测试的自动化方法 捕获是将用户每一步操作都记录下来 这种记录的方式有两种 程序用户界面的像素坐标或程序显示对象 窗口 按钮 滚动条等 的位置 以及相对应的操作 状态变化或是属性变化 所有的记录转换为一种脚本语言所描述的过程 以模拟用户的操作 回放时 将脚本语言所描述的过程转换为屏幕上的操作 然后将被测系统的输出记录下来同预先给定的标准结果比较 这可以大大减轻黑盒测试的工作量 在迭代开发的过程中 能够很好地进行回归测试 3 4捕获和回放 关于自动化测试中的 录制 回放 技术目前的自动化负载测试解决方案几乎都是采用 录制 回放 的技术 所谓的 录制 回放 技术 就是先由手工完成一遍需要测试的流程 同时由计算机记录下这个流程期间客户端和服务器端之间的通信信息 这些信息通常是一些协议和数据 并形成特定的脚本程序 Script 然后在系统的统一管理下同时生成多个虚拟用户 并运行该脚本 监控硬件和软件平台的性能 提供分析报告或相关资料 这样 通过几台机器就可以模拟出成百上千的用户对应用系统进行负载能力的测试 捕获和回放 续 脚本是一组测试工具执行的指令集合 也是计算机程序的一种形式 脚本可以通过录制测试的操作产生 然后再做修改 这样可以减少脚本编程的工作量 也可以直接用脚本语言编写脚本 自动化测试脚本和程序代码比较接近 包括指令和数据 还包括其他内容 如 同步 何时进行下一个输入 比较信息 是测试验证点所需要的 包括比较什么 如何比较及和谁比较 捕获何种屏幕数据及存储在何处 从何处读取测试数据 控制信息等 3 5脚本技术 测试脚本可以分为以下几类 线性脚本 是录制手工执行的测试用例得到的脚本 结构化脚本 类似于结构化程序设计 具有各种逻辑结构 共享脚本 是指某个脚本可被多个测试用例使用 数据驱动脚本 将测试输入存储在独立的数据文件中 关键字驱动脚本 是数据驱动脚本的逻辑扩展 线性脚本是最简单的脚本 如同流水账那样描述测试过程 一般由自动录制得来 而结构化脚本是对线性脚本的加工 类似于结构化设计的程序 是脚本优化的必然途径之一 而数据驱动脚本和关键字驱动脚本可以进一步提高脚本编写的效率 极大地降低脚本维护的工作量 目前大多数测试工具都支持数据驱动脚本和关键字驱动脚本 测试脚本的分类 线性脚本是直接基于手工操作而录制的脚本 这种脚本包含用户所做的所有键盘和鼠标操作 如果仅使用线性脚本技术 所有录制的测试用例可以通过脚本完整的回放 优点 不需要深入的工作或计划 可以加快开始自动化 对实际执行操作可以审计跟踪 测试用户可以不必是编程人员 提供良好的 软件或工具 演示 缺点 过程烦琐 一切依赖于每次捕获的内容 测试输入和比较是 捆绑 在脚本中的 无共享或重用脚本 容易受软件变化的影响 修改代价大 维护成本高 容易受意外事件的影响 引起整个测试失败 适用情况 演示或培训 执行量较少 且环境变化小的测试 数据转换 线性脚本 线性脚本示例 线性脚本结构不清晰 有很多重复脚本 很难维护 所以线性脚本不能真正应用于实际项目的自动化测试中 必须转换为结构化的脚本 或者直接开发出结构化的脚本 结构化脚本类似于结构化的程序 含有控制脚本执行的指令 这些指令或为控制结构 或为调用结构 控制结构中包括 顺序 循环 和 分支 和结构化程序设计中的概念相同 调用结构是在一个脚本中调用另外的脚本 当子脚本执行完成后再继续运行父脚本 优点 健壮性好 具有很好的可重用性 灵活性 脚本易于维护 可通过循环和调用减少工作量 缺点 脚本较复杂 而且测试用例 测试数据 捆绑 在脚本中 结构化脚本 结构化脚本示例 共享脚本是指脚本可以被多个测试用例使用 一个脚本可以被其他的脚本所调用 使用共享脚本可以节省脚本的生成时间和减少重复工作量 当重复任务发生变化时 只需修改一个脚本或几个共享的脚本 共享脚本可以是在不同主机 不同系统之间的共享脚本 也可以是在同一主机 同一系统之间的共享脚本 优点 以较少的开销实现类似的测试 维护开销低于线性脚本 能删除明显的重复 缺点 需要跟踪更多的脚本 给配置管理带来一定的困难 对于每个测试 仍然需要特定的测试脚本 维护费用比较高 共享脚本通常是针对被测软件的某部分 存在部分脚本不能直接运行 共享脚本 数据驱动脚本将测试脚本 执行步骤 和数据进行分离 将测试输入数据存储在独立的数据文件中 而不是直接存储在脚本中 在脚本中引入变量 执行时通过变量来读取数据文件中的数据 脚本本身描述测试的具体执行过程 使用数据驱动脚本 同一个脚本可以针对不同的输入数据来进行测试 提高了脚本的使用效率和可维护性 优点 可以快速增加类似的测试 测试者增加新测试不必掌握工具脚本语言的技术 对第二个及以后类似的测试无额外的维护开销 缺点 初始建立的开销较大 需要专业 编程 支持 必须易于管理 数据驱动脚本 数据驱动脚本示例 关键字驱动脚本实际上是比较复杂的数据驱动技术的逻辑扩展 它将测试数据文件变成测试用例的描述 用一系列关键字指定要执行的任务 关键字驱动脚本实际上封装了各种基本的操作 每个操作由相应的函数实现 而在开发脚本时 不需要关心这些基础函数 直接使用已定义好的关键字 脚本编写的效率会大大提高 脚本也更易于维护 而且 关键字驱动脚本构成简单 脚本开发按关键字来处理 可以看作是业务逻辑的文字描述 每一个测试人员都能开发脚本 关键字驱动脚本的数量不随测试用例的数量变化 而仅随软件规模而增加 这种脚本还可以实现跨平台的测试用例共享 只需更改支持脚本即可 关键字驱动脚本 关键字驱动脚本示例 没有验证点的自动化测试就不能被称为测试 验证某个测试用例的结果 实质上就是将实际结果 输出 与期望结果进行比较 自动化测试时 预期输出是事先定义的 要么插入脚本中或记录在数据库 数据文件中 然后在测试过程中运行脚本 将捕获的结果和预期的输出进行比较 从而确定测试用例是否通过 通过自动比较技术 验证实际获得的测试结果和事先定义的期望结果是否一致 如果不一致 将记录所执行的具体日志 log 报告错误 3 6自动比较技术 自动比较可以是最简单的数字比较 也可能是比较复杂的图像比较 例如 自动比较有两类模式 验证 Verify 和断言 Assert 它们所具有的功能 命令 是非常相近的 只是对验证结果的处理不同 当Assert失败时 则退出当前测试 而当Verify失败时 测试会继续运行 Web功能测试工具Selenium中Verify验证失败的界面Web功能测试工具Selenium中自动比较的命令自动比较还可以对比分析屏幕或屏幕区域图像 比较窗口或窗口上控件的数据或属性 比较网页 比较文件等 自动比较技术的实现 图片或自绘窗口特效的验证是自动化测试中的难点 虽然有些自动化测试工具提供了验证图片的功能 但稳定性都不是很好 一般图片验证的原理是首先截取并保存正确的图片 然后将脚本运行时截取的图片与保存的图片进行比较 由于这种比较是在像素级上进行的 极微小的差异都会被认为是不同的 这可能导致同样的脚本在不同物理机器 显卡 OS等不同 上运行时 常常会因为显示上的微小差异而导致检查结果失败 但用户是可以接受的 有的测试工具可以设定阈值 允许存在微小的差异 高于阈值的被认为是 差异明显存在 认定验证失败 低于或等于阈值的差异将被忽视 认定验证通过 这样 测试结果会比较稳定 可靠 如果阈值可以根据实际情况或用户的特定要求进行自动调整 则可以称为 智能比较 自动比较技术的实现 续 从自动比较的方式和技术看 自动比较可分为以下四类 静态比较和动态比较 动态比较是在测试过程中进行比较 静态比较是通过另外一个单独的工具进行结果比较 简单比较和复杂比较 简单比较要求实际结果和期望结果完全匹配 复杂比较是一种智能比较 允许实际结果和期望结果有一定的差异 敏感性测试比较和健壮性测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豪雅新乐学合同内容
- 工程类施工合同法条
- 2025年海口货运资格证考试口诀
- 山东能源设施建设合同
- 渔业设施个人承包施工合同
- 节能建筑招投标模板
- 运输合同中装卸义务解析
- 电子信息企业消防管理规章
- 保利影视基地招投标操作指南
- 旅游景点食堂租赁合同
- 2.0MWp屋顶太阳能分布式光伏发电项目监理大纲2
- 灌入式复合路面施工指南
- 2023级高数(上)试卷及答案
- 数控车床上下料机械手设计说明书
- 高中数学公开课优质课1.3.0探究与发现“杨辉三角”中的一些秘密【市一等奖】优质课
- 100KW分布式光伏电站设计方案
- 2010版GMP附录:计算机化系统整体及条款解读(完整精华版)
- 网吧企业章程范本
- 商业综合体、购物中心、百货商场商业运营项目收益测算模板
- 丙烯储罐毕业设计
- 水工建筑物水泥灌浆施工技术规范
评论
0/150
提交评论