分层自动化测试构想北京新媒传信科技有限公司薛亚斌目录DBCA怎么样才能做好自动化基于UI的自动化测试实践服务接口自动化测试实践单元测试的一些尝试1.为什么要进行自动化测试2.自动测试思考3.测试金字塔测试策略为什么要进行自动化测试高质量的产品•为什么要分层测试?–分层才能保证快速反馈,而不是都等到最后才反馈–恰当的分层测试可以降低总测试成本自动化测试的思考测试金字塔与自动化测试策略UnitServerUI1.UI界面层2.业务逻辑层3.数据处理层•UI自动化测试•JS自动化测试•Action自动测试•客户端模拟测试•对外接口测试•SDK接口测试•单元测试•CodeReview目录DBCA怎么样才能做好自动化基于UI的自动化测试实践服务接口自动化测试实践单元测试的一些尝试1.UI层实践-商用工具2.UI层实践-开源工具3.UI层JS测试实践4.UI层action测试思路自动化测试工具WatirUI自动测试实践---组织方式及流程•项目实例:QTP+QC自动化测试(HP方案)业务流程测试根据业务流程图,分解创建创建测试过程中需要的业务组件通过QC调试整个业务流程测试组件根据业务流程,组合不同的业务组件实现业务流程测试QTP专家在QTP环境中开发测试脚本,并且将脚本上传至MQC将业务流程添加到QC的测试集中,运行流程测试生成测试缺陷,分析测试缺陷并且上传至QC中UI自动测试实践---流程分析•测试设计——设计测试用例•现在要针对银行付款业务设计一个测试用例,进行功能的覆盖•1划分业务功能、画出业务流程图1新增2复核3取消复核4修改5删除UI层自动化测试实践---流程分析2确定业务功能或业务组件,编写测试脚本在流程图中,可以得出,本业务可以划分成以下业务功能:新增、复核、取消复核、修改、删除3确定业务数据,参数化脚本数据由于只要进行流程的覆盖,所以暂时可以把业务数据作的简单一点。4根据流程图,写出测试场景银行付款有一个起始点,两个结束点,按照功能覆盖的思想,选择两条路径即可。如果要考量到动作之间的关联性,路径就比较多了。基于以往的经验,取消复核、二次复核比较容易出现问题,因此两条路径分别为:路径一:新增-复核-取消复核-修改-复核路径二:新增-复核-取消复核-删除5测试用例、测试脚本导入QCUI层自动化测试实践---流程分析•将传入参数和数据写入到一个Excel表格中,并保存;执行时将数据导入脚本对应的sheet中•同时,填写《设计参数说明》,将Action的名称和传入参数的字段记录存档。UI层自动化实践(2)---电信行业实践分析被测试业务流程生成被测试功能的GUI文件运行自动测试分析测试结果,记录缺陷到缺陷跟踪系统根据业务流程抽取、实现业务函数根据业务流程抽取、实现检查点函数根据被测试系统的特点实现适用整个被测试系统的公用函数根据业务流程配置、调用业务函数,组合出测试case调试组合的代码生成测试脚本UI层自动化测试---开源工具测试框架ExcelxmlSuite/case对象•业务•数据RunWatirExcel+WatirUI层自动化测试---业务组织UI层自动化测试---数据管理UI层自动化测试---对象管理?xmlversion=1.0encoding=UTF-8?pagerootpagename=“index”reg=“”title=“xxx网站登录elementname=“loginusernamedisc=type=textxpathusername/xpath/elementelementname=loginpassworddisc=type=passwordxpathpassword/xpath/elementelementname=SUBMITdisc=type=submitxpathSubmit/xpath/element/page/pagerootpublicvoidlogin(Stringusername,Stringpassword){function.open(/);function.waitForPageToLoad(30000);function.type(“index:loginusername,username);function.type(index:loginpassword,password);function.click(index:SUBMIT);//自定义的action方法action.selfDefMethod();//验证页面出现对应的字符串check.verifyTextPresent(hi,+username);}16UI层自动化测试的最佳实践重点关注能被重复多次运行用例或功能仅保持UI测试在小规模上扩展自动化测试到手工测试难以的领域有效结合自动化测试和手工测试引入覆盖衡量和不断优化自动化测试为什么做JS层的自动化测试UI层的JS自动化测试原理Action层DaoServerUI界面JS模拟UI操作UI层的JS测试工具---QUnitQUnit是jQuery团队开发的JavaScript测试工具,使用方便,界面美观使用QUnit时,只需添加qunit.js和qunit.css引用functionCalculateAPlusB(a,b){returna+b;}test(basiccalculation,function(){equals(CalculateAPlusB(1,5),6,1+5=6);equals(CalculateAPlusB(1.2,5.5),6.7,1.2+5.5=6.7);equals(CalculateAPlusB(-1,10),9,-1+10=9);});测试过程:UI层的JS自动化测试实践UI层JS自动化测试的最佳实践重点关注能主要业务场景或功能不宜全面展开和过度关注异常情况可以重点关注浏览器兼容性测试扩展自动化测试到手工测试难以的领域UI层的action测试---例子目录DBCA怎么样才能做好自动化基于UI的自动化测试实践服务接口自动化测试实践单元测试的一些尝试1.接口测试原理2.各种接口测试实施方案3.自动化测试组织方式4.简单的演示服务接口层的自动化测试实践—原理服务接口类Dao服务接口实现类展示层调用接口模拟调用接口客户端模拟Server端客户端MAPMCPPBJavaSymbianWindowsMobileBlackberryMTKAndroidIphoneWindowsPhone……集群项目的测试模拟前置条件被测系统发送请求返回请求下发请求通知(根据请求内容下发通知)被测系统模拟系统模拟测试系统发送请求外部接口测试接口测试工具:测试人员只需按照协议规范设置自己需要测试的参数即可完成请求的组织过程。使用非常方便快捷接口自动化测试:通过对接口输入和输出标准化定义,实现接口自动化测试,其前置条件可以配置或者根据协议自动化平台设置内部接口测试(SDK)测试工具与自动化测试:相对于接口自动化测试工具更为简单快捷、易于开展测试。但对于接口众多的系统来说进行自动化测试非常必要,但需要跟多的考虑前置条件和初始化及系统恢复SDK:“软件开发工具包”。广义上指辅助开发某一类软件的相关文档、范例和工具的集合,也可以简单的为某个程序语言提供应用程序接口API的一些文件。客户端协议模拟---场景配置账户信息初始化函数恢复函数协议信息参数化用例后台执行过程基础信令模板协议验证协议解析路由选择SIPC执行引擎WAP接口引擎HTTP执行引擎测试用例协议场景SDK接口引擎……接口层的自动化测试实践—演示从TD读取测试用例配置信令场景配置信令参数数据关联信令业务场景自动生成测试脚本制定执行计划测试执行结果接口测试的最佳实践关注主要业务场景及功能重点关注接口设计、依赖关系、输入输出测试代码》测试工具》自动化测试目录DBCA怎么样才能做好自动化基于UI的自动化测试实践服务接口自动化测试实践单元测试的一些尝试1.常用单元测试工具2.Junit测试框架介绍3.Junit最佳实践4.关于单元测试“度”单元测试工具•目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为JUnit(java)CppUnit(C)DUnit(Delphi)NUnit(.net)PhpUnit(Php)等等。单元测试---Junit生成测试框架新建测试代码单元测试---Junit测试多个类publicclassTestAllextendsTestCase{publicstaticTestsuite(){TestSuitesuite=newTestSuite();suite.addTestSuite(CalculatorTest.class);suite.addTestSuite(LargestTest.class);returnsuite;}}必须是static返回一个Test类型方法名必须是suite生成一个TestSuite测试类对应的class对象,还可增加TestSuite的对象返回suite,TestSuite实现了Test接口单元测试---最佳实践•测试案例与被测试的类放在不同的java包,测试案例的包名为:test.测试类所在的包名•测试类的类名为:Test+被测试类的类名;如果测试类只涉及了被测试类的部分逻辑,则测试类的类名应为:Test+被测试类的类名+被测试的程序逻辑描述•测试类应包含一个程序单元的正向案例和反向案例逻辑。•对程序bug,可以用一个单独的测试类来实现;其类名可为:Test+被测试类的类名+Bug编号•测试类应该只包含一个程序单元(相类似的几个程序单元)的测试案例,即当一个java类实现了多个程序逻辑时,可以用多个测试类来完成测试工作•可以用TestSuite来确保某些案例的测试顺序;比如可以顺序执行:create,query,update,delete的测试案例•测试类应保持相对稳定,以防止因测试类本身的问题而导致测试失败单元测试---关于单元测试根据项目制定覆盖策略高层引导,自发进行完善制度保障体系讨论提问讨论!