毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc

上传人:本田雅阁 文档编号:2107839 上传时间:2019-02-14 格式:DOC 页数:44 大小:2.32MB
返回 下载 相关 举报
毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc_第1页
第1页 / 共44页
毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc_第2页
第2页 / 共44页
毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc_第3页
第3页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业论文基于Selenium框架的对Web自动化测试系统的设计与实现.doc(44页珍藏版)》请在三一文库上搜索。

1、此处为论文中文题目,要求居中填写主标题不超过24个汉字;可加副标题(副标题前加破折号),副标题与主标题间空一行的位置主标题:黑体,小二,居中副标题:楷体_GB2312,四号,居中阅后删除此文本框。本 科 生 毕 业 论 文(设计) 题目:基于Selenium框架的Web自动化测试系统的设计与实现学生姓名 崔青青学 号 100104200104指导教师 朱凌二级学院 信息学院专业名称 计算机科学与技术班 级 10计算机1班2014年05月声明及论文使用的授权本人郑重声明所呈交的论文是我个人在导师的指导下独立完成的。除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果。论

2、文作者签名: 年 月 日本人同意浙江财经大学有关保留使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以上网公布全部内容,可以采用影印、缩印或其他复制手段保存论文。论文作者签名: 年 月 日浙江财经大学本科生毕业论文(设计)基于Selenium框架的Web自动化测试系统的设计与实现 摘 要:随着应用软件的发展普及,规模和复杂度不断增加,人们对软件质量的重视,使得软件测试技术逐渐成为人们关注的焦点。在此以Web系统软件为例,传统的软件测试技术和方法并不完全适用于Web测试,手工测试效率又十分低下,Web自动化测试工具的使用极大地提高了测试的效率。本系统包含日志管理

3、模块、页面对象模块、测试用例脚本模块、远程控制管理模块、UI驱动模块、多线程管理模块、屏幕截图管理模块及测试驱动模块,具有针对web访问的不同系统、不同业务、不同主流浏览器进行自动化测试的开发、调试、项目构建、部署、运行、监控、分析、告警、生成报告等一系列功能,在规范测试流程、提高测试效率、测试覆盖率方面具有一定的现实意义。关键词:Selenium Webdriver;Web测试;自动化测试;测试工具Design and Implementation of Web Automatic Test System based on Selenium FrameworkAbstract:With th

4、e popularity of the application software, the increasing size and complexity, it is the importance of software quality, making the software testing technology has become the focus of attention. In the Web system software, for example, traditional software testing techniques and methods are not fully

5、 applicable to Web testing, manual testing efficiency and very low, the use of automated testing tools for Web has greatly improved the efficiency of the test. The system contains a log management module, the page object modules, test script module, remote control and management module, UI driver mo

6、dule, multi-thread management module, management modules and test screenshot drive module, with different systems for web access, and different businesses, different major browsers developed automated testing, commissioning, project building, deploying, operating, monitoring, analysis, alerting, gen

7、erate reports and a series of functions in regulating the testing process, improve test efficiency, test coverage has certain practical significance .Key Words:Selenium Webdriver;Web Test;Automatic Test;Testing toolsI目 录1 引言12 需求分析23 可行性分析44 自动化测试平台55 基于数据驱动自动化测试的实施66系统概要设计96.1 系统总体结构设计96.2 测试用例层96.

8、2.1 模块类库106.2.2 测试用例脚本106.3 代理(Agent)层106.4 UI Driver层107 系统实现127.1 日志管理模块127.1.1 准确定位127.1.2 提高开发效率147.2 页面对象模块157.3 测试用例脚本模块177.4 远程控制管理模块217.5 屏幕截图管理模块257.6 测试驱动模块268 系统总体运行299 遇到的问题及解决方法349.1 ATS线程中断问题349.2 xPath路径错误359.3 被测系统存在bug3610 总结与展望37参考文献38致谢39III 1 引言随着社会的不断发展和信息化的不断普及,各种软件越来越多,在日常生活中也

9、起着越来越重要的作用,再加上客观系统的复杂性,无论经验多丰富的开发人员、无论采用哪种开发模型开发出来的软件,每个阶段的技术复审也不可能毫不遗漏地查出和纠正所有的错误,因此如何才能把新的软件做得更稳定、错误更少是开发人员非常关注的一个重要问题。测试是解决以上问题的一个十分有效的手段。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40以上,当然这只是大多数情况。测试是软件能否通向市场的最后也是最重要的一关。传统的测试方法是手工测试,目前大部分都是采用此方法,其特点就是简单,但是它存在的问题非常多。手工测试可能引入人为的输入错误,尤其在数据量大的情况下;另外大量重复性的手工

