2023年6月29日发(作者:)
摘要摘要Web应用具有访问量大、更新快、跨平台、跨浏览器等特点,这使得Web测试内容多、工作量大,传统的手工测试已经无法满足Web测试的要求。因此,如何将自动化测试引入到Web测试中成为软件测试的研究热点。自动化测试经过近三十年的发展,目前已进入自动化测试框架阶段。自动化测试框架作为一组可重用的设计,可以被应用到自动化测试系统的设计中。本文研究了基于关键字和数据驱动的自动化测试框架,针对前者测试脚本中测试数据不易修改和后者数据文件维护繁琐、脚本可维护性差的缺点,着重探讨了分离关键字脚本中测试数据的机制,提出了一个混合自动化测试框架KDD(KeywordsandDataDriven)。基于该框架,本文设计并实现了一个Web自动化TestSystemBasedOil测试原型系统AWTSKDD(AutomaticWebDataKeywordsandDriven)。本文的研究工作主要有以下几点:-(1)研究采用缓存的方法分离关键字脚本中的测试数据。根据KDD框架脚本和数据分离的思想,分析浏览器操作的特点,将浏览器操作抽象为由关键字组成的表,设计了适用于该框架的关键字脚本和参数文件。(2)针对Web应用用户界面、功能以及浏览器兼容性的测试,分析其测试场景,根据自动化测试流程设计了一套从测试脚本生成、测试脚本管理、测试脚本执行到测试结果输出的完整解决方案。(3)根据KDD框架的思想以及方案的设计,本文设计并实现了一个自动化测试系统AWTSKDD,系统由参数配置模块、脚本生成模块、脚本执行模块、执行计划模块、测试报告及日志模块五大模块构成。(4)对测试系统进行功能测试,并将系统应用到某公司视频会议网站的回归测试中,同时与公司原自动化测试框架进行对比,统计并比较生成相同数量脚本各框架所消耗的时间。关键词:Web测试;自动化测试框架;关键字驱动;数据驱动AbstraclAbstractWebAsapplicationshavethecharacteristicsoffrequentvisiting,fastupdating,cross-platformandCROSS.browser,Webtestinghasbecomemoreandmoredifficult,andmanydetailshavetobetest.HowtointroducetheautomatictestingmethodintoWebtestingisahottopicofsoftwaretesting,becausemanualtestcannotmeetthetesting.Afternearly30yearsdevelopment,automatictestingisrequirementsofenteringaWebnewphrasecharacterizedbyautomatictestframework.Automatictestcanframeworkbeappliedintothedesignofautomatictestsystemasagroupofreusabledesigns.Sincethekeyword-drivenframeworkisdifficulttomodifytestdatainscripts,andthedata-drivenframeworkishardtomaintaindatafilesandscripts,anautomatictestframeworkKDD(KeywordsandDataDriven)hasbeenproposedinthisthesisthroughthemechanismofseparatingdatafromkeywordscripts.AprototypesystemcalledAWTSKDD(AutomaticWebalsobeenTestSystemBasedonKeywordsandDataDriven),hasareasdesignedandimplemented.Maincontributionsofthisthesisfollows:studiesthemachinelearningalgorithmskeywordscripts.BasedonFirst,thethesisseparatedatafromandusesthemandtothisseparatingideathecharacteristicsofbrowseractions,thisthesiskeywordtableandabstractsthebrowseractionsintoandparameterfilewhichwillbedesignsthekeywordscriptappliedtoKDD—basedframework.Second,thisthesisdesignsuseracompletesolutionforthetestofWebapplication'sinterface,functionandbrowsercompatibility,includinggenerating,managing,executingscriptsandexportingresult.Third,basedontheideaofKDD—basedframework,thisthesistestdesignsandimplementsanautomaticsystemcalledAWTSKDD.Thesystemincludesparameterconfigurationmodule,scripts—generatingmodule,scripts—executingmodule,executionplanmoduleandreportandloggingmodule.Atlast,thethesisperformsregressiontestforaafunctionaltestforAWTSKDDandappliesittotherealcompany’Svideoconferencingwebsite.ThisthesisseparatelyteststhetimeofgeneratingthesamenumberofscriptsbyusingKDD—basedframeworkandthecompany7Soriginalframework.Keywords:Webtesting;automatictestframework;keyworddriven;datadriven目录目录摘要………………………………………………………………………….……………………………………………………一lAbstract………….……………………………………………………………………………………………………………….II第一章绪论………………………………………………………………………………………11f1课题背景…………………………………………………………………………………11.1.1课题来源…………………………………………………………………………11.1.2课题研究目的和意义……………………………………………………………11.2国内外研究现状…………………………………………………………………………21.2.1Web测试的发展现状…………………………………………………………….21.2.2自动化测试发展现状……………………………………………………………31.2.3自动化测试工具发展现状………………………………………………………41.3论文的主要研究内容……………………………………………………………………51.4论文章节安排……………………………………………………………………………5第二章Web自动化测试框架研究………………………………………………………………72.1自动化测试框架简介……………………………………………………………………72.2基于数据驱动的自动化测试框架………………………………………………………82.3基于关键字驱动的自动化测试框架……………………………………………………92.4基于KDD的自动化测试框架…………………………………………………………112.4.1框架的概述………………………………………………………………………112.4.2框架脚本的设计………………………………………………………………~142.4.3框架的优点………………………………………………….………………….162.5本章小结………………………………………………………………………………一16第三章基于KDD的Web自动化测试系统设计………………………………………………173.1需求分析………………………………………………………………………………一173.1.1应用场景………………………………………………………………………..173.1.2功能需求………………………………………………………………………。183.2系统总体架构设计…………………………………………………………………….193.3模块设计……………………………………………………………………………….233.3.1参数配置模块…………………………………………………………………一233.3.2脚本生成模块……………………………………………………………………243.3.3脚本执行模块…………………………………………………………………..263.3.4执行计划模块…………………………………………………………………一263.3.5测试报告及日志模块…………………………………………………………一273.4本章小结………………………………………………………………………………一29第四章AWTSKDD系统实现………………………………………………………………….304.1开发环境和工具……………………………………………………………………….304.2系统配置………………………………………………………………………………一304.3系统模块实现…………………………………………………………………………。314.3.1参数配置模块…………………………………………………………………一314.3.2脚本生成模块……………………………………………………………………324.3.3脚本执行模块…………………………………………………………………..35目录4.3.4执行计划模块…………………………………………………………………~384.3.5测试报告及日志模块…………………………………………………………..424.4本章小结……………………………………………………………………………….43第五章AWTSKDD系统澳Ⅱ试与应用…………………………………………………………..445.1AWTSKDD系统测试…………………一i……………………………………………..445.1.1系统应用场景测试……………………………………………………………一445.1.2系统功能模块测试………………………………………………………………455.2AWTSKDD系统的实际应用…………………………………………………………一485.2.1WebEx管理员网站简介…………………………………………………………495.2.2系统在管理员网站测试中的应用……………………………………………..495.2.3与其他测试框架的对比………………………………………………………..525.3本章小结………………………………………………………………………………一54第六章总结与展望………………………………………………………………………………556.1论文工作总结………………………………………………………………………….556.2论文工作展望………………………………………………………………………….55致{射………………………………………………………………………………………………………………………………56参考文献…………………………………………………………………………………………57第一章绪论第一章绪论1.1课题背景1.1.1课题来源本课题来源于思科(苏州)有限公司的WebEx项目。本课题的目的之一是提高WebEx系统的自动化测试效率和覆盖率,降低测试成本。WebEx视频会议系统能够通过互联网实现多人在线视频会议,共享文档、应用程序以及网页等。其中系统管理员网站和终端用户网站是WebEx系统的重要组成部分。管理员网站可以对会议进行相关配置,而终端用户网站可以使用户进行开会与加会的相关操作。对上述网站的测试以及维护成为保障其质量和可靠性的重要途径。测试工作主要包括网站的功能、用户界面设计以及浏览器兼容性方面的测试。1.1.2课题研究目的和意义软件测试在整个软件生命周期中占有十分重要的地位,它能提高软件质量,确保开发的产品满足需求。在软件开发的整个过程中,开发人员和用户必须不断地对软件进行测试,才能确保其正常工作。根据统计,软件测试的工作量在整个软件开发过程中至少占40%111。所以,软件质量大多数情况下取决于软件测试工作的效率。随着Web技术的飞速发展,以Web为核心的应用越来越多,而且基于Web的系统也变得越来越复杂,尤其是.ajax技术的出现使得现在的Web应用更强调与用户的交互,而不仅仅是最初的静态Web页面转换。再加上Web应用分布、异构、平台无关和并发的特,l生t21,使得对Web应用的测试相对传统的软件测试难度更大,测试面更广,因此如何通过简单高效的测试来保证Web应用的质量成为业内关注的焦点。手工测试效率低下,测试周期长,不仅耗费大量的人力财力,而且到后期频繁的同归测试会打击测试人员的积极性13l。更重要的是测试人员的一个疏忽可能造成Web应用质量不可靠,给公司带来巨大的经济损失。在这种情况下,将自动化测试技术引入Web应用测试来缩短测试周期、降低测试成本、提高测试效率和产品质量成了大势所趋。自动化测试在近些年的研究中取得了很大的进步。最初的自动化只是些具有录制.回放功能的测试工具141151,这种自动化测试没有验证功能并且不能很好地适应界面。随着脚本模块化框架、测试库架构框架、数据驱动测试框架、关键字驱动测试框架等自动化测试框架的出现【61【.丌,自动化测试的复用性和扩展性在很大程度上得到了提高。因此采用自动化测试框架成为目前自动化测试工作者最为推崇的测试方法。本文基于上述研究背景,通过研究目前主流的自动化测试框架,提出一种混合自动化测试框架。该框架结合数据驱动和关键字驱动测试框架的特点,对测试脚本东南大学硕L学位论文进行建模。脚本由关键字组成的表构成,脚本中的测试数据由单独的参数文什保存。框架将脚本和数据分离,使得脚本更易于维护。1.2国内外研究现状相对于国外,国内自动化测试起步较晚,目前绝大多数的研究都是围绕单一的自动化测试框架并将其应用到实际的项目测试中,很少有将两者结合起来进行研究,因此本课题具有实际的研究价值。本节将主要从Web测试的发展现状、自动化测试的发展现状和自动化测试工具的发展现状三个方面阐述Web自动化测试的研究现状。1.2.1Web测试的发展现状Web应用是典型的B腮架构,用户使用浏览器和Web服务器进行交互,目前主流的是三层架构,即客户端一应用服务器一数据库服务器三层体系结构[81,如图1-1所示:区当叵WebHtml浏览器I;二=lL————————————————J困服务器I图1-1主流Web应用二层架构协议从应用层的帅服务器下载超文本页面,同时下载并执行内嵌在页面中的客Web浏览器作为客户端,提供图形用户界面,负责与客户进行交互。它通过}r兀P户端程序或中间代码(如Java字节码)【9】。这时客户端程序能通过内部通信机制向应用服务器中有关服务对象发出请求。服务对象封装了相关的业务逻辑,它们之间可通过内部协议彼此通信,并能访问资源层的数据库对象或其它的应用程序,以协同完成客户请求。由于采用了分布对象技术,增加了应用层,将客户与资源层分开。降低了Web服务器的负载,避免了Web服务器的性能缺陷对整体眭能的影响。并具有连接缓冲、负载均衡、安全管理等功能,大大提高了Web应用整体的灵活性、伸缩性和扩展性11Ⅲ。这种Web应用的体系结构测试不仅要覆盖服务器,判断其是否能对客户请求进行响应,完成相应的功能,还要判断数据库中数据的正确性,客户端提交的数据能否被『F确接收。针对Web应用的体系架构和工作原理,目前Web应用测试主要从以下几个方面进行测试I¨J:(1)功能测试功能测试的主要目的就是验证Web服务器是否提供必要及正确的服务。测试人员可以根据系统文档和用户手册编写测试用例,测试用例应尽可能覆盖典型的应用2第一章绪论和操作。Web功能测试主要包括链接测试、数据校验、表单测试、Cookies测试、数据库测试以及应用程序特定的功能需求【11】【131。(2)性能测试性能测试的主要目的是考查在大压力和大数据量情况下,应用服务器的系统响‘+应时间和最大处理能力,同时考查在不同压力情况下应用服务器的系统响应时间和处理能力【州。(3)兼容性测试兼容性测试主要负责测试Web应用在不同平台、不同浏览器甚至是不同分辨率下能否正常运行和显裂15】。其中浏览器测试是兼容性测试的核心,当前Web浏览器众多,并且不同浏览器对JavaScript和html的支持不尽相同,因此如何保证Web应用在各浏览器下的正常使用成为了关注的重点。(4)安全测试对于任何一个系统,其安全性都相当重要。安全测试主要体现在对用户信息及重要数据的存取上。这需要测试人员准备不同方面的测试用例,用以控制不同的安全级别【16】。(5)用户界面测试用户界面测试也称UI测试,检查某个Web页面的界面设计(包括元素所处位置,指定元素存在与否等)是否和预期设计的一样。1.2.2自动化测试发展现状通俗地讲,自动化测试就是使用计算机来帮助测试人员完成测试工作,减轻测试人员负担。软件自动化测试从上世纪九十年代开始起步,随着自动化技术的不断发展相应工具层出不穷。总的来说,按照时问段和特点,自动化测试经历了以下几个阶段:第一阶段:开始于上世纪90年代初。这个阶段的自动化仅仅是通过硬件来录制键盘的操作并播放【171,整个过程缺少验证点,不能用来判断执行的对与错,并且脚本很难进行维护。第二阶段:开始于上世纪90年代末。这一阶段逐渐采用软件录制/回放(capture/playback)的方式来代替硬件【堋,并且增加了验证点可以对软件进行测试。但其中+个比较大的问题是测试脚本是一种程序语言,这对测试人员的要求就比较高。并且当软件有变动时,脚本也需要同步更新,这对测试人员是·个很大的挑战。第三阶段:起步于21世纪初,就是本文所要研究的自动化测试框架。测试框架的主要思想就是将测试脚本抽象化【19J,降低测试门槛,让非技术人员也可以使用测试工具建立自己的测试方案。在这之后就诞生了像RationalRobot和MercuryLoadmnner这样的商业化工具。东南大学硕士学位论文1.2.3自动化测试工具发展现状自动化测试工具是用来帮助测试人员完成测试工作的软件,按照功能可以分为负载压力测试工具、功能测试工具、白盒测试工具、测试管理工具和测试辅助工其IzoJ。一个好的自动化测试系统就是将自动化工具整合,具备测试脚本生成、测试脚本执行、测试比对及结果查看等功能,以此来完成对Web应用某个或者几个方面的测试。目前比较流行的自动化测试工具很多,有免费丌源的,也有一些商业收费的,使用较多的主要有以下几种:(1)QuickTestProfessional:QuickTestProfessional(QTP)是MercuryInteractive公司的一款进行自动化测试的工具。它运行关键字驱动测试,测试人员不仅能“录制”测试脚本,还能“设计”测试脚本,并能在其中插入检查点来对Web页面或应用程序进行功能检查【21】。QTP作为回归测试的主要测试工具,可以节省大量人力和时间,加快开发测试或测试的进程。(2)JMeter:JMeter是Apache组织开发的基于Java的压力测试工具,用于进行压力测试。它最初用于Web应用测试但后来逐渐扩展到其他测试领域,可用于测试静态和动态的资源例如Javad,服务程序、静态文件、Java对象、CGI脚本、数据库和FTP服务器等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度并分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序返回了期望的结果1221。(3)Loadrunner:是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间、优化性能和加速应用系统的发布周划2引。LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。(4)Selenium:Selenium是ThoughtWorks公司的JasonHuggins在2004年专门为web应用编写的一个验收测试二厂具【24】陋1。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像用户真正的在操作一样。支持的浏览器包括IE、GoogleChrome、MozillaFirefox等,支持自动录制动作和自动生成以及Java、Net、Perl等不同语言的测试脚本【26】【27】。在实际的自动化测试中,由于不同的测试工具覆盖的测试内容不同,所以应该根据具体的测试内容选择相应的测试工具。另外还要根据公司的资金状况来选择,开源的测试工具虽然免费但功能不够强大,可能不能满足测试需求,但商业工具价格较昂贵,又会使测试的成本大大提高。针对上述情况,相对经济可行的方法就是采用开源工具。根据自动化测试框架,对工具进行功能定制和集成,使得工具能够满足测试的需要,这也是本论文开发测试系统的主要思想。4第一章绪论1.3论文的主要研究内容本论文在研究了解数据驱动和关键字驱动测试框架的基础上,分析两种框架的缺点,提出--4中混合自动化测试框架KDD(KeywordsandD毹aDriven)。该框架结合两者的特点,将关键字应用到脚本的设计中,同时将脚本中的测试数据保存在参数文件中,实现操作与数据的分离。本文通过分析浏览器操作特点,将浏览器操作抽象为关键字组成的表,设计了适用于该框架的脚本。最后将框架思想应用到测试系统的设计中,采用自动化测试工具SeleniumWebDriver设计了一个能够进行用户界面测试、功能测试和浏览器兼容性测试的Web自动化测试系统。具体的研究内容如下:(1)分析Web测试的特点及内容,研究学习Web自动化测试和自动化框架的相关理论。针对数据驱动和关键字驱动两个主流的自动化测试框架,深入剖析框架的思想以及框架存在的问题。(2)基于上述两种框架,提出将两者结合起来并用参数文件单独保存脚本中测试数据的思想。研究并采用缓存算法实现脚本内容和测试数据的分离,有效解决上述框架存在的问题。(3)研究浏览器操作特点,通过抽象浏览器操作设计适用于本框架的关键字脚本语法和参数文件的结构。(4)研究自动化测试流程,了解自动化测试需求。根据本测试框架的思想以及测试脚本的结构,根据可维护性和独立性的方针设计一套从脚本生成、脚本执行到测试报告查看的完整自动化测试解决方案。该方案能够对web用户界面、功能、浏览器兼容性进行测试。(5)运用丌源工具SeleniumWebDriver以及Java开发平台对测试系统AWTSKDD(AutomaticWebTestSystemBasedonKeywordsandDataDriven)进行实现,并通过相关功能测试和对比,验证本框架的实用性和高效性。1.4论文章节安排本文共分为六章,各章节的内容安排如下:第一章绪论。主要从课题来源、课题研究目的和意义以及国内外研究现状三个方面来阐述Web应用的自动化测试,并对论文工作进行总结。第二章Web自动化测试框架研究。首先阐述自动化测试框架理论,其次介绍数据驱动和关键字驱动自动化测试框架,讲述两者的具体思想及其优缺点。然后基于两种框架提出一种混合自动化测试框架KDD,根据该框架思想以及浏览器操作特点提出了脚本的具体设计。第三章基于KDD的Web自动化测试系统设计。首先进行需求分析,了解系统的测试场景和功能性需求。然后按照需求设计系统的总体架构,并对具体模东南大学硕士学位沦文块进行详细设计。第四章AWTSKDD系统实现。介绍系统的开发环境和工具,系统运行前的配置工作,包括工具的安装以及必要文件的准备,最后对各模块的具体实现进行阐述。第五章AWTSKDD系统测试与应用。对本系统进行功能测试,并将系统应用到某公司视频会议项目的测试中,验证其实用性。最后将本框架与原公司的测试框架进行对比,发现采用KDD框架思想设计的系统脚本生成效率更高。第六章总结与展望。主要对本文的工作进行总结并对将来的工作进行计划和展望。第二章Web自动化测试框架研究第二章Web自动化测试框架研究本章首先介绍自动化测试框架理论,其次研究两个主流自动化测试框架:数据驱动框架和关键字驱动框架,并介绍它们的优缺点,最后结合这两个框架的特点,提出~种混合自动化测试框架KDD。2.1自动化测试框架简介自动化测试框架是自动化测试的整体解决方案,是由一些假设、概念和为自动化测试提供支持的系统及其最佳实践等构成的集合【2剐。不同的应用领域或不同的测试水平,自动化测试的框架具有不同的构成,因此通过了解自动化测试框架的基本构成,在此基础上,根据实际情况进行扩充,从而构造适应性更强、效率更高、功能更强的自动化测试框架。一个完整的自动化测试框架一般包含上下两个层次,上层是管理整个自动化测试的丌发,执行及维护;下层是测试脚本的丌发,使用相关测试工具,构建测试驱动,并完成测试业务逻辑。自动化测试框架的架构如图2.1:图2-1自动化测试框架架构东南大学硕士学位论文图2—1所示的自动化测试框架分为管理层和丌发层。其中管理层包括管理模块和执行模块。管理模块的核心是决策系统,负责建立并维护运行队列,控制运行策略:同时管理模块还必须维护一‘个测试任务队列,它根据每个测试任务开始执行的时间和状态进行控制。执行模块以管理模块的决策系统为依据,执行运行队列中的测试脚本,同时执行模块还包括一个执行控制系统,负责分配脚本和启动脚本。开发层包括测试驱动模块和测试脚本开发模块。其中测试驱动模块是自动化测试框架的核心,决定自动化脚本的设计。脚本开发模块包括脚本规范的制定,脚本的划分即脚本如何进行分类和测试用例的编写。测试驱动模块中的数据驱动和关键字驱动是目前比较流行的测试驱动,这也是本文的研究重点。本章的后续小节将详细介绍基于这两个测试驱动的自动化测试框架。2.2基于数据驱动的自动化测试框架数据驱动的自动化测试框架就是一种数据被包含在输入测试数据文件中,并且数据控制自动化测试脚本执行流程和动作的框架f29l。数据驱动的自动化测试框架将测试时的输入值和输出值存储在独立的数据文件中,数据文件有多种形式,例如ODBC源文件、Excel文件、CSV文件、ADO对象文件等。测试执行的时候测试系统从数据文件中读取输入值和输出值,并将值传入事先录制好或手工编写的测试脚本中。在这个过程中,数据文件的读取,测试状态和所有测试信息都被编写进测试脚本里。测试数据只包含在数据文件中,测试脚本扮演“驱动者”的角色,脚本只是一个“驱动”,或者说是一个传送数据的机制【30】。在测试脚本中需要编写测试程序的逻辑,读取数据文件,记录测试状态和信息R志的代码。下面以QTP测试工具为例,利用数据驱动测试框架测试登录功能的脚本:Fori=ltoDatatable.GetRowCountDialog(”Login”).WinEdit(”AgentName:”).SetDataTable(”username”,dtGlobalSheet)Dialog(”Login”).WinEdit(”Password:”).SetDataTable(”passwd”,dtGlobalSheet)Dialog(”Login”).WinButton(”OK”).Clickdatatable.GlobalSheet.SetNextROWNext其中在Datatable中存储了测试所需要的数据,Datatable中可以存放很多组数据,如表2.1所示:表2-1测试数据8第二章Web自动化测试框架研究USemamecaselcase2、HillpasswdP@ssl234XXXXXXXXXXXxx测试时每次从Datatable中读取测试数据验证登录功能。数据驱动的自动化测试框架主要存在以下优点:(1)测试框架可以用很少的代码来产生大量的测试用例。数据文件中可以存储大量测试数据,每条测试数据可以产生一条测试用例【31l。(2)测试数据容易修改。由于测试数据保存在数据文件中,所以对测试数据的修改只需对文件进行相应修改即可,十分方便。(3)需要时可以创建和使用多个数据文件。测试过程中可以采用不同的数据文件存储不同种类的测试数据。(4)多个测试数据记录可以开发成函数变量。当数据文件中存储了大量测试数据时,可以编写函数将文件中所有数据存储在变量中,当脚本需要数据时可直接使用132J。(5)没有编程经验的测试人员也可以使用。测试人员只需了解具体数据代表的含义就可通过修改或添加数据来进行测试。数据驱动框架的出现使得用少量测试脚本和函数产生大量测试用例成为可能。数据文件的使用使得测试数据有很高的可维护性,当增加额外的测试数据时不需要更改脚本。但同时该框架也存在很多问题,主要有以下几点:(1)脚本前期丌发门槛高。由于测试脚本需要用程序语言来编辑,因此对测试人员的编程功底要求很高,没有编程经验的人很难胜任。(2)生成测试脚本工作量大。数据驱动框架的测试脚本包含了很多控制指令和逻辑判断,这些都是用脚本语言设计实现,这使得前期生成脚本的时间和开销较大。(3)脚本维护困难。当被测web应用的功能出现变化时,脚本需要及时更新。而如果前期开发的脚本不规范,更改和维护脚本的工作量会巨大。同时脚本中大量的脚本语言也使得维护工作异常困难。(4)数据文件维护繁琐。数据文件的引入使得测试人员不仅要维护不同测试用例的数据文件,而且同一个用例可能有多个数据文件需要维护,因此数据文件的维护工作量较大。2.3基于关键字驱动的自动化测试框架关键字驱动也称表驱动,是对数据驱动的扩展。它是一种独立于应用程序的自动化框架。关键字驱动测试脚本中包含指令(关键字),而不只是数据。将业务逻辑用关键字表示,测试脚本被开发成使用关键字的数据表,它们独立于执行9东南大学硕士学位论文测试的自动化工具【3引。关键字指的是存放在测试脚本中用来决定如何进行测试的数据,关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充。关键字驱动技术的思想主要体现在分离:它实现了界面元素名与测试内部对象名的分离以及测试描述与具体实现细节的分离【34J。表2.2以测试计算器功能为例,说明该框架如何将测试计算器加法功能抽象为具体的关键字。表2—2测试加法功能的关键字表示关键字字段/界面名称输入值/验证值Start计算器主界面Select查看标准ActionButton.PresslActionButton—Press+ActionButton.Press2ActionButton—PressVerifv结果文本框3表2—2用关键字的形式表达了如何验证计算器的加法功能。第一栏关键字表示具体的动作,“Start”表示开始动作,“Select”表示选择操作,此处表示选择计算器的种类,“Action”表示具体的按键操作,最后“Verify”表示验证操作,验证实际计算结果和期望值是否相同。第二栏代表的是具体的操作对象,而第三栏表示操作的输入或验证值。关键字驱动的框架相比数据驱动的框架具有以下优点:(1)降低自动化测试门槛。关键字的引入使得脚本的具体实现对测试人员透明。测试人员通过了解关键字脚本的语法就可以根据测试用例编写测试脚本,即使没有编程基础的测试人员只要熟悉业务流程就可参与自动化测试。(2)脚本维护开销降低。当Web应用的功能或者界面发生变化时,测试人员只需按照关键字语法对脚本内容进行添加、删除或者修改,无需对复杂的脚本语言进行调试修改p5|。(3)提高测试的复用性。当平台或者工具发生改变时,只需对测试脚本进行重新设计137J,无需修改测试用例。(4)提高测试效率。测试人员不用再去考虑如何在脚本中添加控制命令和逻辑判断并通过大量的调试来满足测试的需要【38】。当掌握关键字脚本的语法后,测试人员可以像编辑文档一样编辑测试脚本的关键字命令,大大提高测试效率。关键字框架作为对数据框架的逻辑扩展,相比数据框架有了很大的改进,弥补了数据框架的缺点,是将来自动化测试框架的发展方向。但是它同时也存在如下几个问题:(1)测试数据维护不易。从上面的例子可以看出,脚本中的第三列包含了脚本运行所需的输入值和验证值。当测试人员需要更改数据进行脚本复用时,测10第二章Web自动化测试框架研究试人员并不知道每个输入值/验证值所表达的实际含义。另外,当测试步骤增加时,寻找对应输入值/验证值会更费时间,从而造成数据维护开销变大。(2)测试脚本生成困难。关键字框架的脚本是由很多关键字组成的表,如果没有工具的帮助,测试人员需要根据关键字语法以及测试用例手工编写脚本。一旦脚本规模庞大、步骤繁多时,编写测试脚本的时问会很长。(3)关键字脚本开发难度高。如何将系统的业务逻辑抽象为一个完整的关键字体系,并包含所有的逻辑情况,是关键字框架能否应用于实际测试的关键。2.4基于KDD的自动化测试框架2.4.1框架的概述数据驱动框架存在的比较大的问题是前期构建脚本开销较大,测试人员需要掌握脚本语言爿信邑进行包括控制和逻辑判断等命令在内的脚本编写,并且脚本可维护性差。而关键字驱动框架存在的问题是脚本中数据不易维护,当要修改测试数据复用脚本时将会很困难,缺少一个很好的将数据从脚本中分离的机制。因此针对上述两个框架的主要问题,本文将提出一个混合自动化测试框架KDD,该框架结合数据和关键字驱动测试框架的思想,将关键字组成的表构成测试脚本,同时将脚本内容与测试数据分离。图2.2展示了该框架的架构:图2.2KDD框架的架构图2—2给出了KDD框架的架构,该框架在结合数据驱动思想和关键字驱动东南大学硕士学位论文思想的基础上提出将测试脚本和数据相分离的方案,该方案运用缓存算法分离脚本中的测试数据,并将测试数据作为参数存放在参数文件中。该方案还采取了脚本共享的思想,将重复的功能封装到共享脚本中,在其他脚本中直接引用共享脚本,避免重复劳动。KDD框架的核心是缓存算法,下面将详细介绍框架.的提取参数机制即缓存算法。本框架将关键字脚本的集合定义为c={c1,C2,…,c。},其中每个Ci(i_1,2….,m)对应一个关键字脚本,定义第i个脚本中的参数值集合为Vi={v1,v2….,Vk},i=l,2,…,m,其中每个vj(j_1,2,…k)对应该关键字脚本中的第i个参数值。另外定义第i个脚本中的参数名称集合为Ni={n1,n2,...nk},i=l,2,...,m,其中每个ni(j=1,2,…k)对应该关键字脚本中的第j个参数的名称。由此本框架的关键是要找出一个映射f:vi_Ni,使得对vi中的任意一个元素在Nj中都有元素与之对应。测试人员无论是手工编写测试脚本还是借助录制工具录制脚本,所用的测试数据都具有随机性、无规律性的特点。比如合法Email地址通常为“XXX@abc.tom”,但如果是测试非法Email地址的报错信息,输入的Email地址可能就没什么规律可循。再比如数据完整性测试中的表单测试,测试人员填写信息并提交表单,然后查看页面的显示以及数据库的数据是否和输入的保持一致。这时如果要输入类似公司地址、公司名称这些对数据格式没有严格要求的信息时,测试人员可能为了方便就随意输入像“abe”这样比较简单的数据。因此,综合上述可以看出大多数测试数据没有规律可循,呈现随意性特点,这就为测试数据的分离带来一个难题。为此本框架采用缓存方法来解决参数的命名问题即映射f。缓存即将系统遇到过的命名方式保存起来,当下次再遇到时系统可以直接套用已经保存过的命名方法。系统将命名过程中获取的命名方式以特定的表达式存储在参数库中。参数库对应的是一个文件,存储的就是系统已经学习到的参数值与参数名的映射。最理想的参数库包含了所有关键字脚本中参数值的命名方式,即参数库NL={(vi,ni)Ivi∈Vk,ni∈Nk,k=l,2,…m)。这里参数的命名存在两种情况:(1)一个参数名称可以对应多个参数值。如参数值“XXX@abc.com”和“YYY@bcd.tom”都可以对应“emailaddress”这个参数名。(2)一个参数值只对应一个参数名。如参数值“XXX@abc.com”只对应“emailaddress”这个参数名。根据对参数名与参数值的描述可以为每个参数名建立一个链表,链表中存储了所有以该参数名命名的参数值。由于链表查询的时间复杂度为O(n),频繁的查询将花费大量时间。所以本框架采用高速缓存(Cache)的思想,将最近使用的参数名与参数值的映射保存在内存中,使得查询的时问复杂度降为0(1),提高查询效率。图2.3所示为参数请求的协作关系:12第二幸Web自动化测试框架研究图2-3参数请求协作关系从图2.3可以看到框架首先根据参数值向Cache请求参数名,如果Cache存有该键值对,则返回参数名给框架,请求结束。如果不存在该键值对,则将该请求抛给参数库文件。参数库文件存储了框架所有已经学习过的参数名,框架会遍历参数库文件中所有的参数名对应的参数值链表。如果链表中存有该参数值,则将链表对应的参数名返回,并把该参数名参数值的映射存入Cache。如果在参数库文件中也没有该参数值对应的参数名,则将请求抛给测试人员j由测试人员对该参数值取名。最后就是学习的过程,框架会把该参数名参数值的映射存入Cache中,方便下次使用,同时更新参数库。如果参数名已经存在于参数库文件中,则添加该参数值至链表1h否则在参数库中添加新的参数名和对应的参数值链表。随着框架从脚本中不断提取参数,高速缓存Cache中存储的键值对会越来越多。为了降低内存使用,本框架将使用FIFO算法替换Cache中已经存在的键值对。FIFO算法替换的思想是选择最早进入Cache的键值对进行替换,因为最早进入的键值对,其不再使用的可能性比最近刚调入的键值对要大。基于FIFO思想,本框架向Cache添加新键值对时,首先判断Cache容量是否已达最大值。当容量已经达到最大值时,新添加的键值对将根据FIFO算法,按照键值对进入Cache的时问顺序进行替换。先进来的先被替换,然后将替换指针加1,当替换指针达到最大容量时,再从0开始新一轮的替换。否则直接将新的键值对存入Cache中,这样的做法可以避免框架对内存的过度消耗。根据上述描述,图2.4即为本框架采用FIFO算法替换Cache的具体思路:东南人学硕士学位论文图2-4Cache添加算法KDD框架是一个具有学习能力的框架,它可以学习测试人员对参数命名的方法,并将学习到的参数名参数值的对应关系存入自己的参数库中。下次读取到同样的参数值时,框架便知如何给参数值命名。此外框架通过引入Cache大大提高了搜索参数名的效率。测试框架经过不断的学习,便可脱离与测试人员的交互,独立完成分离脚本中测试数据的工作,实现完全自动化。2.4.2框架脚本的设计关键字脚本设计的关键在于能够将业务逻辑抽缘为关键字组成的表,所以针对web应用测试的脚本应该将浏览器执行的每一步操作分解为关键字组成的语句。对Web应用的操作进行抽象分析,将每一步Web操作抽象为三要素,用下述表达式来表示:操作=命令+页面元素+输入值浏览器操作的命令通常包括输入,点击事件。页面元素主要包括按钮、输入框、单选按钮、多选按钮、文本、图片、列表框以及一些特殊控件。输入值通常在进行输入操作时需要,默认为空。据此,Web应用的自动化测试脚本可以设计成三列表格的形式。第一列为操作命令,第二列为操作元素,第三列为页面元素输入值。这样的表示方法可以涵盖用户对浏览器的所有操作。比如输入用户名14第二章Web自动化测试框架研究的操作可以抽象为“输入,输入框,用户名”。点击链接的操作可以抽象为“点击,链接”。具体的浏览器操作结构如图2.5所示:图2—5浏览器操作结构一个没有验证点的脚本不是完整的自动化测试脚本,验证点是判断脚本执行是否成功的关键。所以测试脚本中也要包含验证点来判断脚本执行是否成功,脚本的验证点也由三部分构成:验证点=类型+验证元素+期望值其中类型表示使用哪种验证方式,验证方式主要有比较元素属性值、元素文本值、页面标题以及数据库值。验证元素即需要验证的页面元素,而期望值则是测试用例中希望得到的值。例如想验证文本框值是否正确,验证点可以表示为“验证文本值,文本框,值”。综上所述,关键字脚本的结构主要分为两部分,一是对浏览器的操作,二是验证点。这样组成的脚本是一系列顺序操作的集合。然而在顺序操作中难免会出现重复操作,如果把这些重复操作提取出来作为一个脚本,当有其他脚本调用这些重复操作时,就在适当的地方调用这个脚本。这样不仅减少了脚本的操作步骤还能降低脚本耦合度,节省脚本生成时间,实现脚本复用。这里将这些可以被其他脚本调用的脚本称为共享脚本。所以最终的KDD框架脚本结构如图2-6所示:图2-6KDD框架脚本结构到此为止,本框架的关键字脚本设计已经完成。脚本实际是一个由大量关键字组成的表格,表格的每一行总共有三列,记录了浏览器的操作或者是每一个验证点。这里本框架把表格每一行的三列值用逗号分隔,采用CSV格式(逗号分东南大学硕十学位论文隔文件)的文件进行存储。这样测试人员就可以运用文本编辑工具诸如Excel打开脚本进行查看和编辑,人大提高脚本的灵活性和重构性。同时为了把数据驱动框架的思想引入进来,这里还需要引入脚本参数文件。参数文件可以采用“name=value”的键值对形式存放在文本文件中以提高文件的可阅读性,比如键值对可以这样存储“emailaddress=abc@yahoo.corn”,这种表示使测试人员很容易区分各个参数值的具体含义。因此当关键字脚本编写完成后,最后一步就是数据的分离操作。将输入值/期望值这列中的参数值提取出来存放到对应的参数文件中,并用参数名替换原脚本中的参数值。比如输入用户名的操作就可以表示为“输入,输入框,¥emailaddress”这种形式,当框架解析关键字到这列时,就会去参数文件中取得参数对应的实际值填入到输入框中。这样的设计实现了数据与脚本的分离,使得日后对脚本的维护和复用更加方便。测试脚本的设计是进行自动化测试的第一步,一个完整自动化测试系统的功能应该包括脚本的生成、脚本的解析、脚本的执行以及结果报告的反馈。因此在下面的章节中将针对本框架设计并实现一个自动化测试原型系统。2.4.3框架的优点本文所介绍的KDD框架是将数据驱动和关键字驱动测试框架结合起来的混合自动化测试框架。框架包含了上述两种框架的优点,有效地解决了两者存在的问题。框架最大的改进之处就是提出了一种有效分离关键字脚本中测试数据的机制,将测试数据单独存放于脚本对应的参数文件中。这样的改进带来的优点如下:(1)使得关键字脚本的测试数据维护更加方便。测试人员只需通过修改参数文件中的对应参数值即可解决原关键字框架测试数据维护难的问题。(2)脚本维护方便。当Web界面或功能变化时,测试人员只需根据关键字语法修改关键字脚本或参数文件中的数据,解决了数据框架脚本维护难的问题。(3)参数文件维护方便。每个脚本对应一个参数文件,使得对单个脚本数据的维护只需关注一个文件即可。共享脚本的引入提高了脚本的复用性,方便参数文件的管理。(4)降低自动化测试门槛。即使没有编程经验的测试人员在掌握关键字脚本语法以及熟悉业务流程的情况下,也可以根据测试用例编写测试脚本,解决了原来数据框架采用脚本语言的弊端。2.5本章小结本章首先阐述了自动化测试框架的相关理论,其次介绍了目前两个主流的自动化测试框架:数据驱动框架和关键字驱动框架,针对数据驱动框架使用门槛高、脚本维护困难、数据文件维护繁琐以及关键字驱动框架测试数据难维护的缺点,提出了一种混合自动化测试框架KDD。该框架结合两者的优点,采用缓存方法分离了关键字脚本中的测试数据,有效解决了两种框架存在的问题。第三章基于KDD的Web自动化测试系统设计第三章基于KDD的Web自动化测试系统设计根据第二章对KDD框架的介绍,本章基于KDD设计一个Web应用自动化测试系统AWTSKDD。该系统主要针对Web应用的用户界面、功能和浏览器兼容性进行测试。本章根据上述测试内容分析应用场景,对系统进行需求分析,最后对系统进行整体架构设计和各功能模块设计。3.1需求分析3.1.1应用场景目前浏览器市场群雄割据,用户浏览Web应用的选择呈现多元化趋势。因此好的企业应该重视用户体验,确保Web应用在不同浏览器下都能很好的呈现用户界面和功能的完整性。针对现在企业的这种需求,AWTSKDD系统将主要针对不同类型的浏览器进行测试,强调与浏览器的交互。通过在浏览器中运行Web应用对用户界面、功能和兼容性进行测试。首先,用户界面测试主要包括如下方面:(1)必要元素是否存在‘当Web页面加载完毕后,为了保证页面显示的完整性,需要判断某些元素是否存在。例如当用户进入登录页面后,需要判断当前页面是否存在用户名、密码输入框和登录按钮等元素。这样才是一个完整的登录页面,缺少任意一个元素都会影响用户体验。(2)指定元素是否可用当用户跳转到相关页面后,根据一些逻辑需要判断指定元素是否处于Enable或者Disable状态。比如浏览器跳转到提交表单的页面,当没有任何改动时,页面的取消按钮应为Disable状态。而当用户有改动时,取消按钮应为Enable状态,并且保存按钮一直为Enable状态。这样的测试可以确保应用逻辑的正确性。(3)页面字符显示是否正确Web应用的每个页面都包含有大量文字说明或者标签内容,因此需要对页面的字符进行判断,确保没有拼写错误或者丢失标点符号的问题。通过上述三个方面的测试可以保证Web应用页面显示的正确性。其次,功能测试上本系统主要包括:(1)数据校验测试。数据校验测试通过检查页厩上是否显示出错信息来判断数据是否非法。(2)数据库测试。数据库测试可以在页面操作完成后直接去数据库中取值来判断数据的一致性,或者直接通过对数据库进行操作来判断Web应用页面呈现是否正确。东南夫学硕士学位论文(3)表单测试。表单测试可以对表单进行填写修改和提交,看页面的变化以及数据库数据的变化是否正确。(4)链接测试。’链接测试则可以通过点击链接来判断跳转的页面是否为所要请求的页面。(5)系统特定动能测试。系统特定功能测试主要针对一些系统特有的功能进行测试,如上传图片,导入/导出用户以及一些操作的提示确认信息等。这些也可以通过判断元素是否存在来确认功能是否实现。最后,兼容性测试则是对主流浏览器如IntemetExplorer,Chrome和Firefox进行用户界面测试和功能测试,保证各浏览器的行为符合需求文档的要求。3.1.2功能需求本系统的功能需求主要体现在对Web应用的测试上,一个完整的自动化测试系统应该包括测试脚本生成到测试报告的呈现,因此本系统的功能需求主要有测试脚本生成、测试脚本执行、执行计划配置以及测试报告呈现。其中各部分的详细功能需求介绍如下:(1)测试脚本生成关键字脚本的生成可以采用开源的脚本录制工具或是测试人员按照关键字语法手动编写。本系统脚本生成应具备脚本转换和脚本参数提取两个主要功能。其中脚本转换是将工具录制的初始脚本进行加工,去除多余信息保留有用信息,最后转换成关键字脚本。而脚本参数提取负责从关键字脚本中分离测试数据,并将其保存在参数文件中。(2)测试脚本执行本系统能够根据关键字脚本的关键字和参数文件中的参数来驱动浏览器执行脚本并完成脚本中验证点的验证。(3)执行计划配置本系统采用XML格式的文件来配置脚本执行的个数、顺序以及被测系统的相关信息。要求系统能够新建、保存、修改、另存为执行计划,同时能够对XML文件中的标签、属性等关键字进行高亮显示,方便测试人员使用。另外系统能将执行计划中所要执行的脚本以树形列表的形式显示,突出当前正在执行的脚本,让测试人员了解脚本执行进度。(4)测试报告呈现测试报告应该包括被测系统的基本信息,如系统版本号、模块名称等,还要包括脚本执行的总数、通过数、失败数、跳过数以及成功率。同时还应包括跳过和失败脚本的出错信息,详细说明出错的元素、期望值和实际值,方便测试人员了解出错的具体位置,检查出错原因。测试报告可以保存在本地也可以通过邮件发到测试人员的邮箱以便测试人员查看。本系统在满足上述功能需求的前提下,还关注了非功能需求中的通用性、可第二三章基于KDD的Web自动化测试系统设i靠性及正确性。通用性要求系统能满足绝大部分Web应用测试需求,而不仅仅是某个公司或某个项目。可靠性要求系统不能因异常情况崩溃。正确性则要求测试结果能真实反映系统存在的问题,减少因为测试环境等客观因素造成的错报或者漏报缺陷的概率。3.2系统总体架构设计由上一章节可知,完整的自动化测试系统应该包括测试脚本生成到最终测试报告的获取。KDD框架重点研究了如何从测试用例到关键字脚本和参数文件的生成,因此本系统的脚本生成模块将利用KDD框架脚本生成原理来实现。同时将集成参数配置、脚本执行、执行计划以及测试报告和日志这四大模块,在脚本执行过程中使用自动化测试工具SeleniumWebDriver驱动Web浏览器。图3-1展示了该系统的架构:i圈圈ll回}j二IjIIIjIII忍IIIIIIIII二……Ijjj||||忍j||jjjjjjj…脚本生成模块l参数配置模块执行计划模块图3.1AWTSKDD架构图3—1中虚线框里的模块为AWTSKDD系统的五大模块。其中脚本生成模块采用KDD框架的思想来生成脚本文件和参数文件。参数配置模块负责参数的保存和读取。脚本执行模块则包括了关键字的解析,SeleniumWebDriverAPI的调用以及数据库的操作。执行计划模块是一个控制端,通过XML格式的执行计划文件控制测试执行顺序。测试报告及日志模块将脚本执行模块的日志信息写入东南人学硕:t学位论文日志文件,将测试结果信息发送给测试报告服务器,服务器再将填入信息的测试报告返回。本系统执行测试的步骤如图3—2所示:|越址lIl澍遗象撬I^…~…一q,“Mm^w‰“……_¨一…一…,惮迭越划隧。黔l生成参数文掌l:跺存执行跨划图3-2AWTSKDD时序由图3.2,本系统的执行步骤解释如下:(1)测试人员使用录制工具录制脚本,通过脚本生成模块对录制的初始脚本进行加工、分离数据得到本系统所需的关键字脚本和参数文件。(2)将上一步生成的脚本路径写入执行计划,配置相关脚本的运行。(3)系统调用脚本执行模块按照执行计划中的脚本顺序依次执行脚本。(4)执行完成后系统将运行结果保存在测试报告模块中。(5)测试报告及日志模块将结果信息发送给测试报告服务器,测试报告服务器将填充完测试结果的html测试报告返回给系统。(6)系统将测试报告保存在本地,如需发送测试报告则将报告内容以html格式发送。为了进一步了解本系统的结构设计,本文将采用事件驱动的Petri网20东南人学硕士学位论文移。每个转移发生的必要条件是:端口事件发生和数据地点的记号大于等于‘。转移的发生没有先后顺序,只要转移处满足上述两个条件就能发生。图3.3中各个组件的详细说明如表3.1所示:表3一l图3-3中的EDPN元素类型端口输入事什端口输入事件端口输入事件端口输入事件端口输入事件数据地点数据地点数据地点数据地点数据地点数据地点转换转换转换转换转换描述脚本转换分离参数脚本录制生成执行计划脚本执行初始脚本关键字脚本分离参数的关键字脚本执行计划测试结果测试用例状态转换:dl到d2状态转换:d2到d3状态转换:d6到dl状态转换:d6到d4状态转换:d3、d4到d5元素P1P2P3P4P5dld2d3d4d5d6S1S2S3S4S5分析表3-1可知P节点集合代表了所有发生的事件,在本系统中代表一些对脚本文件的操作。d节点表示数据,在本系统中代表各类数据信息包括脚本、执行计划和测试完成的结果等。S节点代表转移事件,通过S可以将一个数据节点转换成另外一个数据节点。根据上表定义的节点信息,通过分析本系统脚本生成过程中状态的迁移以及所需的事件和数据,本文设计了测试脚本生成的标记,如表3-2所示:表3.2测试脚本生成的标记元组mlm2m3m4m5m6m7p10001000p20000010p30100000p40OOO000p50000000dlOO11000d2O0001l0d30000001d4O00OOO0d5000OO00d61100000描述初始条件,处于状态d6p3发生处丁状态d1p1发生处于状态d2p2发生处于状态d3表中0代表事件没发生或者没有该数据节点,1表示对应事件发生或者有一个数据节点的实例。从表中可以看出脚本生成需要经过事件p3(脚本录制)、第三章基于KDD的Web自动化测试系统设计(Event.DrivenPetriNetwork,简称EDPN)来表示AWTSKDD测试系统的状态迁移。EDPN对传统Petri网进行改进,使得Petri网能够更准确地表示事件驱动的系统,并解决了表示事件静止的Petri网标记问题【矧。EDPN是一种包含三个节点集合P、D.和s,以及两个映射集合lIl和Out的图。其中:P是端口事件集合。D是数据地点的集合。S是转移的集合,可以解释为行为。In是(PUD)×S的有序对偶集合。Out是SX(PUD)的有序对偶集合。端口事件集合P和数据地点集合D,就是In和Out定义的S中转移的输入/输出,s中的若干转移构成转移序列【4¨。在用EDPN描述事件驱动系统的状态迁移时,必须对EDPN做标记,以便能够有效地解决传统Petri网的事件静止问题。EDPN的一个标记M,是P元组的一个序列M=<ml,m2,…>,其中p=k+n,k和n分别是集合P和D中的元素个数,P元组中的个体项表示事件或数据地点中的记号个数。EDPN可以拥有任意数量的标记,每个标记都对应网络的一个执行。当EDPN中一个转移的所有输入中至少有~个记号,该转移/j1允许发生:当触发一个转移时,要从该转移每个输入地点删除一个记号,并在每个输出地点增加一个记号。根据EDPN网的定义,本系统AWTSKDD的EDPN如图3—3所示:S1S3S2S5图3.3测试系统EDPN从图3—3可以看出本系统共有五个端口事件,六个数据地点以及五个事件转第三章基于KDD的Web自动化测试系统设计事件pl(脚本转换)和事件p2(分离参数)三个事件。其中p3的发生依赖数据节点d6(测试用例),pl的发生依赖数据节点dl(初始脚本),p2的发生依赖数据节点d2(关键字脚本)。每个事件的发生会产生新的数据节点处于新的状态,空3的发生生成数据节点d1,p1的发生生成数据节点d2,p2的发生生成了数据节点d3(分离参数的关键字脚本)。针对需求分析中的非功能需求,本系统的测试脚本设计是面向浏览器行为,与具体的Web应用无关,所以可以满足通用性需求。本系统将脚本执行状态分为Pass、Block和Fail,其中Block是由于系统异常或浏览器异常造成的脚本执行失败,Fail状态则是因为结果和期望值不同造成的失败。这些失败原因都将会呈现在最后的结果报告中,使得测试人员能判断哪些是确实存在的缺陷,哪些是因为系统或者环境的问题造成的,因此可以满足正确性需求。在可靠性方面系统会捕获所有系统运行过程中的异常并写入日志文件,系统不会因异常而中止,测试人员也可以查看日志了解出现异常的原因。3.3模块设计3.3.1参数配置模块参数配置模块主要负责整个系统的参数设置,包括执行参数配置、数据库参数配置、邮箱参数配置和其他参数配置。其中执行参数有测试浏览器选择和测试人员邮箱地址。数据库参数主要存储与Web应用后台数据库连接所需的参数,有数据库地址、连接数据库所需的用户名和密码、数据库端口号以及数据库实例名。邮箱参数存储了发送测试邮件所需的转发邮箱参数,有SMTP服务器地址以及该服务器上的一个有效账户。其他参数包括IE浏览器的驱动文件、Chrome浏览器的驱动和Firefox的profile文件、默认脚本转换文件夹以及远程服务器地址。在具体设计上每个参数配置对应一个对话框,测试人员通过对话框设置和修改相关参数值。因为数据库参数、邮箱参数以及其他参数中的驱动路径等参数都具有永久性,所以本系统采用“config.ini”、“db.ini”、“email.ini”三个配置文件来记录这些参数。配置文件操作如图3.4所示:读取I堡兰竺l=I内存I>操作存入一图3.4配置文件操作系统只在启动时需要从文件中读取参数值并存入内存,接下来进行的修改及保存操作均在内存中进行,当系统关闭时会将最后的更改写入配置文件中。这样做可以减少文件读写次数,提高效率。东南大学硕士学位论文3.3.2脚本生成模块本框架采用脚本录制的思想,运用开源工具SeleniumIDE对浏览器操作进行录制,使得脚本的生成更加快速高效。SeleniumIDE也是采用三段式来录制浏览器的操作,通过id、xpath、超链接、css、name和dom对浏览器中的元素进行定位。本框架的脚本开发流程如图3—5所示:』初始脚本』关键字脚本』【分离参数的关键字脚本■r结束、\/图3-5脚本开发流程首先,测试人员使用SeleniumIDE录制脚本,SeleniumIDE可以录制浏览器的操作也可以添加验证点,本系统支持的验证方法主要有判断页面标题、判断元素属性值、判断元素文本值、判断数据库中的值、判断元素是否可用以及元素是否存在。通过SeleniumIDE录制完成的脚本就是初始脚本。该脚本是html格式的,但脚本中包含大量冗余的html标签和文本。因此本系统下一步工作就是要对文件进行解析,将初始脚本转换为关键字脚本。在初始脚本中,测试的URL保存在<link>标签的href属性中,如“<linkrel=”selenium.base”href=”https://aw—admin.orionqa.corn/”/>”。因此通过link标签的href属性值可以提取出脚本录制的基地址。而录制中的浏览器操作保存格式如下:<tr><td>type</td><td>id=email</td><td>orionl5@exchange2007.com</td></tr>每步操作都使用了三个<td>标签,所以将所有td标签的Node元素数组根据被3除的余数进行操作。余数为0、余数为1、余数为2分别对应该步的操作、24第三章基于KDD的Web自动化测试系统设计元素和输入值/验证值。最后按照每行一步的格式,用逗号分割各字段就成为了CSV格式的关键字脚本,经过处理的脚本就与本框架的三段式脚本保持一致。这一步只是实现了关键字脚本的生成,最后一步也是最关键的一步是分离测试数据。系统将采用第二章介绍的缓存算法完成测试数据的命名和分离,分离出的测试数据以properties作为后缀保存成与脚本文件同名的参数文件,同时将脚本文件中的测试数据用参数名替代。例如脚本中有一个输入值“xxx@yahoo.tom.cn”,则分离完成后的脚本将用“Semailaddress”替换原来的值。本系统的参数值不仅可以是一个数据也可以是包含大量测试数据的CSV文件,并且可以指定该文件的第几列值作为测试输入。参数文件的格式如“emailaddress=#D:/datafiles/invalidEmailaddress.csv,0”,其中“撑”代表该参数值为文件,后面附带数据文件的绝对路径,最后的数字代表读取该文件的第几列作为测试输入。经过上述步骤得到的脚本仅仅是一个顺序执行类似于回放的脚本,其中只是包含了一些操作浏览器的关键字,并且SeleniumiDE也不支持对数据库的操作和验证。因此针对上述情况,本系统结合SeleniumIDE自带的关键字设计并添加了新的关键字,不仅支持SeleniumIDE,还能使脚本灵活多变满足测试需要。具体的操作关键字如表3.3所示:表3—3操作关键字关键字名称baseurlopentype关键字含义测试网页的基准URL打开的路径输入输入并等待点击点击并等待验证元素文本值验证页面标题验证元素Value属性值验证元素是否存在循环开始循环结束共享脚本验证数据库中的值插入数据库操作删除数据库操作更新数据库操作执行JavaScript脚本等待操作验证元素是否可用typeAndWaitclickclickAndWairverifyText/assertTextverifyTitle/assertTitleverifyrValue/assertValueassertElementPresentbeginenddependsOnassertDBValueinsertDBdeleteDBupdateDBexecuteJavaScriptpauseassenEnabled东南大学硕士学位论文本系统添加了循环、共享脚本、数据库操作、JavaScript操作、延时以及判断元素是否可用在内的关键字,具体说明如下:(1)循环关键字(begin,end)。begin代表循环的开始,end代表循环的结束。循环配合数据文件的使用是一个很好的选择。比如要测试Email地址验证功能,可以将非法Email地址的所有类型用CSV文件保存。执行脚本时循环读取文件中的一个值然后判断页面的出错提示,这样一个脚本便可覆盖所有的测试用例。(2)共享脚本关键字(dependsOn)。共享脚本是把重复过程包装起来供其他脚本调用的脚本。在每步的元素一列中指明了共享脚本的名字。当系统遇到dependsOn关键字时,会根据共享脚本名字执行共享脚本中的操作直到全部执行完毕并返回。(3)数据库操作关键字(insertDB、deleteDB、updateDB、assertDBValue)。系统采用JDBC连接数据库,封装与数据库的操作,包括增删改查。(4)延时操作关键字(pause)。由于浏览器对用户操作的响应存在延迟,再加上Ajax的广泛应用,所以设置相应的延迟操作等待浏览器是有必要的。(5)JavaScript操作关键字(executeJavaScript)。web应用的测试脚本还应该支持JavaScript语句,JavaScript可以轻而易举地对Web页面进行操作,因此符合测试的需要。(6)判断元素是否可用关键字(assertEnabled)。当对页面进行操作后,某种逻辑可能需要禁用某些元素。assertEnabled关键字可以通过查看元素的enable属性判定元素是否被禁用。综上,当脚本录制完成并被参数化后,测试人员可以根据实际测试的需要,对脚本进行修改和定制。通过添加循环、延时、JavaScript操作以及数据库操作等,还可以修改参数文件中的参数或者添加数据文件来完成对Web应用特定功能的测试。3.3.3脚本执行模块脚本执行模块主要负责对关键字脚本进行解析并且根据关键字的值进行相应操作,同时还要负责从参数文件中获耿参数值。其中循环关键字需要在脚本中标识循环的开始和结束,该关键字不会涉及读取参数文件的操作。浏览器操作关键字可以通过调用SeleniumWebDriver的API来进行操作,数据库操作关键字可以通过JDBC来完成对数据库的增删改查操作,共享脚本操作关键字可以通过打开对应共享脚本进行解析并完成操作。系统会一直循环读取脚本关键字直至脚本全部操作解析完毕。3.3.4执行计划模块执行计划定义需要执行的脚本以及执行顺序,这样测试人员就能根据测试需要动态设置脚本的运行。考虑到扩展性,框架执行计划采用XML格式进行编写,26第三章基于KDD的Web自动化测试系统设计如下为1个具体的实例:<projectname=”OrionAdmin2.0”build=”1.2.240”module=”Admin”><basedir>D:\Formatcase</basedir><dependsPath>depends</dependsPath><dir>BasicFunSettings</dir><dir>BasicFunSystem</dir><case>BasicFunctionTestCompanylnfo.CSV</Case></project>表3—4具体阐述了执行计划中各个节点的具体含义:表3.4执行计划节点标签名projectbasedirdirCaSe说明执行计划的根节点所有脚本文件存放的基准文件夹包含执行脚本的文件夹一个需要执行的脚本共享脚本所在文件夹dependsPath此处“project”根节点包含三个属性值,“name”代表本次执行计划的名称,“build”表示测试Web程序的版本号,“module”表示测试的模块名称。由表3-4对节点和属性值的定义可知,这条执行讣划将会依次执行BasicFunSettings文件夹下的所有脚本、BasicFunSystem文件夹下的所有脚本和BasicFunctionTestCompanylnfo脚本。所有路径都是基于“D:\Fonnatcase\”这个文件夹下,并且脚本中共享的脚本都位于“D:\Formatcase\depends”文件夹下。通过执行计划,测试人员可以任意安排需要执行的脚本文件以及执行的顺序,同时可以将一类脚本放在一个文件夹中一起执行?使得脚本执行条理清晰。3.3.5测试报告及日志模块自动化测试中测试报告很重要,通过测试报告测试人员能获得测试执行的结果,分析结果找出Web应用存在的缺陷。在本系统中脚本有三种状态,第一种“Pass”,即脚本按照测试步骤顺利执行并且各个验证点也都符合预期。第二种“Block”,即脚本执行过程中遇到了异常导致脚本运行终止。第三种“Fail”,即验证点的实际值和期望值不符。本系统测试报告包含有执行的脚本总数,Block的脚本数,Fail的脚本数,通过率,同时还包括测试名称,测试模块和版本号以及执行开始和结束时间,最后在报告中还列出了Block脚本的具体出错信息和Fail脚本出错验证点的信息,供测试人员参考。本系统测试报告生成的结构信息如图3.6:东南大学硕上学位论文◇一叵测试系统JSON————————————————————+图3—6测试报告生成结构本系统测试报告采用html格式,这样可以采用多种样式使得报告美观清晰。为了减轻本系统的负担,本文单独开发一个测试报告服务器,该服务器可根据测试结果信息动态生成测试报告。当计划执行完成后,系统将结果信息以JSON数据格式向服务器发送JSP请求,服务器接收JSON数据后将测试结果信息动态的填入html页面并将页面内容返回给系统,系统接收服务器响应并将html格式的测试报告保存在硬盘里。另外本系统支持以html格式将测试报告文件的内容发送到测试人员邮箱,具体的发送原理如图3—7所示:测试系统中转SMTP服务器图3.7邮件发送原理测试人员SMTP服务器系统采用sMTP服务器转发的策略实现,对邮件的操作会用至lJJavaMail。JavaMail是Sun公司提供给开发者处理电子邮件的编程接口,可以方便地执行一些常用的邮件传输。JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。其qhSession定义了一个基本的邮件会话,它需要从Propertiesqb读取类似于邮件服务器、邮件协议、端口号、用户名和密码等信息。为了防止垃圾邮件的泛滥,现在大多数SMTP服务器登录都需要验证发件人身份,所以在SMTP服务器上拥有一个合法账户是使用该SM,rP服务器发送邮件的前提。因此本系统在使用邮件发送功能时会要求测试人员配置邮箱服务器信息,包括服务器地址以及用户名和密码。系统发送测试报告邮件时,首先通过JavaMail的API与系统配置的中转SM皿服务器建立连接,并将邮件发送到该SMTP服务器,再由该SM,rP服务器进行转发到达测试人员的邮箱。本系统的中转服务器可以使用绝大多数的免费邮箱,包括yahoo,QQ,Gmail,163等。通过分析测试报告,测试人员就能了解Web应用的问题所在,尽第三章基于KDD的Web自动化测试系统设计早解决以保证Web应用的质量。另外为了保证系统口J+靠性需求,系统会捕获运行过程中的异常,并将异常信息记录到日志文件中,确保系统不会因异常而意外终止从而影响测试的进行。3.4本章小结本章首先根据系统测试内容分析系统的测试场景和功能性需求并对系统整体架构进行设计。然后按照参数配置、脚本生成、脚本执行、执行计划和测试报告及日志的顺序对各个模块的设计进行详细阐述,为系统的实现打下基础。东南大学硕士学位论文第四章AWTSKDD系统实现根据第i章对AWTSKDD系统的设计,本章将讲述系统的具体实现。重点从开发环境和工具、系统运行前所需配置以及实现各模块的类信息、相关代码和流程图展开。4.1开发环境和工具考虑到Java语言的通用性和跨平台性,并且大多数测试工具都支持Java语言,本系统采用Java语言对系统进行开发。运用Swing实现系统的界面,集成开发环境Eclipse进行系统的开发。在工具的选择上,本系统选用SeleniumWebDriver作为Web自动化测试工具。它是一个开源包,支持多浏览器,提供了丰富的API对浏览器进行操作。脚本录制选用SeleniumIDE,录制的脚本可以转换为关键字脚本,配合SeleniumWebDriver使用十分方便。在邮件发送上使用JavaMail发送到中转SMTP服务器然后进行转发。系统日志功能使用tz94j进行实现,L094j将要输出的Log信息定义了5种级别,通过XML格式和Javaproperties格式的配置文件进行参数设置。另外系统使用JDBC对数据库进行操作,dom4j对XML的执行计划进行解析操作,htmlparser对html格式的脚本进行解析操作。整个系统对测试人员隐藏了实现细节,测试人员只需了解如何使用本系统,然后按照自动化测试流程进行脚本开发、运行、查看测试结果、报告Web应用缺陷就能完成自动化测试任务。4.2系统配置(1)SeleniumIDE配置本系统需要借助SeleniumIDE进行脚本录制,由于SeleniumIDE是Firefox的插件,因此测试人员必须首先安装Firefox浏览器,然后安装SeleniumIDE插件进行脚本录制。(2)chromedriver,IEDriver与FirefoxProfile文件的准备Selenium支持很多主流浏览器。但这些浏览器的支持是有前提的,IE浏览器和Chrome浏览器需要事先准备好对应的驱动程序,分别是IEDriverServer.exe和chromedriver.exe这两个可执行文件。Firefox则可以单独新建一个用户配置文件FirefoxProfile,对Firefox做的所有设置,比如主页、工具栏、保存的密码以及书签,它们都被保存在一个指定的用户配置文件夹中。有了用户配置文件就相当于单独准备了一个Firefox浏览器供测试人员使用。第四章AWTSKDD系统实现4.3系统模块实现完成}:述系统配置的工作就可以使用本系统进行Web应用的相关测试,系统主要通过与测试人员和测试报告服务器的交互进行测试,本节将按照第三章的模块设计对系统各个功能模块的实现进行介绍。4.3.1参数配置模块系统运行前必须首先设置相关参数才能使用本系统进行测试。参数主要有系统参数、数据库参数、邮箱参数、执行参数四部分,参数配置模块类关系如图4.1所示:31)ialog△lsettingDialogdatabaseDialogemailDialogexecuteOialog图4.1参数配置模块类图不同的对话框类对应不同的参数类型,每个对话框类都继承自JDialog类。测试人员通过与对话框的交互对系统参数进行配置,同时系统将前三种参数分别保存在“config.ini”、“db.ini”和“email.ini”三个配置文件中。为了方便配置文件的读取和写入,本系统设计并实现了Fileini类。该类包含了对文件的操作。其中定义了两个静态方法,一个是readFromFile,该方法负责从配置文件中读取参数信息并存储到链表中,入口参数为需要读取的配置文件路径和存放有读取后参数信息的链表。系统调用该方法从配置文件中读取参数信息并通过遍历链表提取相关参数值。另一个是WriteToFile,该方法负责将参数信息写入配置文件。入口参数为需要写入的配置文件路径和存储参数信息的链表,调用该方法就可以将用户在对话框中设置的参数信息写入配置文件。当系统启动时调用readFromFile读取参数值存入内存,当系统关闭时调用WriteToFile将最后的更改写回配置文件。基于系统安全的考虑,在配置文件中邮箱密码和数据库密码均采用Base64编码方式加密存储。Base64通过将三个8位的字节转换为四个6位的字节,然后再把6位添加两位高位0,组成四个8位的字节,因此转换后的字符串理论上应该比原字符串长1/3。东南大学硕士学位论文4.3.2脚本生成模块本系统的脚本由关键字组成,脚本中的测试数据存储在参数文件中,使得脚本和数据分离。脚本的生成将分为三步:录制脚本、转换脚本和分离脚本。下面将对每一步的实现进行详细阐述。(1)录制脚本系统为了节省时间,采用脚本录制的思想进行初始脚本的生成。测试人员根据测试用例对浏览器进行操作,使用SeleniumIDE对操作进行录制,保存后得到一个html格式的初始脚本。但这个脚本并不适合系统进行测试,所以下一步是使用系统对初始脚本进行转换,生成CSV格式的关键字脚本。(2)转换脚本这一步,系统会将第一步生成的初始脚本转换为CSV格式的关键字脚本。转换时系统先判断转换文件夹下是否有同名CSV格式文件,若没有则调用SwitchCaseFile类的formatFile方法。该方法接收两个参数,转换前的脚本存放路径和转换后脚本存放路径。formatFile方法将使用htmlparser包对html格式的初始脚本进行解析。首先使用TagNameFilter对link和td节点进行过滤,使用Parser类的extractAllNodesThatMatch方法取得满足过滤条件的所有节点并存在Node数组中。其次通过Node的toHtml方法取得link节点的原始html信息,通过toPlainTextString方法取得td标签的纯文本信息。然后采用正则表达式“(http[s]+://.卓/1”对link节点的原始html信息进行匹配取得录制脚本的基地址,根据被3除的余数对td标签的纯文本信息进行分类。最后将处理后的信息保存为CSV格式的关键字脚本。formatFile方法将通过异常捕获判断脚本转换是否成功,并返回相应的boolean值。当脚本转换成功后,所有转换过的脚本都将存放在转换文件兴下。此时的脚本只是按照录制步骤顺序回放,并不能完全满足测试人员的需求,因此接下来测试人员需要根据测试用例、关键字脚本的相关语法使用Excel对脚本进行修改并保存。修改后的脚本已经能够根据测试人员的需要完成相关操作并验证功能点,下一步就是分离关键字脚本中的数据生成参数文件。(3)分离脚本分离脚本所做工作是将上一步生成的关键字脚本中的测试数据进行分离,将数据单独保存在参数文件中。具体分离将根据KDD框架的缓存算法进行。本系统使用CSV格式的文件parameterLibrary.CSV作为参数库,文件存储所有系统已经学习的参数命名方法。缓存算法的类关系如图4—2所示:第网章AWTSKDD系统实现;Palneter|。ihrary—ll\n≥】毋。l糖j:l:inke0Li、t<h”E辩to}1巍。e%}!ln,h,{;戳氟申:∞F辩%;Ⅲs《坤i阳豫;II(}!In强张l了Pn{h:_¨if{畦-Para耻lerXame"faluesh““lx枷lp,。tr‰4沁m,i融“缸讳Nt?flilpf;:j¨一ie醐H#”{rl{.j~t|;II’Bi¥t{llⅡ‘!in}.,I.Ip:,:11iI:g}:-lIirl#;v.!;。.。-.j.i,kt,Inijf?、f·i}:.:一趴l!_£{i疽:m、停讣}mi}№lj|tj;:nv{il骑:辩ring]:¥(|idci、idk积,越}V.瞄os:】n“溉-.Ft]、irg,in11u幽p睫燮、誓≯1h州t“"饼t『辩:sllljjl磊珀圹………’lw.:1l”!1lJ,忙:}L;i。删las呦}l+:tring)stri。g图4-2参数分离类图namevalueMap类实现系统的高速缓冲,存储最近使用的参数名参数值的键值对。该类继承白LinkedHashMap类。LinkedHashMap类是HashMap类的一个子类,保存了记录的插入顺序,遍历时先得到的是先插入的记录。类中添加了两个成员变量,maxSize记录Cache的最大存储容量,replaeeNum表式需要被替换的记录位置。同时该类覆盖了LinkedHashMap类的put方法,当记录总数等于maxSize时,根据replaceNum的值将该位置的记录删除,同时调用父类的put方法插入新的记录,并将replaceNum的值加1。当replaceNum的值等于maxSize时,则将replaceNum值置为0,进行新一轮替换。ParameterNameValues类表示参数名称与值的对应关系。类中包含了String类型的参数名称和用链表LinkedList类型存储的对应参数值。PameterLibrary类表示参数库,存储所有学习的参数命名方法。类中包含了参数库的路径parameterLibraryPath、表示Cache的l'lameParameterNamevalueMap类以及Values类型的链表,该链表用来存放参数库中已经学习到的所有参数名和对应的参数值。系统初始化时,PameterLibrary类会通过readFromLibraryFile方法从数据库文件中读取所有已经学习到的参数命名。根据参数名称新建一个ParameterNameValues类的实例,并将参数库中所有与之对应的参数值存入链Name表,然后将该实例加入ParameterValues类型的链表。参数分离过程中系统会根据当前已经学习到的参数命名方法对参数命名,如果遇到不认识的参数值系统会交给测试人员进行手动命名。具体分离步骤如图4—3所示:33东南大学硕+学位论文◇>。么慕7◇/一否◇JFiteChooser获取脚本否读取一行脚本内容getParaNameByValue方法获取参数名邑<≤奎≥1参数值参数名键值对存入HashMap,{参数值存入二维数组≤亟畛否一掣霉金曩,支\————————jL—————一HashMap中键值对J写入参数文件lreplacepara方法}I替换脚本参数l图4-3参数分离流程通过图4—3所示的分离流程,测试人员就将所有录制的初始脚本转换成CSV格式的关键字脚本并且提取脚本中的测试数据保存成参数文件,生成的脚本和参数文件将存放在指定的转换文件夹下。第四章AWTSKDD系统实现4.3.3脚本执行模块该模块主要负责解析脚本中的关键字,根据关键字的类型完成对浏览器的操作以及验证点的判断。其中驱动浏览器的操作将由开源测试工具SeleniumWebDriver完成。因为本系统支持对三种浏览器的操作,而WebDriver提供了InternetExplorerDriver、ChromeDriver、FirefoIxDriver这三个驱动类来支持对相应浏览器的操作,并且这三个类都是对接口WebDriver的实现。因此本系统根据面向对象的设计原则:针对接口编程,而不是针对实现编程。在驱动类BrowserDriver中声明一个WebDriver接口的引用变量。脚本执行模块的类关系如图4.4所示:图4-4执行模块类图系统根据测试人员选择的具体浏览器将该引用实例化成具体的驱动类,代码如下:publicBrowserDriver(StringbrowserSelect){ifCorowserSelect.equals(”IElf))driver=newelseInternetExplorerDriver0;if(browserSelect。equals(”Chrome”))driver=newChromeDriver0;elseif(browserSelect。equals(”Firefox”))driver=newFirefoxDriver(newFirefoxProfile(newFile(mainUI.getFirefoxProfileO)));)在BrowserDriver驱动类的构造函数中传递选择的浏览器字符串,通过判断字符串值实例化具体的驱动类。其中driver就是WebDriver接口的引用类型,采用多态的思想实现对不同浏览器调用不同的操作,而无需分别定义不同的驱动类。脚本执行主要是对浏览器的操作,因此操作之前就需要先找到指定元素。但东南大学硕士学位论文由于现在Ajax作为Web2.0的主要技术正在被越来越多的网站所应用,其核心是JavaScript对象XmlHttpRequest,是一种支持异步请求的技术,因此Ajax会导致页面元素加载时问的不确定性。使用原WebDriver的findElement方法查找元素时可能页面仍在请求中而导致找不到元素抛出异常,进而使得脚本运行失败0·但事实上这是延时导致,并不是Web应用的Bug,因此通过在驱动类中定义如下方法解决页面加载时间不定的问题,代码如下所示:privateWebElementwaitforelementpresent(StringelementLocator)throwsException{finalByby=getBy(elementLocator);this.element=elementLocator;WebElementele=(newWebDriverWait(this.driver,30)).until(newExpectedCondition<WebElement>0{publicWebElementapply(WebDriverdriver){driver.findElement(by);return))1);pause(1000);returnele;)其中这个函数的入口参数就是元素的定位信息包括元素的id、xpath、link、CSS等,函数getBy通过定位信息定位到具体元素,最后调用WebDriverWait类的until方法执行等待操作。这个函数将在30秒内每隔500毫秒扫描1次页面,直到指定的元素出现并返回该元素,如果30秒内不出现将触发异常,即断定页面不存在该脚本中的元素,这样就很好地解决页面元素加载时间不定问题。在BrowserDriver驱动类中定义了三个BufferedReader类实例dependsCaseReader,dataReader和caseReader,分别对应共享脚本、数据文件和脚本内容的读取。驱动类中还定义了两个HashMap类paraMap和dependsParaMap,分别存储了脚本参数文件和共享脚本参数文件中参数名和对应参数值的键值对。通过布尔型变量isDepends来决定从哪个HashMap中获得参数值,当为true时通过dependsParaMap获得共享脚本的参数值,否则通过paraMap获得脚本参数值。此外还定义三个静态成员变量excuteNum,notPassedNum和blockNum,分别对应已经执行的,失败的以及异常终止的脚本数目。脚本执行时,会根据isDepends参数决定读取的脚本文件,然后根据读取出的脚本内容提取关键字,根据关键字的值再进行相应的操作,采用switch.case分支来实现。在解析脚本时由于涉及到对数据库的操作,因此系统设计了数据库类Datebase,封装了具体的数据库操作,完成数据持久化工作。Datebase类定义了第四章AWTSKDD系统实现对数据库操作的函数,如表4-1所示:表4-1Datebase类方法方法名功能getSingleValue根据传入的命令获得数据库中的具体值并返同updam根据传入的命令对数据库执行更新操作并返同更新记录的数目insert根据传入的命令将记录插入数据库中并返回插入记录的数目delete根据传入的命令从数据库中删除记录并返回删除记录的数目在BrowserDriver中遇到数据库操作关键字只需直接获取Database类的实例,然后根据操作类型调用上述方法即可,每个方法都会捕获执行过程中的异常。BrowserDriver驱动类封装了SeleniumWebDriver自身的API包括获取浏览器元素、点击元素、文本框输入、获取元素的属性值、执行JavaScript语句等操作。系统脚本解析时不同关键字将调用不同的操作进行处理,具体对应关系见表4—2:表4.2关键字解析操作关键字对麻操作baseURL存储baseURLopen调用driver.get函数typesendText方法填充相应文本框typeAndWaitsendText方法填充相应文本框并等待2秒clickClick方法点击相应元素clickAndWaitClick方法点击相应元素并等待2秒verifyText/assertTextassertTextRight方法判断文本与指定值是否相同verifyValue/assertValueasserlValueRight方法判断元素value属性值与指定值是否相同begin调用BufferedReader的mark函数进行标记end数据文件还有值调用BufferedReader的reset函数回到begin处,否则继续操作dependsOninRdependsfile方法初始化共享脚本assertDBValueassertDBValue方法判断数据库值是否与指定值相同insertDBinsertDB方法对数据库进行插入操作deleteDBdeleteDB方法对数据库进行删除操作updateDBupdmeDB方法对数据库进行更新操作executeJavaScriptexecuteJavaScript方法进行JavaScript的执行pausepause方法暂停指定时间assertEnabledassertElementEnabled方法判断元素禁用与否系统执行脚本时通过读取脚本文件和参数文件获取关键字值和参数值,再根据关键字的不同执行不同的操作,执行流程如图4.5所示:东南大学硕仁学位论文r开始、、\/,j读取下一步操作/脚本解八,人\\结束?/,/\/7标记循环开始位置跳转到循环开始位置否◇是◇否◇肛i千千获取操作关键字是否芑◇是一一燃恭HwSe紫lenium卜《》是一燃鋈H蓍曩霭甭l《签爹足一燃蠢簪悱…解引//^\\图4-5单个脚本执行流程执行过程中系统会捕获异常记录到系统日志文件,并把因异常而跳过的脚本名称和异常原因进行存储,同时还会根据验证结果将出错脚本名和出错信息存储下来,这将在测试报告及日志模块中进行说明。4.3.4执行计划模块该模块负责脚本的批量执行,系统通过XML格式的执行计划配置需要执行的脚本和执行顺序。采用标签页的形式呈现执行计划,标签页抽象成executePanel类,该类继承自JPanel类。成员变量包括实现富文本编辑的JTextPane类型的executeContent变量,存储执行计划路径的String型的executeDir变量。为方便测试人员对测试计划进行编辑,系统对XML文件中正确的属性名,属性值以及节点名进行高亮显示,其中节点名显示橙色,属性值显示粉色,属性第四章AWTSKDD系统实现名显示红色,尖括号显示监色。高亮显示通过实现DocumentListener接口,覆盖其中的insertUpdate、removeUpdate和changedUpdate方法,并向executeContent变量添加该事件监听器来实现。高亮显示算法流程如图4-6所示:—型塑~-结束)县一专符串尾雪一~一一,CL一./,I。。、…7~…一~....。否<{垂孽~,.?=:二,是1蓝景票亮一拔为空?、,一是0i入莩藉谴ii一否r甭c≤争一;≥>是.4蓝爱票亮厂-—<罐为至≥二——是一——d一——~舂f弭面≮}丽砑f事rj菊再买舞百百石i]二——一1T.』孬百算i天丽{甄一一一——t~?。、projeet’井蓦,一。一一一一一L~~一』一‘j《细关键字傅蔓~吾一——一~。。…?一一f__一—二27是,橙色高亮显示卜普通显示一否~j普通豆杀__一~,_‘projetL’橙色高亮l~一一——jL一是~一j字符串尾?、:一——---一是——一...—一t、≤藉;一是一二逗!尊箩,一否1嚣.1丐墨等2雾{『;香(否ij压入字符位置~…茎~…字符7.、‘是~通垫窖t一是j于1:篆零≯八__-!墨痴j、一是=丢嚣蚕囊蠹_是f狗骧雾■j!T否L—~一—_一台—————————一1』卜/7+;藉?、、一是一遁i孽牵≯~~一~一、T/’7否~'———一是f:否J{~可甄雨言乇弋着蔓一j获得属性名称属茬歪1隶磅≯否普通显示.是}粥R互需i弓宰■:…堡丕’!—£二二二—二[二—=二图4-6XML高亮显示算法一一=二二二二二二二二二二二J当executeContent监听到插入、更新或者删除操作时会调用该算法对文档内容进行高亮显示。该算法通过JTextPane类的getDocument方法获得文档内容,然后遍历文档对符合要求的字符串调用JTextPane类的setCharacterAttIibutes方法39东南大学硕士学位论文设置其Style属性。Style是包“javax.swing.text”中的接口,描述了文档的属性集合,包括字体颜色、大小等属性,因此算法的时问复杂度为O(n),与文档内容的长度成正比。该算法以字符串操作为基础,同时采用三个栈分别存储尖括号、属性名称、属性值的开始位置,当读到字符结束位置“>”、“=”、“””时,通过弹出栈中初始位置来判断所得字符串是否为执行计划定义的节点名或者属性名,如果结果为true就进行高亮显示。该高亮算法的调用机制如图4.7所示:事件监听者事件源r磊、/\insell事件处理方法J1'extPaneinsertUpdateremoveUpdatel-emOVechangedUpdatechange卜图4.7高亮算法调用机制当测试人员在标签页中编辑执行计划时,系统会根据输入内容对XML格式的节点、属性名和属性值实时进行高亮显示,保证执行计划格式正确。编写完执行计划,下一步就是载入该计划。载入时调用executePanel类的loadExcuteFile方法,该方法入口参数有三个,第一个是JTree类型的树,第二个是存放该树的JPanel类,第三个是本系统的测试报告Report类,用来存放解析过程中执行计划中的测试信息。该方法采用dom4j对执行计划进行解析,将project节点中的属性值和dependsPath节点的共享脚本存放位置进行保存。然后按照dir节点.;I;Dcase节点的顺序依次将需要执行脚本的名称传入DefaultMutableTreeNode的构造函数来新建树节点并存入JTree类型的执行树中。同时用String变量casefiles按照执行顺序存储脚本绝对路径,并用“;”分割不同脚本。树结构如图4—8所示:[习口<≥,∈、//④④@图4-8脚本执行树第四章AWTSKDD系统实现树节点第二层的顺序对应执行计划中dir和case节点的顺序,其中圆形节点为叶子节点,表示需要执行的脚本文件。方形节点代表一个文件夹,脚本可以在文件夹中执行也可以单独执行。载入完成后系统会用树形列表显示系统将要执行的脚本。此时界面上启动按钮变为可用,测试人员设置完测试浏览器以及收件地址后即可执行测试。系统将启动一个线程根据执行计划定义的脚本顺序执行脚本,具体执行流程如图4.9所不:启动webExecute线程俘≤≥实例化browserDriver驱动类上树形列表选中当前执行脚本-browserDri初始化0browserDriver执行脚本图4—9测试线程执行流程在执行的过程中,为了方便查看脚本执行进度,系统在执行过程中会启动另外一个线程processBar。该线程会新建一个进度条,进度条由ProgressMonitor类实现,进度条会根据当前执行的脚本数和总脚本数来设置进度条的进度并给出提示。线程每隔三秒钟刷新进度条。同时系统还会根据当前执行脚本名按照广度优先算法遍历执行树选中当前正在执行的脚本节点。该算法采用层序遍历执行树,使用一个链表存储还没访问过的节点。算法执行时会从链表中取出一个节点判断该节点是否为当前执行的脚本节点,是则返回该节点到根节点的路径,然后调用JTree的setSelectionPath方法选中该节点,否则将该节点的所有孩子节点存入链表尾,继续从头开始遍历链表直至找到脚本节点为止。该算法的时间复杂度为O(109n),其中11代表执行脚本的数目。通过上述方法测试人员就能知道当前正在执行的脚本,了解测试进度。41东南人学硕士学位沦文4.3.5测试报告及日志模块该模块负责收集并记录测试执行的各种信息,还负责将测试结果以JSON数据格式发送给测试报告服务器,系统接收服务器响应并存储测试报告。此处系统使用Report类来抽象该模块。’"Report类中包括了所有测试结果需要的信息如本次执行的名称、版本号、模块名称、脚本执行总数、跳过的数目、失败的数目、使用的浏览器名称、失败脚本的名称、跳过脚本的名称、开始时间、结束时问和结果文件存放的路径。最后还包括用HashMap存放“Fail”和“Block”脚本出错或失败的具体信息,上述这些内容将在最后的结果报告中列出,供测试人员参考。测试执行时,当遇到“Fail”或者“Block”脚本时,系统会调用Report类的setCaselnfo方法传入脚本名称和出错或失败的具体信息,并将信息存入HashMap中。所有这些测试结果信息将通过调用Report类的sendToWebServer方法向测试报告服务器发送JSP请求并接受测试报告服务器的响应。该方法入口参数为请求URL,向URL类的构造函数传入请求URL生成一个URL实例。然后调用URL类中的openConnection方法实例化一个HttpURLConnection类生成请求。最后设置POST请求方式以及相应参数并将JSON格式的测试结果信息通过输出流添加到请求正文发送给服务器。测试报告服务器采用tomcat服务器,它使用JSP中的request对象接收系统发送的JSON数据,提取其中的测试结果信息,将这些信息动态的填入html页面中,并用response对象将填入结果的html页面信息发送给测试系统。此时测试系统通过HttpURLConnection类的输入流对象接收响应数据并将测试报告保存至本地。JSON数据格式如下所示:{“keyl”:“valuel”,“key2”:“value2”)由于JSON数据是用双引号来分割字符串,因此对于key或者value中的双引号就要经过特殊处理才行,为此系统定义了一个字符串操作类StringConvert,该类包含的方法说明如表4.3所示:表4-3StringConvert类方法方法名standardize功能1.将html中的“&戳;”和“"”分别转换为大于号和单引号2.逗号转换为“,”decodeComilla将“,”转换为逗号将引号转换为“"”去除字符串开头和结尾的空格并删除一些不可见字符changeOuotesremoveNoUSe(、har42第四章AWTSKDD系统实现JSON格式的测试结果信息用到匕面StringConvert类中的changeQuotes方法,将双引号转化为“"”,这样JSON数据就能准确传输。测试报告服务器端接收时,由于html语言会自动把“"”转化为双引号,所以服务器端无需作任何改动。除了Report类,系统还定义了EmailSend类,该类主要负责将测试报告发送到测试人员邮箱中。发送前需要调用EmailSend类的init函数,初始化发送SMTP服务器、邮箱账户名、邮箱密码和主题。初始化完毕后就可以调用该类中的sendMail方法发送邮件,入口参数为收件人邮箱数组和测试报告内容。在方法内调用JavaMail的API进行邮件发送,将含有测试报告内容的邮件发送到测试人员的邮箱中。此外本系统还具有日志记录功能,可以捕获每个模块的异常信息。采用Apache开源项目L094j进行实现。首先根据L094j配置文件设置功94j的使用,在项目根路径下新建“l094j.properties”文件,文件内容如下:l094j.rootLogger=ALL,FILElogaj.appender.FlLE=org.apache.1094j.FileAppcnderl094j.appender.FILE.File=./Systemlog.109l094j.appender.FILE.Threshold=info1094j.appender.FILE.Append=truel094j.appender.FILE。encoding=utf-8l094j.appender.FILE.1ayout=org.印ache.1094j.PatternLayout1094j.appender.FILE.1ayout.ConversionPattern=[framework】%d{yyyy—MM—ddHH:mm:ss}【%t】%一5p%c%x一%m%ntogaj将要输出的口志信息分成5种级别,依次为DEBUG、INFO、WARN、ERROR和FATAL。输出时,只有级别高过配置中级别的信息才能真正输出。从配置文件可以看出,本系统定义了一个文件形式的日志,R志保存在当前路径的“Systemlog.109”文件中,日志级别为“info”,采用“utf-8”编码支持中文,最后两行定义了日志输出格式,包括输出优先级、线程名、日期信息及出错信息等。当设置完配置文件后,在每个类中通过Logger类的静态方法getLogger并传入该类的class对象获得Logger类的一个实例,这样就可以在类中调用Logger类的info、01"1"01"、fatal方法按级别将异常信息或相关信息记录到日志文件中。测试人员只需查看“Systemlog.109”文件就可以查看系统日志,了解系统运行情况。4。4本章小结本章介绍了系统开发环境、工具以及系统使用前的相关配置。通过时序图说明了框架的工作流程,其后分别从参数配置模块、脚本生成模块、脚本执行模块、执行计划模块和测试报告及日志模块阐述了系统的运行原理和实现过程。43东南大学硕士学位论文第五章AWTSKDD系统测试与应用本章主要对AWTSKDD系统进行功能测试并将该系统应用到某公司的视频会议网站的测试中,最后通过与公司原测试框架的比较说明本框架的优越性。5.1AWTSKDD系统测试本系统没有性能方面的需求,因此本节将主要测试AWTSKDD系统是否适用于需求分析中涉及到的应用场景以及各功能模块是否能够正常工作。通过对脚本生成模块的测试来验证KDD框架的正确性。系统界面布局主要分为四块,如图5-1所示:图5-1AWTSKDD系统界面图5—1的顶端是菜单栏,左边区域以树形结构形式显示待执行脚本,右边显示需要命名的参数值以及编辑执行计划的标签页,最下面是~个启动按钮,默认是禁用状态,当载入执行计划后变为可用状态,点击该按钮并配置启动参数就可以开始测试。下面将对该系统进行应用场景和功能模块测试。5.1.1系统应用场景测试5.1。1。1用户界面用户界面测试包括必要元素是否存在、指定元素是否可用以及页面字符是否第五章AWTSKDD系统测试与应用正确。这些通过在脚本中添加关键字assertElementPresent、assertEnabled和verifyValue/assertValue进行判断。5.1.1.2程序功能程序功能测试主要包括数据校验测试、数据库测试、表单测试、链接测试以及系统特定功能测试。通过关键字assertElementPresent和assertDBValue、insertDB、deleteDB、updateDB来进行数据校验测试和数据库测试。表单测试、链接测试以及系统特定功能测试都可以转换为判断必要元素是否存在进行测试。S.1.1.3兼容性本系统通过用户选定的浏览器赋予接口WebDriver具体浏览器类的实例,进而调用该实例的方法驱动相应浏览器进行测试,满足浏览器兼容性测试应用场景。5.1.2系统功能模块测试系统功能模块采用黑盒测试方法针对需求分析中的功能需求进行测试。由于篇幅原因,本节只列举对脚本生成模块和执行计划模块的测试。5.1.2.1脚本生成模块功能测试脚本生成模块主要负责生成适用于本系统的关键字脚本及参数文件,具体测试将从脚本转换和参数提取两个方面进行:(1)脚本转换测试表5—1为本系统脚本转换的测试用例,用例给出了系统在一些前置条件下的预期结果。表5-1脚本转换的测试用例被测功能用例目的前置条件用例设计脚本转换测试脚本生成模块是否能将SeleniumIDE录制的html格式的脚本转换成CSV格式运用SeleniumIDE录制并保存一个html格式的脚本(1)米设置转换文件夹点击转换脚本菜单项(2)设置转换文件夹,点击转换脚本菜单项(3)再次点击脚本转换菜单项转换刚才html格式的脚本(1)提示还未设置转换文件夹预期结果(2)提示转换成功并且在转换文件卜存在同名的CSV格式的脚本文件(3)提示同名文件用SeleniumIDE进行录制转换后,所有结果都符合预期,所以该条测试用45
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688019301a67280.html
评论列表(0条)