陈明2015-5-821自动化测试的标准与目标2自动化测试框架与工具3自动化测试实施4自动化测试执行与维护1.1什么是自动化测试自动化测试是用程序模拟人的操作的一种测试方法,它主要分为基于UI的自动化测试与接口,单元的自动化测试。例如利用Junit进行的单元测试也可归入自动化测试。1.2自动化测试的准入标准准入标准解决的是能不能做,适不适合做的问题。主要有以下几方面:技术上可实现,页面元素,对象等可以被工具识别。自动化测试的收益,冒烟,回归测试的频率高,某些功能用例繁多。要测试的接口数量多,手工操作工作量大。1自动化测试的标准与目标功能整体稳定,至少经过一轮的系统测试,基本功能通畅。维护量不应过大,需求变更不应过于频繁和剧烈。测试数据可重复使用或可恢复。1.3什么时候执行自动化测试自动化测试可以用在冒烟测试和回归测试中。对于一些复杂或量多的单元测试,接口测试也可以考虑使用自动化测试1自动化测试的标准与目标1.4自动化测试的目标通俗的说,自动化测试就是把功能测试用例的脚本化,然后执行脚本,产生一份自动化测试的报告。主要有以下的目标:覆盖率目标:一般而言覆盖项目功能点或手工测试用例的55-60%。节省人力成本的目标:对人力资源投入有一定程度的节省。保证基本功能的正确性。自动化测试过程可跟踪。1自动化测试的标准与目标人力成本功能正确可跟踪覆盖率目标2.1自动化测试的框架自动化测试框架是为了管理自动化测试,使得测试更高效的一种架构。它将用例,脚本,数据,报告,LOG有机的结合到一起。自动化测试的框架工作情况如下面的图来表示2自动化测试框架与工具自动化测试框架功能点管理脚本管理执行管理用例数据测试报告测试log结果一一对应使用产生调用用例管理自动化测试的过程中,执行的一个循环就相当于执行一个测试用例。测试用例描述了本次执行的主要操作,验证点,预期结果。用例管理模块提供将同一项目的不能模块的各个功能点的测试用例组织到一起的功能。数据管理自动化测试执行的过程中要用到测试数据(如输入的用户名,密码等)。对于不同模块下的功能点对应的测试数据,数据管理提供一个管理这些数据的体系结构。脚本管理脚本管理方案对于脚本的质量至关重要。一套结构层次清晰,脚本堆满的机制能够减少脚本的维护成本,降低脚本错误的机率。一般而言,不同功能点的对应的脚本独立管理。2自动化测试框架与工具功能点管理对于一个项目中要进行自动化测试的所有功能点,进行统一管理。功能点归属特定的模块,测试执行以功能点为单位。用例与数据跟功能点一一对应,可以选择性对功能点进行自动化测试执行。执行管理负责控制自动化测试执行的策略,如定时执行,执行过程控制等。测试结果管理测试结果就是自动化测试用例的执行结果,即成功还是失败,在执行过程中,框架会将这个结果记录到指定的位置(如XML文件或者是测试用例中)。此模块提供写测试结果的函数。在测试执行时调用该函数。2自动化测试框架与工具测试报告管理在一个项目的软件版本的所有要执行的自动化测试用例执行完成后,会产生一个自动化测试报告。展示本次测试的一些基本情况。如通过率,各模块的用例执行报告。各模块的通过率,失败用例分布等。以柱状图,饼图等形式展示。此模块负责对测试结果产生的数据进行统计并自动产生测试报告。测试LOG及截图管理为了跟踪自动化测试的过程,定位测试过程中发现的问题。框架需要提供测试log与截图的机制,在关键的验证点或者是容易出现错误的地方,加上写log信息及截图函数即可产生log和截图到指定目录下的文件中。这些函数由些模块提供。2自动化测试框架与工具2.2自动化测试的框架分类自动化测试框架主要可以分为数据驱动和关键字驱动两类框架。所谓数据驱动框架主要是以测试数据的结构以及脚本来驱动自动化执行的一种框架结构。关键字驱动框架,将测试脚本分解成对象+数据+操作方法的形式,对象即为关键字。然后将这一系列对象+方法+数据的组合形成测试用例。最终由框架程序将这些测试用例转化为可以执行的测试脚本。这两种类型的框架都包含用例管理,数据管理,脚本管理,测试结果管理,测试报告管理,Log和截图管理等功能。2自动化测试框架与工具2.2.1数据驱动测试框架在测试某一功能点(如登录)时,会尝试用不同的测试数据来执行测试。这些不同的测试数据的组合就是一个个的测试用例。测试脚本执行时读取这些测试数据就可以完成对自动化测试的有效实现。下图所求为测试数据举例2自动化测试框架与工具测试脚本根据测试模块,验证类型,ID和验证字段来执行测试。同时根据ID模块名称与测试用例中的用例进行关联。并将测试结果写入正确的位置。然后根据测试结果产生出一份自动化测试报告。2自动化测试框架与工具2.2.2关键字驱动测试框架无论是利用QTP还是Selenium作为自动化测试的工具,我们都可以将测试脚本分解为对象+方法+测试数据的形式。将页面元素抽象成为对象存储到一个容器中,同时在方法中封装好可能的逻辑判断。在编写测试用例时,选取要操作的对象加上操作方法和测试数据即组成了一条操作,多个这样的操作序列组成了一个功能点的测试用例,然后通过框架程序将这些用例解析为工具能识别的代码。这样就免去了大量的编写脚本的工作。降低测试脚本的维护量。下图为测试用例示例2自动化测试框架与工具为了体现对象的层次结构,将对象存储到XML文件中。在框架程序中将对象层次结构解析出来。测试数据也会存储到对应模块的相应位置中(可以是EXCEL或者是数据库),编写用于产生测试结果与测试报告的函数,将测试结果写入XML,产生测试报告时,解析该XML文件,最终生成一个HTML文件的测试报告。2自动化测试框架与工具2.2.3两种类型框架的对比数据驱动框架的结构简单,理论上能实现任何复杂逻辑的测试脚本。因为它是纯脚本的框架,所以脚本的维护量很大,它适合能力较强、规模小的自动化测试团队。关键字驱动框架结构复杂,对于一些复杂的测试逻辑比较难以实现(除非编写专用的函数),它可极大的减少脚本的维护量,上手容易,适合较大规模的测试团队。它们的对比如下表所示:结构复杂度低高实现复杂测试能力强弱维护量大小适合测试团队规模小大测试人员能力要求高低对比维度数据驱动框架关键字驱动框架2自动化测试框架与工具2.3自动化测试工具自动化测试工具有很多,如QTP,Selenium,RFT,MonkeyTest,Jmeter等。五花八门,有开源的也有商业的,但主流的测试工具还是QTP和Selenium,由于Selenium的开源和强大的浏览器兼容性和跨平台性,正在被越来越多的人使用。而QTP与RFT作为商业工具的代表,以其易学易用和广泛的软件支持在市场上占据一席之地。下面主要介绍QTP和Selenium。2.3.1QTP工具QTP是由HP公司提供的一款商业工具,它提供了强大的帮助文档,用户可以从文档中查询到关于工具以及VBS的帮助信息。工作原理QTP将要操作的界面元素(输入框,单选框,按钮等)抽象成对象。在脚本编写时,使用录制或者添加对象的方法将对象采集到对象库中,QTP在执行脚本时,关键字驱动框架2自动化测试框架与工具会从对象库读取对象取得对象名称与对象属性,与页面元素做比对,如果匹配则执行该脚本,否则抛出对象不识别的错误。对象识别根据对象识别的规则来进行,即先对比强制属性,如果强制属性能唯一识别对象,那么对象识别停止,否则再进行辅助属性的比对,接着是智能属性和顺序属性。常用的功能Objectspy是QTP中一个重要的工具,它用于识别界面上操作的元素,如果能补objectspy识别的元素就可以对它做自动化测试。对象库用于管理对象,录制或者添加的对象会存储到这里,一个好的方法就是将不同的模块对应的对象分别放在不同的action对应的对象库中。Datatable用于管理测试数据,可以将测试数据先存入到EXCEL文件,在测试执行时,将数据从EXCEL导入到Datatable供测试脚本引用。2自动化测试框架与工具场景恢复功能用在测试执行过程中出现异常情况时要采取的策略。比如在测试执行的过程中,出现了页面404错误时,就可以利用场景恢复将浏览器重新启动然后将脚本执行转到下一条用例。Action用于管理脚本,可以将不同模块的脚本放在不同的action中来独立的管理,这使得脚本的结构更清晰。2自动化测试框架与工具2.3.2SeleniumSelenium是ThoughtWorks公司开发的一款开源自动化测试工具,用于对web应用程序的测试。可以支持目前几乎所有主流的浏览器。它工作在浏览器上,具有执行速度快,稳定性好的优点。工作原理Selenium将页面的HTML元素对应的XPATH,标签,名称,id等抽象成为工具可以识别的元素。脚本执行时,seleniumserver将代码转化为javascript程序并将其装载到浏览器中,由浏览器直接执行转化后的JS代码,从而达到操作页面元素的目的。目前最常用的是Selenium2.0,即webdriver。以java+eclipse为例,将需要的两个jar包加入到工程中,就可开始进行脚本的编写了。为了便于管理可以结合Junit或者是TestNG来进行自动化的脚本编写。关键字驱动框架2自动化测试框架与工具Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在Windows、Linux和Macintosh上的InternetExplorer、Mozilla和Firefox中运行。其他测试工具都不能覆盖如此多的平台。使用Selenium和在浏览器中运行测试还有很多其他好处。通过编写模仿用户操作的Selenium测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium的核心,也称browserbot,是用JavaScript编写的。这使得测试脚本可以在受支持的浏览器中运行。browserbot负责执行从测试脚本接收到的命令,测试脚本或者是用HTML的表布局编写的,或者是使用一种受支持的编程语言编写的。编程语言可以实现复杂的逻辑,从而实现一些较复杂的测试任务。关键字驱动框架2自动化测试框架与工具2.3.3QTP与Selenium的对比QTP的优点是简单易用,可测试对象广泛以及强大的帮助支持文档库。缺点是不稳定,执行效率不高,不能分布式和跨平台执行。支持的浏览器以及编程语言不多。Selenium的优点是执行速度快,可分布式跨平台执行,稳定性好且开源免费。缺点是掌握难度大,对测试人员要求高,不能对非Web应用程序进行测试。对于浏览器上的对话框等元素的识别能力有限。2自动化测试框架与工具对比维度QTPSelenium运行速度慢快稳定性不强强兼容性不强强跨平台性只支持windows可以在主流系统上运行并发执行需要二次开发支持测试广度强只针对web应用程序3.1自动化实施的基本流程自动化实施就是将一个项目的测试进行自动化测试实现的过程。一般要经过如下的流程:3.1.1项目自动化实施技术预研在做自动化测试之前要对项目做一个比较全面的分析,主要依据自动化测试的准入标准来确定项目是否适合做自动化测试3自动化测试实施技术预研需求分析编写方案与计划搭建测试框架脚本,用例,数据编写脚本调试3.1.2项目需求分析对项目的需求进行分析,决定哪些功能点要进行自动化实施,哪些功能点不要做自动化实施。一般而言,技术上能实现的基本功能的功能点都要进行自动化实现,另外一些常测试的验证,异常流也要进行自动化的实现。3.1.3实施方案与计划的编写方案用于解决怎么做自动化实施的问题,可以将前期技术预研的结果写入到方案中,主要内容包括使用的框架,工具,平台,编程语言等。计划中包括各个任务的分工及资源情况,以及各个关键的节点对应的时间节点。3.1.4搭建自动化测试框架根据团队规模,人员能力,项目复杂度等因素来决定例用数据驱动还是关键字驱动的框架。然后编写框架的代码,设计框架的结构,编写公共函数等。3自动化测试实施3.1.5测试脚本,用例,数据的编写这是关键的一