10、测试可能成本较高,如果考虑软件发生改动而需要重复手工测试的情况,这个成本还会更高;没有办法对组件进行隔离的测试,从而导致发现问题和解决问题的成本都太高。在很多项目中,测试人员的所有任务实际上都是手动处理的,而实际上有很大一部分重复性强的测试工作是可以独立出来自动实现的。针对手工测试的缺点,自动化测试应运而生。相比手工测试,自动化测试的优势很多;规范测试流程,提高测试效率、测试覆盖率等。很多人对自动化测试存在误区,把其理解为找到一种自动化测试工具,把它应用到软件工程项目中,自动化测试工具只是被看作是一种录制和回放的工具。事实上自动化测试远不止这么简单,录制和回放仅是自动化测试中的最低级别。现在常

11、用的是基于数据驱动的测试,它是以数据来控制自动化测试的流程和动作的测试。本次毕业设计的目的就是在设计中实现针对web访问的不同系统、不同业务、不同主流浏览器进行自动化测试的开发、调试、项目构建、部署、运行、监控、分析、告警、生成报告等一系列功能的自动化测试系统。并能通过生成的报告对当前被测系统提出一些建设性的改进意见。2 需求分析正如开发软件需要有需求分析一样,基于数据驱动的自动化测试本质上也是开发,所以在制定测试方案之前也需要收集测试需求,这样才能保证自动化测试的成功。随着IT技术的发展,传统的开发人员兼任测试人员的模式已经不能满足需求,目前大多数较正规的软件公司均已采用独立的测试人员来对软

12、件进行测试,所以形成了开发人员、开发管理者、测试人员、测试管理者的模式。如图2-1所示:图2-1 开发模式规范的测试过程需要上述人员的通力配合,因此在做自动化测试之前可以有一份规范的文档,用来描述测试内容、人员安排、测试流程、缺陷管理等。其中开发管理人员和测试管理人员分别作为开发团队和测试团队的接口,协调两个团队的工作,一般来说开发人员需要提供自动化测试所需要的数据、稳定的可执行文件等相关资源,测试人员根据功能测试用例创建适合做自动化的测试用例,并建立基于测试驱动的自动化测试工程。自动化测试工程是建立在自动化测试平台之上,在自动化测试平台上做开发。测试脚本开发必须通过详细、合理的设计,要对脚本

13、代码进行划分,脚本文件或数据文件分层管理。这样有利于自动化脚本的开发与维护,从而节省自动化测试的投入成本,也使得不同测试人员或开发人员可以协调开发脚本。脚本开发完成、提交发布之后,首先是测试人员,测试人员可以运用自动化测试进行回归测试等,节约人力成本的效果尤其显著。其次是开发人员,开发人员可以在版本提交测试之前,在开发环境进行自动化测试,来确保当前的新版本不会影响固有功能的正常使用。工程维护人员也可以进行自动化测试,在系统维护升级之后,对部分系统功能进行自动化测试验证,提高升级效率。既要有一个设计合理的测试脚本运行平台,又要有一个功能完善的测试执行控制平台,所以建立一个自动化测试平台就显得极为

14、重要。3 可行性分析基于对自动化测试优点的分析,很多人对自动化测试存在另一个误区,认为对于所有的软件都适合引入自动化测试,且只要引入自动化测试,就会提高测试的效率,降低测试的成本。实际上并非如此,自动化测试也需要开发和搭建测试框架,创建测试用例,这也就意味着成本的投入。对于一个项目周期很紧的测试项目,按测试方案进行手工测试的效率可能要比自动化测试的效率好得多。对于一个一次性开发、没有后续版本更新的软件而言,自动化测试是毫无意义的。但是现在很多软件都会不断推出新的版本,在推出新版本的过程中,每次除了测试新加或修改过的模块,相关联的旧模块同样需要测试,才能保证产品的质量,这样就需要做大量的重复工作

15、,自动化测试的价值就体现在可以创建测试中的可重用模块,同时还可以覆盖大部分的功能测试,这样可以使测试人员从回归测试中解脱出来,专注于新模块的测试。所以可以说自动化测试的最大价值在于回归测试。因此,对于一个软件或其中某些模块是否适合自动化测试必须要先进行可行性分析,以证明我们所选的测试方法的正确性,通常可进行自动化测试的软件需要满足以下几点: (1)手工测试复杂度高: (2)所选测试用例,实现自动测试的难度低; (3)软件用于自动化测试的模块界面变化相对不大; (4)软件生命周期长,经常推出新的版本; (5)软件开发已基本完成,主要用于测试升级版本; (6)所选自动化测试框架必须对所测软件应用界

16、面有有效的支持,且维护管理成本较低。另外自动化测试前期需要投入时间和一定的成本投入,故不要一开始就期望有高的回报,其效应会在不断完善积累中显现。而且不要期待自动化测试可以发现每个版本中的大部分错误,因为自动化测试主要用于回归测试,而且产品中每个新版本的大部分bug会在新模块中出现,所以自动化测试在于长期效应,能保证每个版本产品质量的稳定。4 自动化测试平台自动化测试架构一般可以分为上下两个层次,上层是管理整个自动化测试的开发,执行以及维护,在比较庞大的项目中,它体现重要的作用,它可以管理整个自动测试,包括自动化测试用例执行的次序、测试脚本的维护、以及集中管理测试用例、测试报告和测试任务等。下层

17、主要是测试脚本的开发,充分的使用相关的测试服务,构建测试驱动,并完成测试业务逻辑。自动化测试平台一般由管理端和执行端组成,由管理端发出信号通知执行端开始执行相应的测试任务,从而执行相应的脚本进行测试,并将测试结果报告管理端。平台划分如图4-1所示。图4-1平台划分本毕业设计主要是针对自动化测试平台的开发(即测试服务执行端),主要是对执行端(ATS)功能的开发。ATS摒弃了录制和回放的机制,采用主流的测试驱动的方式进行自动化测试。测试驱动是一个自动化测试框架的核心,其决定整个自动化脚本设计。当前比较流行的测试驱动有数据驱动和关键字驱动,使用不同的测试驱动,关系到脚本重用率,以及后期的可维护性。而

18、本系统采用数据驱动的自动化测试。5 基于数据驱动自动化测试的实施基于数据驱动的自动化测试不是简单的录制回放,而且通过编程的形式来实现每个自动化测试用例,其中数据文件独立于测试用例,这样数据的更新对整个测试工程的维护会降低到最小,因此创建自动化测试框架需要有一定的编程基础。自动化测试系统(ATS)的运行机制如图5-1所示。 图5-1 运行机制图解(1) 加载并解析ATS平台配置文件ats.properties(2) 加载log4j.jar, 解析log4j.xml配置文件, 并动态重定向日志文件存储路径(3) 动态查询到xxx.xml数据配置文件(4) 加载xxx.xml数据配置文件到测试套件中

19、(5) 初始化测试套件(6) 启动TestNG类(7) testng框架对测试套件进行解析(8) testng框架通过对测试套件中的xxx.xml数据配置文件的解析找到相应具有 Test注解的类方法并运行(9) 执行页面对象模型库中某个页面对象的方法如:增加报告,删除报告等封装好 的方法(10) 执行UI驱动层中封装好的针对元素的方法:如 点击按钮,给输入框赋值等 操作(11) 执行selenium框架提供的api方法,如 获得元素等(12) 通过selenium提供的api驱动浏览器模拟手工就行操作,如登录,进入到公 告页面等(13) 对页面进行操作后获得的反馈原始数据(14) 对反馈的原始

20、数据进行逻辑处理,取得可用的数据(15) 把处理后的数据和预定好的数据进行匹配(16) 反馈匹配后的数据给脚本类(17) 把最终结果反馈给Testng框架(18) Tesng框架根据获得的结果生成相应的测试报告 注:在1-18步骤之间都会生成相应的日志; 在9-18步骤之间都会有可能生成相应的截图。6系统概要设计6.1 系统总体结构设计本系统采用Selenium2(Selenium1.0+WebDriver )自动化测试框架、Spring框架、TestNG测试框架、SDP(SRT Development Platform 世导开发平台)作为本系统的总体集成框架,集成开发环境(IDE)采用MyE

21、clipse,开发环境采用 Java 语言,运行环境采用Windows和Linux两种。本系统的开发主要实现了针对web访问的不同系统、不同业务、不同主流浏览器进行自动化测试的开发、调试、项目构建、部署、运行、监控、分析、告警、生成报告等一系列功能。本系统采取的是三层框架结构,分别包括测试用例层(测试用例脚本模块)、代理(Agent)层(页面对象模块等)、UI Driver层(测试驱动模块等)三层,如图6-1所示。图6-1 三层框架结构6.2 测试用例层在本系统中测试用例层(脚本)又分为“模块类库”和“测试用例脚本”两部分。6.2.1 模块类库“模块类库”分为“模块公共类库”和“模块特定类库”

22、。“模块公共类库”是在模块内部将可以为各个模块共享使用的方法抽象出来,作为一个公共类。它可以是一个单的逻辑操作,也可以是复杂逻辑实现。比如用户打开浏览器、登录、点击菜单等操作。“模块特定类库”是指各个业务模块类的特定操作,可以是某个检查点的校验,也可以是针对页面上的某个操作。“测试用例脚本”在最上层,它根据测试点进行设计,面向具体的应用。它可直接调用“模块类库”的方法,即调单个逻辑操作,而不关心这个逻辑的实现有多复杂。它是单个或多个逻辑操作的集合,即一个测试用户脚本。比如,在客户端访问资源的测试用例,它调用了客户端登录方法和访问资源方法。6.2.2 测试用例脚本脚本与页面对象库分离使得脚本在一

23、定程度上独立于WEB页面,脚本没有直接的处理页面元素,代码通过元素对象映射表获取赋有WEB页面标签值的变量。目前实现了一半,页面对象库已经独立于脚本单独管理,但暂时是写死在常量类当中再赋给变量,后期可做扩展维护。WEB页面对象包括HTML标签、 XPath和页面内容(文本、图片、对话框中的值等),当页面对象变更后,一般情况下不需要再修改脚本,只要修改页面对象库即可。6.3 代理(Agent)层代理(Agent)层主要包括“页面元素操作组件”和一系列“工具组件”。“页面元素操作组件”通过在接口(interface)中定义例如打开浏览器、在输入框中输入值、点击页面元素等抽象方法,并开发了针对IE浏

24、览器的具体实现类,实现针对IE浏览器页面元素的各种操作,并提供给脚本调用。脚本层只需要关心被测试的应用是针对什么浏览器即可。通过配置,动态选择创建的对象,调用针对指定浏览器的页面元素操作。“工具组件”目前包括例如Comparator(对象比较器,用于页面对象排序),Log(功能实现和调用封装),DateUtils(日期、时间处理),Random(各种随机文本生成接口),Class For Name(根据配置动态创建对象),Regex(各种正则表达式判断功能实现),Dynamic file lookup(动态文件查找),Threadsleep(线程等待封装)等一系列功能。6.4 UI Drive

25、r层底层功能和测试业务并不相关,主要是控制ATS正常运行的一些机制,包括了多线程脚本运行管理机制、多远程客户端控制管理机制,ATS启动控制机制,ATS运行环境管理机制,多种类浏览器测试管理机制等底层功能实现。7 系统实现7.1 日志管理模块日志管理模块主要是通过Apache的一个开放源代码项目即Log4j来实现,在本系统设计中主要有两大作用。7.1.1 准确定位日志管理便于开发人员在开发过程中运行测试用例时,可以准确定位当前程序已完成的某种处理的记录及正在进行的操作,当然更易于找到问题出现的位置,提高开发效率。配置文件log4j.xml如下所示: !-通过的定义可以将各个包中的类日志输出到不同

26、的日志文件中 - 日志文件配置完成,其使用如下:/声明日志对象private static Logger logger = Logger.getLogger(ANCEighteenImpl.class);/“信息”的输出logger.info(Tools.stepWithLog(公告发布者账号登录);/“错误信息”的输出logger.error(Tools.resultWithLog(methodName, false,页面元素被异常匹配到。具体原因如下, + testInfo.toString();7.1.2 提高开发效率可以通过文件配置,将出现问题的日志信息打包,便于开发人员集中处理程序中

27、出现的问题。public static void setFile(String className)Appender infoAppender = Logger.getRootLogger(). getAppender(PublicConstant.INFO_APPENDER);Appender errorAppender = Logger.getRootLogger(). getAppender(PublicConstant.ERROR_APPENDER);String path = className.substring(4,className.lastIndexOf(.);path =

28、ClientRC.clientIp + File.separator + path.replaceAll(., +File.separator);/截取类名IeBrowseAWImplclassName = className.substring(className.lastIndexOf(.)+1);if(local.equals(Tools.getAtsPropertiesValues(ats.server) /如果是INFO信息if (infoAppender instanceof RollingFileAppender) RollingFileAppender fappender =

29、(RollingFileAppender) infoAppender;fappender.setFile(logs + File.separator + path + File.separator + info + File.separator + className + .log);fappender.activateOptions();/如果是ERROR信息if (errorAppender instanceof RollingFileAppender) RollingFileAppender fappender = (RollingFileAppender) errorAppender;

30、fappender.setFile(logs + File.separator + path + File.separator + error + File.separator + className + .log);fappender.activateOptions();以上代码动态处理Log日志输出目录和输出文件,按照类名作为文件名,这样方便日志文件打包后,对应开发文件的查找。7.2 页面对象模块主要用于对被测软件的每一界面(UI)均建立相关的对象模型,方便最上层调用,这一层需根据软件的不断更新而更改,下面将以公告通知列表页面(如图7-1所示)为对象进行介绍。图7-1 公告通知列表页面根据

31、页面对象的特点及系统需要,主要将页面对象规划为三个小模块,分别是页面元素、元素的setter和getter方法及页面元素的操作(如点击新建按钮,点击标题链接等)。部分页面元素定义如下: /*公告主题 */private String subject_id = OfficeANCConstant.SUBJECT_ID;private String subject = ;/*公告类型第一个下拉框 */private String noticeType_id = OfficeANCConstant.NOTICE_TYPE_ID;private String noticeType = ;/*公告类型第

32、二个下拉框 */private String gglx_id = OfficeANCConstant.GGLX_ID;private String gglx = ;/*所属栏目 */private String boardIdQuery_id = OfficeANCConstant.BOARDID_QUERY_ID;private String boardIdQuery = ;/*开始日期 */private String messageStartDate_id =OfficeANCConstant.MESSAGE_STARTDATE_ID;private String messageStar

33、tDate = ;/*结束日期 */private String messageEndDate_id = OfficeANCConstant.MESSAGE_ENDDATE_ID;private String messageEndDate = ;页面元素的定义使得当页面发生变化时,只需要在当前页面对象中做一次修改全部完成,不需要再逻辑代码中反复做修改,提高开发效率。部分setter和getter方法如下:public String getSubject() return subject;public void setSubject(String subject) this.subject =

34、subject;public String getNoticeType() return noticeType;public void setNoticeType(String noticeType) this.noticeType = noticeType;setter和getter方法的便于在外部类方法中对页面对象元素值的修改及使用。页面元素操作方法(以新增一条简单公告为例)如下:public boolean add(BaseBrowse broDriver, WebDriver driver) throws Exception broDriver.clickWaitByMouse(dri

35、ver, By.xpath(this.add_xPath), PublicConstant.WAIT_TEN);logger.info(Tools.stepWithLog(点击新增按钮);ancAdd.put(broDriver, driver);logger.info(Tools.stepWithLog(新增公告结束);boolean exsit = super.isElementExsit(broDriver, driver, By.xpath(this.add_xPath);if(exsit)logger.info(Tools.stepWithLog(找到“新建”按钮,公告列表页面加载完

36、毕);else logger.error(Tools.stepWithLog(未找到“新建”按钮,公告列表页面加载失败);return exsit;通过以上三步把页面元素及对元素的操作完成后,就写好了当前页面的对象,再测试用例中要用到的时候,需要在其中声明一下即可使用。7.3 测试用例脚本模块以下是登陆的测试脚本,当加载xxx.xml数据配置文件到测试套件中,初始化测试套件后,启动TestNG类,testng框架就会对测试套件进行解析,testng框架通过对测试套件中的xxx.xml数据配置文件的解析找到相应具有Test注解的类方法并运行。Test(timeOut = 1200000)中的ti

37、meOut代表的是当前方法允许执行的最长时间。OverrideTest(timeOut = 1200000)Parameters( companyId, userName, password)public void ancEighteen_One(String companyId, String userName,String password, String regex, String subject, String boardId,String showContent, String ggDetail) boolean resultOne = false;/公告新增boolean resu

38、ltTwo = false;/反馈为开/闭String methodName = new Throwable().getStackTrace()0.getMethodName();/ 测试信息StringBuffer testInfo = new StringBuffer();try ATSLogger.setFile(className);logger.info(Tools.startWithLog(methodName);Login login = new Login();login.setCompanyid(companyId);login.setUseranme(userName);login.setPassword(password);driver = login.getDriver(broDriver);logger.info(Tools.stepWithLog(获取driver成功);login.clickLoginWithStaff(broDriver, driver);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1