基于Selenium的UI自动化与数据分析_第1页
基于Selenium的UI自动化与数据分析_第2页
基于Selenium的UI自动化与数据分析_第3页
基于Selenium的UI自动化与数据分析_第4页
基于Selenium的UI自动化与数据分析_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文摘要近年来,互联网信息科技的蓬勃发展,给软件科技行业带来了无限的机遇和挑战。由于Web软件系统具有平台无关的特性,而且还有并发性、异构性和分布性这些性质,Web软件系统的测试相比于普通软件程序的测试要复杂很多,一个Web项目生命周期不只是开发的工作,测试在其中也有质量保证的作用,为了确保Web系统产品的竞争优势,自动化测试技术的地位与作用慢慢地展现出来。 本课题主要内容是以Selenium自动化测试技术研究与应用为主,通过Jenkins开源Web系统测试为实例,对Jenkins的部分功能进行需求分析、测试计划设计和测试用例设计与执行。使用Selenium能够帮助测试工程师模拟用户在浏览器中操作,从而达到测试的目的,而且,Selenium兼容于多个浏览器平台并且能够使用不同的测试脚本语言进行编写,方便测试工程师掌握与应用。关键词:自动化测试Selenium开源Web系统测试脚本1.绪论1.1课题研究背景现如今中国互联网信息科技技术的飞跃式发展以及中国互联网基础措施建设的不断完善,伴随着越来越多国内外先进技术被快速地运用和推广,众多企业走上了信息化的高速公路,发展的企业业务慢慢地快速化和国际化。在这个“百花齐开,竞相争艳”的信息科技时代,确保web系统保持稳定和性能达到要求的任务变得任重而道远,鉴于开发周期非常有限和公司财政支出等问题,测试人员时常会因为时间不足和工期赶而无视了一些本来需要注意的测试点或者使漏测了某些功能,这就是其中一个项目上线后产生问题的原因。没有充足的测试时间进行测试的情况下,线上产生了问题,项目经理首先第一个想到的是项目上线前最后把关的测试人员没测好,这就是其中一个测试人员为项目中产生的问题反馈“背锅”的原因。相对于敏捷开发给测试带来的问题,测试自动化就是团队工作中做好敏捷的一个必要实践。2004年Jason创造了Selenium,富有多年测试经验的他,敏锐地注意到每次手工测试重复的工作太浪费时间了,于是他利用自己扎实的编程基础,开发了一个JavaScript库,达到与页面进行交互的功能效果,从而实现跨浏览器的环境下运行测试,最后,这个库就变成SeleniumRC和seleniumIDE的底层核心SeleniumCore。Selenium作为一个工具不可能没有缺点,因为它一开始是基于JavaScript开发的,浏览器对于JS引擎的支持和安全方面的限制,使得有些情况下,它没法工作,更糟糕的是,随着浏览器不断完善,Web应用也变得越来越复杂,这些因素更加阻碍了Selenium的工作运行。一个在谷歌工作的工程师西蒙嘶图尔特在2006年的时候开始了一个新的项目WebDriver。Google使用Selenium已经有很长的一段时间了,但是工程师却一直受制于产品的某些功能,而WebDriver的存在就是为了去解决Selenium所遇到的问题。到了2008年的时候,Selenium和WebDriver开始整合,这是多么令人振奋的一件事,两方优势互补成为崭新的测试自动化利器。1.2课题研究意义研究Selenium的UI自动化有什么意义呢?这个课题就是想要知道这个问题的答案。每个项目的产生都是因为需求的产生,测试人员就像以前机械工业还未发展的制衣工厂里面的裁剪人员,所有工序都需要手工进行操作,通过个人经验保证产品质量,逐渐地,当工厂的规模和速度呈上升趋势,这样的纯手工的弊端就会一一显现出来,因为生产规模的扩大而需要更多的人手,致使成本上升;因为生产要求速度和工作量超过工作人员的极限而产生效率瓶颈;因为持续工作时间的增加和为了保证项目工期,致使工作人员疲劳,有时还会出现惯性思维,认为之前做的都没问题,现在做的也没问题,甚至会出现偷工减料的情况,这些人为错误造成产品质量的下降。而自动化测试就像工厂引入机械代替部分人力,它的产生就是为了解决纯手工测试所带来的弊端。当工作量增加,机械能够帮助工作人员完成部分工序,就厂商而言,避免了人力成本的增加,还能够合理安排工作人员完成一些机械无法完成的事情和维护机械并且利用个人经验保证产品质量。我从中提炼出自动化测试研究的意义是把人从重复度高、比较轻易犯人为错误的业务功能中解放出来,把这些工作都交给机器自动化运行,测试人员能够有更多时间专注于复杂度高的测试工作。而且自动化测试不单单是为了保证工作效率,还需要保证了产品质量,不应该为了自动化而自动化,也不是因为其流行而进行自动化,而是将自动化思维融合到整个项目流程,实现其该有的意义。1.3国内外研究现状从Selenium的发展历史可以看出,这个自动化测试工具时至现在2020年了依旧在不停地完善和增加功能。2004年只是一个JavaScript的库用来和页面进行交互,后来完善成SeleniumCore作为整个软件的重要组成部分,SeleniumRC因为兼容多种语言,使我们变成的限制减少了。2006年谷歌的工作人员西蒙,开发了WebDriver解决Selenium所遇到的问题,最后到2008年把Selenium和WebDriver整合成新的Web测试的软件。SeleniumIDE、SeleniumGrid和SeleniumRC这些组件造就了Selenium1.0,而Selenium2.0使用简化的公式来表达:Selenium2.0=Selenium1.0+WebDriver,Selenium2.0中重点是WebDriver这一个驱动,它能够胜任为SeleniumRC的升级版。Selenium团队在2013年的时候曾经在官方博客预告圣诞节发布Selenium3.0,但真正发布Selenium3.0第一个beta版已经是2016年了,而Selenium3.0用公式表示:Selenium3.0=Selenium2.0-SeleniumRC(RemoteControl)o在2018年,Selenium的开发者西蒙在一次会议上宣布了Selenium4.0什么时候发布和更新的核心内容。2004年到如今2020年,十六年的时间,国外的工程师在使用Selenium的同时,一直不断地完善这个工具,我们能够从GitHub上看到Selenium4.0的开发进度。而在国内,懂得使用Selenium是如今行业进行自动化的一种尺度,想到自动化第一想到的工具也是它,能够运用Selenium协助测试人员实现数量多且反复的工作。国内企业存在两种情况,一种是企业大量倚靠Selenium,QA工作人员团队所操作没有技术含量的工具开发的基础亦是如此,例如RobotFramework,它可以让不懂代码的同学也可以使用其来进行Web自动化测试。另外一种清楚了自动化的关键性, 却无法完成自动化测试的质量保证专家,基于Selenium开发的软件能够让所有拥有Web基础知识和对浏览器有一定认识了解其原理的工作人员完成布置环境的工作,况且对Web的性能质量监测和循环测试也不一定需要清楚Selenium的源代码和原理,只需要去进行运用。由此可以比较出,国内的Web自动化基本是依赖于国外进行研究的,而且通过翻阅参考文献,我了解到国内只是对自动化的思想进行深入研究,而且大部份是基于Selenium1.0和Selenium2.0的测试框架,说明Selenium3.0虽然在国外已经发布三年多,国内依旧还处于摸索时期,由此看来,此次课题是基于Selenium3.0的UI自动化学习就有意义了。1.4课题研究的主要内容本课题主要学习Selenium并进行UI测试自动化实战,测试人员不需要亲自动手就能够模拟真实的用户在web系统进行界面和功能的测试。而我本次课题研究的主要内容是研究Selenium3.0的各方面内容,明确自动化测试的意义与目的,从中清楚Selenium这么多年为什么能够在众多Web自动化测试工具中屹立不倒。此次毕业设计作品中,主要是基于Java编写Selenium的测试脚本,通过各种脚本运行驱动使浏览器进行UI自动化,最终通过分析数据对比功能测试和自动化测试的异同,从而深入了解UI自动化测试,但这些的前提都是有扎实的编程知识为基础。1.5本章小结自动化测试的执行依靠的是机器,但自动化思想执行的却是人。通过了解Selenium的发展史和国内外研究的现状,明确自动化测试的意义和目的,清楚什么时候在什么地方对什么目标自动化,才能提高工作的效率,通过扩展自动化思维,把界面普通且重复固定输入和固定操作的功能和流程进行自动化,让测试人员能够顾及到其它复杂的功能和流程。接下来需要做的是研究好Selenium3.0知识基础,通过Selenium自动化实战掌握这种技术,适当地进行相应的自动化扩展,了解其历史背景和研究现状就好比测试人员在测试前了解清晰功能的需求和业务的流程操作一样,才能在后续的自动化实现过程中知道哪些需要编写自动化测试用例脚本,操作起来才不会迷茫为什么进行自动化测试。2.Selenium自动化测试技术研究2.1软件测试自动化研究自动化就是通过手写一些机器能够看懂解析并运行的语言,或者使机器根据用户需要循环完成一系列操作,其中相应ui界面数据的校验和功能的实现与应用,页面跳转是否实现,都是自动化测试所要关注的重点。自动化测试包括三个层面:•单元测试自动化(数据处理层)针对单元控件进行排查和检验其代码,如Java的Junit;•接口测试自动化(业务逻辑层)通过发送相应的数据获取返回值对比其是否符合接口文档要求,如Postman;•UI测试自动化(GUI界面层)UI层是用户使用产品的入口,所有功能通过这一层提供给用户可视化图形界面进行操作,测试工作大多集中在这一方层错误!未找到引用源。,如Selenium;VallueJavaScriptTechnology-facinflTe«t«ViewIntegrationUnitVallueJavaScriptTechnology-facinflTe«t«ViewIntegrationUnit图1测试金字塔众所周知,测试流程对应着开发流程,两者之间是互补互助的关系,缺一不可,测试更是占整个业务流程的一大部分。图片的越向下端走,意味着测试的作用更加的高,测试的效果提现得更加明显,底层是保障软件质量的基础,是测试的根基。就Google产品来说,大部分都是进行单元测试,期中集成、接口测试占小部分的三分子二,而UI层自动化测试只占小部分的三分之一错误!未找到引用源。。然而这不代表着UI测试并不受测试人员所关注,就像自动化趋势虽然这么多年来一直加强,手工测试也不可能完全丢弃,因为测试一定要站在用户的角度,站在业务层的角度,越往金字塔的上层,在测试的时候越能体会到用户感受。做自动化测试的目的是使人们不沉寂在重复冗余的测试工作中,让测试人员能够尽可能多地对一些复杂化的测试功能点完整地按照思路做测试,主打回归测试来拔高软件的质量,完成一些之前版本已经完成的功能的反复查漏补缺,减少回归时所花费的时间,让测试工作更加流畅而且高效。举个例子:测试一个web,分摊下来每人每天可能需要完成500个左右的测试功能点用例,所以20000个功能测试点点就应该一个半月左右才能结束,但是如果把这20000个测试用例在回归测试准备阶段转化成自动化测试脚本,到执行测试完成可能只需要1天的时间,然后再加上1天左右的测试结果分析,就把20000个测试用例完全跑完了,压缩出来的测试时间可以做复杂功能和新功能的测试,覆盖到每个测试点的同时还能确保测试效率。俗话说“金无足赤,人无完人”,自动化测试就像人一样,有优点的同时,肯定也有不足。其缺点就是运行脚本需要不断的优化,反复的执行,大量的数据,最后才能得到用户想要的结果,这就意味着前期需要准备的工作量是非常大,才有后面收益的显著效果。说明自动化只适应长时间的迭代工作,并不契合赶项目的工作,并且如果数据和操作不是大量的结果也是比较难发现问题所在,一些隐藏的问题也需要时间进行挖掘。还有就是UI自动化并不是所有需求都转化成自动化,有一些还是需要人手工走一遍流程并了解其中测试要点才能够相对应进行测试覆盖,方便持续回归。最后,UI自动化脚本执行不是特别稳定,会出现不可抗力的因素,比如说,有时候不是缺陷的地方也会反馈错误,执行到一半机器坏了需要人为干预。结合以上所说,明白了手工测试并不可能被自动化所取代,机器终究是机器,就好比机器人再智能也不能取代人类的存在,机器运行的时候稳定性还是一般,有些判断过于主观造成判断是否为bug的时候,容易造成判断错误,而且自动化测试最终只是为了回归软件中的功能,在确保测试效率的同时保证软件中简单功能的质量,而不单单是为了发现更多的缺陷。2.2自动化测试技术的研究与比较这么多年来,各式各样的UI自动化测试框架和工具,有的久经不衰,功能越来越多,测试所能达到的程度越来越广,有的却已经退出了历史的舞台。自动化测试技术应用主要分为三类,一类是通过录制并重复执行自动化,录制重复执行的方法大多数是通过记录测试人员的操作行为以及记录被操作的屏幕坐标来开发用例,该方法似乎很容易,但如果应用发生一点小修改,对象定位的属性发生改变,录制好的脚本将无法使用;第二类是对文档对象模型(DOM)对象进行解析,这个是主流,但受特定平台限制,而且前端代码变化,脚本一般都要重写;最后一类是通过类似图像识别原理进行自动化操作,测试不易识别或无法定位的对象,不受前端代码修改影响,但如果屏幕分辨率、浏览器缩放等导致图片区域的大小发生变化就会失败错误!未找到引用源。。UI自动化测试技术比较如下表1所示。表1UI自动化技术比较比较项QTPSeleniumRobotFrameworkAirtestUI元素的支持与管理支持录制,兼容对象识别模式与图像识别模式代码实现关键字驱动框架图像识别元素定位准确性中高高取决于图片清晰度、分辨率、背景颜色等浏览器支持只支持IE/Firefox支持多种主流浏览器IE/Firefox/Chrome等支持多种主流浏览器IE/Firefox/Chrome等支持多种主流浏览器IE/Firefox/Chrome等开发语言只支持VBScriptPython,Ruby,Java和C#Python,Java,CPython是否开源/免费按照安装机器台数收费开源开源否代码移植性可移植可移植可移植本机(图片的识别会因分辨率、背景颜色、图片大小的变化而变化)我之所以选择Selenium进行研究,就是因为通过UI自动化技术的比较,发现Selenium比较有研究的价值,首先就学生而言,测试工具是开源免费的肯定是首选,所以排除了QTP和Airtest,其次,Selenium和RobotFramework虽然都有元素定位准确性高,代码可移植,支持多种主流浏览器的特点,但RobotFramework是基于关键字的测试框架,维护的时候相比于Selenium多了一层伪代码,而且伪代码导致调试困难,致使工作量也加大了。2.3基于Selenium的UI自动化从Selenium的发展史可以知道,Selenium已经更新了3个版本,这不意味着Selenium是一个简单的工具,其中的内部结构是有多个应用所组成,每一个组件都有其特征和所涉及的操作场景。SeleniumIDE(集成开发环境)是一个创建测试脚本的原型工具,它是一个Firefox插件,实现简单的浏览器操作的录制与回放,提供创建自动化测试的建议接口。错误!未找到引用源。SeleniumRC是Selenium的核心工具,支持多种编程语言设计测试代码,通过SeleniumRC的服务器作为代理服务器去访问应用从而达到测试目的,ClientLibraries和SeleniumServer是其中的核心,前者主要用于编写测试脚本对SeleniumServer的库进行控制,后者负责控制浏览器行为O错误!未找到引用源。SeleniumGrid的作用是在我们测试脚本数量比较的时候,抑或是系统平台之间交互的时候,能够在不同的机器或浏览器进程同时工作,提升并行速率。SeleniumWebDriver是Selenium2.0主要的驱动,相当于SeleniumRC的升级版,由于应用的升级版本都应该向下版本保持兼容,SeleniunB.0中,WebDriver真正取代了SeleniumRC,所以SeleniumRC被移除。而我本次课题研究主要针对Seleniu也0,事实上,Selenium3.0相比较Selenium2.0改动的位置就是移除了SeleniumRC,主推的还是WebDriver,所以我的课题研究也是围绕WebDriver实现的。Selenium3.0工作原理如下图2所示。图2Selenium3.0工作原理之所以使用HTTP协议,是因为其作为标准协议的地位处于网络中,差不多所有的语言都拥有多姿多彩的http函数库,Client和Server的请求响应都能够获取和处理这些返回数值,通过Selenium3.0工作原理图更能直观看到数据之间的传输与应用,知道哪个属于哪个,哪一部分接收哪一部分的数据。2.4本章小结本章是为了让我明确做UI自动化的意义是站在用户角度去进行测试,尽可能满足用户需求,通过分析来解释本课题为什么选择用Selenium做UI自动化,俗话说得好“工欲善其事,必先利其器”,了解到Selenium3.0的工作原理,用起来才会得心应手。打个比方,WebDriver在控制台显示的报错信息,如果不知道它是对应http响应状态码,就会把整段报错信息复制花时间去找问题,事先了解到WebDriver为了给用户更明确的反馈信息,提供了更细化的http响应状态码的关键词7对应的NoSuchElement、11对应的ElementNotVisible和200对应EverythingOK等。3.搭建测试环境3.1Java环境配置由于我是使用Java实现Selenium的脚本代码,需要Java开发环境,所以到Oracle甲骨文网站下载较稳定且主流的1.8版本的JDK安装包进行安装,然后配置电脑中的环境变量并验证环境是否配置成功的步骤如下:1、 打开环境变量配置窗口;2、 新建两个新的系统变量,分别为jdk路径和classpath相应值".;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar",然后点击“确定”;3、 在“系统变量"下找到“Path"并在其中添加“%Java_Home%\bi'n和u%Java_Home%\jre\5in4、 打开cmd命令窗口分别输入“java"、“javac"、“java-version"验证;g^J|C:\WIINDOWS\system32\cmd.exeMicrosoftWindows[版本10.0.18363.476](c)2019MicrosoftCorporation^保留所仃权利C:\Lsers\lijiehao:java-versionjavaversion"1一8一Java(TM)SERuntimeEnvironment(build1,8,0_211-bl2)JavaHotSpot(TM)64~BltServerVM(buiId25,211-bl2,mixedmode)C:\Lsers\lijiehao>图3验证Java环境配置成功3.2Maven环境配置据我了解,传统的Java项目在创建的同时会新建一个目录命名为libs,相关的库和jar包依赖导入这个目录,通过subversion上传到相应的位置,项目的工作人员功能够把这些数据都拉到本地存储,使得项目的依赖和库统一不会出现兼容问题。这种依赖管理的弊端是随着项目的增多,模块也增多,多个模块引用相同的依赖会产生冗余,还有就是项目合并时会因为依赖版本不一致造成问题。为了防止出现这些问题,我找到了一种方法能够像坚持党的领导一样对项目的依赖进行管理,每个项目只需要编辑POM文件就能够完成版本的一致,这种项目叫做Maven,方便对项目的构建、信息和依赖合理的集成。就好比简单一个简单的Java项目想要使用Seleniun3.0就需要下载相应的jar包并且进行buildpath操作,用了Maven构建项目直接在pom.xml中写入依赖语句就能直接调用Selenium,简化了项目构建的过程从而提高工作效率。Maven的环境搭建步骤如下:1、 首先到Maven官方网站下载Maven的二进制解压包apache-maven-3.6.3-bin.zip到本地路径进行解压;2、 然后新建电脑环境系统变量,填写Maven解压后的路径;3、 在系统变量“Path”中添加变量值“%MAVEN_HOME%\bin”;4、 进入命令行输入“mvn-version"验证是否配置成功;辰C:\WINDOtem22\cmd.exaMLcrosaftWindows10.0.18363.4761(c)2019MicrosoftCorporatLon■>保留许冇杖利匸C:LUs&rs\1ijie-hcio?nivn—verslonApacheMaven333(3383c37elf9e9b3bc3df5050c29cSaff9f295297;2018-02-25T03:49:05^08:DO)Mavenhome:E:\Apache\Maven\.bin\x.Javaversion:1.8,0_211.vendor:OracleCarporatioTiJavahome;E:\JDK\jdkL8.0_211\jreDefaultlocale:Eh_CN,platformencoding:GBKOSnfime;indows10",version;*10.arch:’auwiW4”:fauii1/:*windoi¥s*E:\U3&r9\liji&hao>图4验证Maven环境配置成功3.3Jenkins网站搭建之所以使用Jenkins,是因为其开源免费又是基于Web界面的持续集成平台,而且Jenkins的界面拥有常见的元素,方便研究UI自动化的元素定位的同时,后续也能使用Jenkins学习持续集成。Jenkins环境配置步骤如下:1) 到Jenkins的官方网站下载Jenkins的war包;2) 运行war包有两种方式:一种是基于Tomcat、JDK启动,一种是基于Docker启动,在本次研究使用Tomcat运行;3) 把war包放到Tomcat的webapps目录下;4) 直接使用浏览器访问localhost:9000/jenki(此处端口号9000是因为我Tomcat修改了原来8080的端口号);5) 首次打开Jenkins会初始化配置,到C:\Users\Administrator\.jenkins\secrets\initialAdminPassword的路径下找到密码解锁Jenkins;6) 首次初始化登录可能会耗费比较长的一段时间,插件可以后续管理运用,新建一个管理员用户就能够自动登录到Jenkins界面完成搭建了;

#Jenkins * ■事项ih«眈迎来到Jenkins!*:Wfis眈迎来到Jenkins!旧匣顷麽星Nfiffi迎E*Una^aJaHuIM>vbws株L,MgF51KME鼻咄■^PVVWUWUJK■.酔服5H<也盟"Iart?HW主lEni棒gd=1附施砲附RHT間113k*71 f*C■时K图5Jenkins网站搭建完成7)为了使其有注册流程,需要完成如下图6的选项勾选;普1ConfigureGlobalSecurity/Me'• DCiMifMtf-ILAfliaiHr・-K^hiUOVvfluMia»Xi&JG£:wHIW3域CLDA^WEGAn扣re曰co』ghmCLegacyrmae■-.■ can<uJiriyctuKi兄审

靈<:

费賈

兄审

靈<:

费賈

公nod

心柬无

垣LrrRmq和羿tJ3OS图6Jenkins的全局安全配置3.4本章小结完成测试环境的搭建,接下来就是真正开始进行测试设计与执行的阶段了,本章主要是需要了解为什么使用Maven,从而提高工作的效率,自动化测试其实不单单是机器根据测试脚本进行自动化,我们能够把自动化的思维扩散到整个项目,能够有效率地进行项目构建与管理也是自动化的另一种表现。通过搭建测试网站来了解到其结构,从而方便下一步对网站进行测试设计,也清楚了为何使用其作为自动化测试的目标,掌握UI自动化测试技术的同时,为未来更加深入了解持续集成测试而进行铺垫。4.Web自动化设计与分析4.1测试需求分析4.1.1业务需求分析业务需求就我的理解中即是描述为什么开发一个系统,希望系统达到什么目的,属于业务层面,而Jenkins最主要的业务需求是提供一个监控持续重复工作的环境,但其中业务众多,因此不可能完全进行需求分析,此处只对登录与注册进行需求分析,注册业务最终输出的是一个用户账号能够进行登录操作,而登录最终目标是在系统输入账户和密码能够跳转到Jenkins的用户操作界面,所以,这个系统对于开发而言的业务需求就是开发一个可视化界面使其能够有注册登录的功能。4.1.2用户需求分析用户需求是从用户角度出发,告诉用户应该做什么,相应的界面有什么功能,适当地指引用户完成操作,属于用户层面,此处的用户是进行持续集成的人,他们想要进入到工作可视化界面就需要有一个有权限的账号,用户通过注册获得这个账号,使用注册的账号就能成功进行登录操作。4.1.3功能需求分析业务需求针对的对象是业务的建设方,用户需求对应的是使用系统的用户,而功能需求对应的对象是产品应该具备的功能,属于产品层面,业务需求、用户需求和功能需求之间的联系是通过需求分析把前两个需求转变集成为第三个需求,形成一个完整的需求分析。想要做好需求分析就需要了解业务流程,清楚每一个场景的每一个细节,广度和深度地解析功能。下面以Jenkins的注册和登录两部分业务为例。注册阶段的业务需求是必须填写用户名、全称、邮箱和密码,用户需求是能简单填写就简单填写,有账号就停止注册操作,变成功能需求就是在输入框输入数据,并把数据上传到数据库,由于数据库或者前端的约束就需要对用户填写的信息进行判断,判断所有信息输入框是否为空,判断用户名输入框是否已经创建,对邮箱和密码输入框的格式进行判断,判断密码的强弱程度,除了判断外,还需要交互友好,若用户已经有账号能够通过点击“请登录”直接跳转回登录界面,密码输入框能够通过勾选“显示”操作展示已输入的密码,能够有友好的密码输入提示,注册成功直接登录到Jenkins的工作台界面。如下图7和图8分别为注册UI界面图和注册业务流程图:创建一个账号!如果你已经有了—TJenkins账号’1詢击高强度的郵马应该是I:嚴氏而且每个网站都是『的。请参试使用5~6个字符的安全密码。创建账号图7注册UI界面图图8注册业务流程图登录阶段的业务需求是必须填写用户名和密码进行登录操作,用户需求是使用已注册的用户账号是否能够进行登录,转化为功能需求就是有用户名输入框和密码输入框,用户没账号能够通过点击“创建一个用户账号”跳转到注册界面,判断输入框输入的信息是否为空和是否正确,若用户名和密码输入错误的数据是否有友好的交互提示“用户名或密码错误”,选中登录界面的“保持登录状态”,不注销的情况下关闭浏览器,重新打开并跳转Jenkins页面是否会保持登录状态。如下图9和图10分别为登录UI界面图和登录业务流程图:欢迎来到Jenkins!创建一个用户账号如果俯殳百汗朋用户.用户名密码图9登录UI界面图图10登录业务流程图4.2测试计划在我们日常工作和生活中,经常需要做计划,它就像大海上指引船只的方向图,使船能够安全准确地到达目的地,让工作人员能够看到整个项目的进度安排和进展。当然,本课题主要研究UI自动化测试脚本,而UI自动化测试只是整个项目测试计划中的一部分,所以一般自动化测试都不会单一拿出来进行需求分析和测试计划的,而是基于手工功能测试基础下,选择部分合适的测试用例进行自动化测试的设计与回归。测试计划主要的构造有引言、测试包含的模块、测试策略、测试需要准备的物资、过程需要的步骤、发布标准和风险说明。引言包括的内容是为了说明为什么这样编写,会读到这份测试计划的都有谁,借鉴了什么图书资源等。测试范围的确定来自于需求文档,由于此次测试研究没有规范的需求文档,所以按照此次需求的目标确定测试范围是Jenkins中成功创建管理项目,涉及注册、登录和创建并管理项目这三个模块。理论上,自动化测试不是独立存在的,测试策略是根据项目测试类型的不同考虑不同的测试方法,而此处的测试类型主要是功能测试,测试方法是编写测试脚本的测试用例进行UI自动化测试,覆盖注册、登录和新建管理三个模块,编写测试脚本驱动不同的浏览器实现其兼容问题的反馈。测试资源主要是测试人员和测试环境,测试人员是本人,而测试环境上文已描述,所以此处不多加描述。测试进度安排如下表2所示。表2测试工作进度安排步骤动作负责人进度工作量(人日)1编写需求分析李杰豪2020年3月2日2d2编写测试计划李杰豪2020年3月3日1d3设计测试用例李杰豪2020年3月6日3d4编写测试脚本李杰豪2020年3月11日5d5执行测试脚本李杰豪2020年3月14日3d6优化测试脚本李杰豪2020年3月17日3d7生成测试报告李杰豪2020年3月18日1d8分析测试结果并多次回归李杰豪2020年3月21日3d由于主要是研究学习自动化测试,所以发布标准可以说是不存在或者发布标准是UI自动化测试能够运行起来,而存在的风险是编写自动化测试脚本的时候遇到各种问题,比如技术上的问题,解决方法主要是依靠网络渠道。4.3测试用例设计测试用例设计的时候涉及到功能、用户界面、考虑不同环境是否出问题、安全性、web系统是否稳定和容量等,由于此课题主要研究方向为UI自动化,自动化的测试用例一般是从功能测试用例选择合适的进行脚本的编写,所以主要还是对功能测试用例、用户界面测试用例和兼容性测试用例进行设计编写。I编号q测试珈操作步骤q预期结果。数据。实际结果q皓果比"校说明,从注坍界面跳转到登呆界面,L点击遂请登录”的字样卜1、点击爪能够跳转到登录界面衬1'!土|-fjr能够跳转到登录界面*•L、a“标宴突.,见跳转。图11注册流程其中一个测试项如图11为注册流程其中一个测试项,具体注册、登录和项目管理的功能测试用例参考附录一至三。我们可以通过参考功能测试用例,挑选并转化成合适的自动化测试用例,如下表3所示。表3自动化测试用例001用例idRegister001注册中登录跳转链接步骤操作数据验证点1打开注册页面http://localhost:9000/jenkins/signup2点击“请登录”链接linkText为“请登录”3跳转到登录页面匹配“欢迎来到Jenkins!”的字样Jenkins系统的“项目管理”模块部分业务流程比较复杂,并不全适合进行UI自动化,因此我在“项目管理”模块只选择新增、重命名和删除这些简单又重复的测试操作进行功能测试用例的设计,其中,新建项目的时候默认选择“Freestyleproject"直接点击“保存”,不需要配置项目增加自动化测试的复杂程度,配置项目的测试过程主要还是需要手工进行测试。自动化测试用例其实就是为了方便实现自动化测试脚本的设计思维,通过网络资料,我总结了自动化测试用例的设计原理如下: 一个流程场景之间最好就不产生依赖,脚本之间尽量无关联,也就是说用例之间是相对独立的。一个脚本只验证一个功能点。不应该考虑过多逆向逻辑验证,尽可能只进行正向的逻辑验证,毕竟逆向逻辑的情况很多,验证起来会增加脚本繁琐程度,此外定位和操作的代码不一定能够找到相应的元素,导致运行时的不流畅,如果过多反向校验会容易出人为错误。通过参考功能测试用例的过程,我们能够判断出哪些部分需要进行自动化,哪些部分需要进行手工测试,自动化测试脚本运行的同时能够把复杂流程进行手工测试,节省了时间和人力即为提高工作效率。UI即为用户界面的意思,上述的功能测试用例的设计就是为了验证UI功能的可行性,接下来我们也能够通过断言判断这个系统UI是否显示正确,不同的浏览器,用户界面和功能是否兼容,也可以通过自动化驱动不同的浏览器进行测试,相对的,编写脚本的时候我们也能够参考相应的测试用例,具体用户界面测试用例和兼容性测试用例参考附录四和附录五。4.4本章小结测试用例是整个自动化测试的灵魂,有了测试用例就相当于有了测试思路,清楚测试的步骤和架构,并非任何的人为驱动测试用例百分百变成自动化的,需要测试人员进行筛选和思考。选型时,需要考虑成本,复杂流程尽量使用手工测试,选择的用例可以是像登录和注册这些重复执行的部分,能够帮助测试人员提高工作效率。转型时,测试人员应该了解脚本是怎么代替人工执行用例,当你写脚本的时候尽量简单、通俗、清晰,每一步骤都衔接好,自动化测试脚本运行起来后,测试人员不用花太多心思去维护,专心去对复杂的部分进行手工测试。事实上,不管是需求的过程,还是计划的设计与执行,抑或是用例的研究与转变,机器化和人为的测试并没什么太大的区别,都是为了了解并熟悉系统功能和流程做准备,方便测试人员清楚哪部分需要进行自动化。5.测试实施与优化5.1测试脚本编写5.1.1元素定位元素定位失败是众多自动化疑难杂症之一,众所周知,Web前端组成是html相当于一个大的框架,其中的样式和交互分别css和jsoSelenium想要对页面进行操作,就需要有一个目标,这个目标就是Html中的元素。一个好的产品并非单单一个开发人员规范的开发习惯,如给页面元素加上唯一的id,name等,同时也需要测试人员编写脚本进行精准灵活的编写脚本定位。比较基础的定位有id、name、className等,这些都页面的基础标签属性,还有通过链接进行准确或者模糊定位,而cssSelector是根据css样式选择定位元素,使用”表示class样式元素,元素中的空格也要用”代替,"#”表示ID元素,">"表示html的下一层级,还有就是通过xpath元素定位分为绝对定位和相对定位,绝对定位是“/”开头,从根目录开始一级一级找,若页面结构发生变化,则该路径失效;相对定位例如://*[@name='phone']形式,"//"表示匹配指定节点,不考虑位置,“*”表示通配符,匹配任意元素节点,“伊'选取属性,“口”属性判断条件表达式,优点是灵适方便愚兮匹低; driver.findElMent(9y.id("passwor|il")).iendKeys<1-12345611);到创於贬号■按钮driver_findElement(By- "SLibmit"})„click();Thread...£ 000);“注珊成功之后,定位注销按钮driver.findElenient[By.partiaLLText(-注销")).click();图12Jenkins在注册UI界面所使用到的定位脚本如上图12看出我在Jenkins的注册UI定位时使用了id、name和partialLinkText进行定位,这些定位方法可以不唯一,比方说密码输入框,我们能够通过浏览器自带的开发者工具查看html的格式,通过选中结构体查看密码输入框所拥有的属性进行定位语句的编写,如下图13为密码输入框html的input标签能使用来定位的属性有tabindex、name、id、type和class:inputttpasswordl.normal480x34.8[J(£]ElementsConsoleNetworkPerformanceSourcesApplication►<divcla5s='signupIntroDefsuit':T<-Formmethod='pastaction="/jenkins/securityRealm/createAccountid='main-panelcla5s='signup1><divclass="-ForinRowr..</div><divclass="-FormRow,..</div><divclass="-FormRowr..</div>T<divclass="-ForinRow,,>匸lass=":LnpLrt:HEadEr"H-V/d:Lv:>— <inputonkeyuD="valida_tePassworcl()"tabindex="6'name=''passwordl"id="passwordl''tvpe="password"class="normal'>==50图13密码输入框的标签属性当你编写的定位语句不能准确定位到元素,就能变通使用其它属性进行定位,优化测试脚本保证自动化测试能正常运行。通过了解各种元素定位方法,使我们能够灵活熟练使用元素定位的同时,也能让我们冷静应对元素定位失败的问题,毕竟方法总比问题多,掌握多种元素定位的方法,总有一种能够精准定位元素,避免出现元素定位失败的问题,减少测试人员在维护上花太多时间。5.1.2元素常用API能够准确定位到页面元素后就是对元素进行操作,从而实现自动化操作,我们可以使用click方法对元素进行点击,使用clear和sendKeys能够清空输入框和进行输入操作,脚本只实现自动化操作并不算是自动化测试,还需要断言判断页面是否如预期结果般正确显示,当然这步骤也是交给机器进行判断,通过getTagName方法获取元素的标签名、getAttribute方法根据想要的部分获取其中的内容、getText方法获取元素文本值和isDisplayed方法查看元素是否显示,这四种元素操作API的方法获取页面显示结果进行断言。如下图14为常用的点击click()和输入sendKeys()方法:= ■-J〃.定位用户名driver.findElenent(By."j_username")).sendKeys("lemon04");〃定位密码driver.findEleaerTt(By.ntMweC'jpassword11))■sendKeys(1112345&w);〃是否保持登日driver,findEl«errt(By. "Checkbox-text")).click();图14click()和sendKeys()方法5.1.3driver对象常用APISelenium和WebDriver两个框架合并后,一个框架的缺陷就被另一个框架所弥补,比如Selenium必须操作真实浏览器,但WebDriver可以仿造人为运行的行为,在机器的内部实现一切的活动,更加轻便。又比如WebDriver无法同时进行操作多个浏览器和机器,Selenium中的Grid组件协助实现用户想要的功能。而且WebDriver的存在替代了复杂的SeleniumRC,变得更加简洁易掌握,方便用户提高工作效率。与Webdriver相关的常用API有如下十种:get(Stringurl)访问指定页面getCurrentUrl()获取当前页面的url地址getTitle()获取当前页面标题getPageSource()获取当前页面源代码错误!未找到引用源。quit。关闭驱动对象以及所有相关窗口close。把浏览器关掉getWindowHandle()和其复数形式能够知道相应浏览器窗口的编号进行操作manage()此方法可以获取Options浏览器菜单操作对象,语句是driver,manage().window()navigate对象可以用来访问指定url地址、刷新页面、回退或前进等操作如下图15为Webdriver中的quit()方法按照自己的需要进行二次封装,方便调用:/本率*眠槌动結灵方法,休息5秒中后退生浏览譌驱歆driver/龄七印(“关闭浏览器驱动”)publicstaticvoidfinish(ChromeDriverdriver)£try■(Thread.steep;}catch(InterruptedExceptione){e.printStackTrace();}driver.quit(}|图15quit()方法二次封装5.1.4元素三大等待在UI自动化测试中,必然会遇到环境不稳定,比如说页面元素处于加载状态,网速宽带慢等情况,若测试工作人员无动于衷地看着,这些报错的问题对分析根本毫无意义。所以此处就像过马路等红绿灯一样需要等待,而Selenium等待分别为如下三种:强制等待:也叫线性休眠,导包后使用,以毫秒为单位,执行到这行代码会强制等待特定时间后再执行后面操作,例如:Thread,sleep(1000)表示强制等待1秒隐式等待:implicitlyWaitO能够在特定秒以内进行等待,例如针对执行脚本的所有对象,等待10秒:driver,manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);显示等待:WebDriverWaitO在规定时间一直等某个元素出现或某个元素可点击等条件,使用ExpectedConditions的方法进行判断,判断超时则跳出Exception,显式等待会每500毫秒扫描一次单一元素,例如3秒的时间戳有.test元素脚本就继续走下去,相对的,3秒结束就报错:WebDriverWaitwait=newWebDriverWait(driver,3):WebElementwl=wait,until(newExpectedCondition<WebElement>(){©OverridepublicWebElementapply(WebDriverd){returnd.findElement(By.cssSelector(/z.test〃));}});三种等待各有优缺点,强制等待过于死板,若有时网速能够比较快地定位元素,使用强制等待会影响程序执行速度,所以强制等待比较适合在调试时使用。隐式好处是相当于一个准则,每一个都需要遵守,可是这也是缺点,因为就好比开车等红绿灯,有些灯等得久一点,有些却很快,不可能所有都遵守统一准则,影响程序执行速度。显式等待相对另外两种比较完美,非全局设置,可以针对不同元素绑定不同的等待机制。如下图16红框为初始化driver时针对全局元素加入隐式等待:@BeforeClasspublicvoidinitDriverf)0driver=newChromeDriver();driver.manage().windaw().maximizeO;driver.get("http://localhost:9030/ienkins/login11);Idriver.managef).timeouts().implicitlyWait(10?TimeUnii:.SECONDS);}|* 1图16隐式等待5.1.5特殊元素操作在自动化测试时,有些特殊元素属于浏览器的控件或window的控件,html无

法定位操作,这时就需要编写对应特殊元素操作的脚本来运行,特殊元素有模态框、iframe内联框架、windowsW口、select下拉框和鼠标操作等,测试人员编写脚本时使用特殊元素操作能够更好地模拟用户使用场景,脚本运行时挥使如臂。〃定位删除项目按钮Thread.steep(1^1300);driver_findEle»ent(.partinLLwkText^"删除Project")).click();Thread■steepjI7/确认弹岀框菽钮driver.switch!□().alert().accept(图17alert弹出框如上图17的脚本为进行删除项目时会出现弹出框,这时开发者工具无法定位,就需要使用特殊元素定位的方法进行操作。5.2测试脚本优化5.2.1脚本的封装与重写封装是一个面向对象编程的概念,能够简化写代码的过程,就像生活中切蛋糕一样,分开一份份放在精致的盒子。比方说有些工具你不是经常使用,而且这些工具会产生安全问题,所以你把它放在一个盒子中,用的时候才找出来。封装的优点是降低使用成本、降低维护成本和保证代码安全性,测试人员只需要使用和维护封装后的代码,按照自己想法改变Selenium的方法而又不那么容易被人知道。封装是自动化测试框架的基石。通过对类的封装能减少耦合,而方法重写能够让子类满足测试人员需求的功能,如下图18为基类的封装,使用private定义一个timeOut为10的成员变量用于显式等待元素,把输入和点击的方法按照需求进行重写,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。Spubli-eelassBasePage{g10通过该类提供的方法来实现对隐藏信息的操作和访问。Spubli-eelassBasePage{g101112^131415161718^192B2122232425^26272829privatefinalinttimeCut=1辑〃等将■时间publicBasePage(WebDriverdriver){//TODOAuto-generatedconstructorstubthis.driver=driver;5肥目bERement巳〔Em司it■String3】{WebDriverWait(driverti»e0ut}.uoti1(ExpectedCondltions.visibiLeleitient}};//^1QA®element-clear()]//先滑空输入框element-sendKey5(s);//输人艱据广重写click^法Wvoidclick(L^sbElemeidtelement)(|miAUebDriverWait(dri^er.tinteOut)■wtil(ExpectedConditionsa element)):〃加A显式善待elefflent-clickO;图图18封装与重写5.2.2脚本的参数化参数化是把固定写死的参数动态地使用。以登录测试脚本为例:把用户名和密码进行参数化,这样测试数据和测试脚本就能够很好地分开管理,不需要修改代码,只修改测试数据就能实现不同的结果,同时减少代码冗余。而且把数据参数化,能够更好地进行数据管理,参数化再进一步就是构建数据驱动,利用数据驱动测试结果的改变,无论是通过何种形式把数据配合代码实现操作都属于参数化,使脚本多次使用的特性增加了。以Jenkins跳转页面为例子,此处我使用了TestNG的标注Parameters实现参数化,如下图19图20分别为TestNG的Parameters和xml文件参数内容管理:化,1NiewTest.jia^aKItparam.xmlpackagecnm_testing..testn°;-3*importorg.openqa*selenium.WcbDriver;.7Spublicf^ewTest{史Spublicf^ewTest{史目T苔t191114其171819厥a件meters(("driveppath"》”u”})publicvoidf(StringdriverpstInjStringurl)质ffm丐wm済刘p性I征「却Iw巳m,ee収ru产也也fLwckl乎5-our<es-XShy眠iver,ex矿}:System.setproperty(tawebdriver-chrQ»e-driv-erta,Idriverpath)LtJetbDriverdriver=newChromaDriver(};//dri观rcg^tr"hEtio■://locdlhost-W0&/jenkinlogin")jdriver-getFur]);l图19脚本Parameters标注IflNewTestjavaxparam.xmlH1H剛1vprsion=^r1.0,pencodwg=Bri/rf-SR?>岛2<!DOCTYPEsuiteSVSTEM"http//te&tog.orp/testng-1.0.dtd">k<5uiteneme=ffJ>epend">4_,<testnarne^="c/eDendtest^^<parsnietername=ITdriv^rpathuvalue=wHsrcUtestUresources\\Cihrcwedriver.exen</parameter>^parameternatfle=,TurLwvalue="hhttp://LocaLhast:909Q/jenkios/togin,r></parameter><J-Usings理测试用例時如果有暮个测试类,使用钏丄交件进行管理一,<classname=JJCDfl?.testiingutest^gr.AfewTest**></class></cl£isses></test?图20xml对参数内容进行管理5.3本章小结通过了解学习Selenium的Java脚本编写,熟悉运用Selenium和WebDriver的各种API方法完成自动化测试,从而获得的经验是测试中的每个阶段都需要对脚本进行维护,保证脚本的健壮性,自动化工具说到底其实只是辅助,真正进行测试还是需要以人为本,掌握自动化思维,简单的流程自动化的时候,人可以对复杂的流程进行手工测试。

6.自动化测试的应用与数据分析6.1自动化测试的应用由于软件中的错误会导致软件开发在成本、进度和质量上的严重失控,所以保证软件质量的测试在软件生命周期中占据了及其重要的地位。过去一直采用的都是人工,可社会是进步的,软件发展随之而诞生了自动化测试。如下图21为完整的自动化测试流程。系统測试芫成(一般将此视为自动化测试切入点)系统測试芫成(一般将此视为自动化测试切入点)测试需求分析脚本运彳科境唔建v代码修改及优叱v自动化测试用洌设计测试阙本开发无人值守测试测试用抒股计脚本维护阶段脚本运彳科境唔建v代码修改及优叱v自动化测试用洌设计测试阙本开发无人值守测试测试用抒股计脚本维护阶段图21自动化测试完整流程UI自动化的前提条件是手工测试已完成,后期不影响进度的前提下逐渐实现需求稳定,可重复利用的自动化,而优秀的自动化测试工程师能够根据项目设计对应

的自动化测试框架和设计模式,测试框架能够高效处理测试脚本,对代码的编写和维护有着明显的作用,测试脚本能够定时自动执行并形成精美的报告错误,未找到引用源。,而常用的设计模式是P0模式即页面对象模式,用来管理维护一组Web元素的对象库,使得代码变得可读性更好,维护性和复用性更高。如图22为P0模式所包含的内容:7潺LevelJenkine.,出5rc/nnairyjav33sre/main/resources“胃5rentest/java>IBcoT.bsjenkins基类封装“囹corn.selenium.base基类封装?BDriversaseJava詞emrgjava―—业务层:传入参数进行业务操作* com,selenium.business―—业务层:传入参数进行业务操作. ,[jjIcjginlPrEH* 一—操作层:对元素进行操作w出com.selerium.handle一—操作层:对元素进行操作BI□ginPageHandle.javaw出com.5elerium.page0BasePage.java >元素层:获取定位元素>[BloginPagejava测试用例T工具类:封装工具方法页面元素参数化管理文件*Gorr^seleniiim.testCase0测试用例T工具类:封装工具方法页面元素参数化管理文件. >@I口口inTestjava出corr.seleniuin.util皿getByLacatorjava?(0PreUtil.java-3W5rc/test/res□lircesMJRESystemLibraryU2SE1..5]lkMavenDependenciesETCtarget回gjgment.properries由pom.xml图22PO模式企业中应用自动化测试的情况有四种:一、坚实的人力资源;二、开发出来的东西改动基本趋于0;三、快速迭代产品,核心共性业务,不会频繁变动;四、测试人员工作效率高,公司不是太忙,可以为自己的测试业务搭建一套自动化测试框架进行维护。6.2自动化测试数据分析随着大数据概念的推广,人们越来越意识到大数据时代中,最重要的并非掌握多么庞大的数据,而是对数据进行专业且有效的处理。有些项目为了满足业务流,需要在用例设计的时候用边界值、等价类、错误推测法和场景分析等方法,这些方法产生不同的测试数据,有些项目的测试数据还异常庞大,比方说关于财务的项目。测试过程中所有增删查改都是数据,就拿Jenkins来说,注册填写的信息就是输入的数据,系统把这些数据输入数据库,输出注册成功的结果,用户就能用这些数据进行登录,系统对这些数据进行判断。可以回想下,我们测试很多时候,做的都是造数据输入系统,系统输出结果来对比预期结果是否一致,整个自动化测试围绕着数据。由此看来整个系统其实都贯穿着数据,就像灵魂一样存在于系统。做完测试一般会出一个测试报告总结,我们对测试数据的分析都是从这里进行,使用代码自动化的好处就是能够自动生成测试报告,此处我使用Allure生成测试报告,它的逻辑如下图23所示:图23Allure生成报表逻辑通过Maven中pom.xml文件的配置相关的工具包和插件然后通过maven运行两行命令就能生成如下图24的测试报告图24Allure测试报告当然部分内容需要以后涉及Jenkins持续集成慢慢摸索才能形成精美详细的测试报告,但我们依旧能够从测试报告之中看到测试的状态、测试所耗时和测试报错日志内容,更方便直观地反馈给开发人员。

▼-・BPfr •VT-t*JMWft-TTHi力mn-«HAMsnT«ma■!»wiRvWli—WflNHWTLT&ii»*sn«DWIM.-'WILHIM■1Miu7nn*L^^uTni◎州W=・P0▼-・BPfr •VT-t*JMWft-TTHi力mn-«HAMsnT«ma■!»wiRvWli—WflNHWTLT&ii»*sn«DWIM.-'WILHIM■1Miu7nn*L^^uTni◎州W=・P0Ban»T1IMKBMrtHuiEorifaaImA^w4^HT*・O«2Ett_WW<&Tr"K.O13Muxn_FKpuiHUd<iruwf^r9■!CESW-fllnfl«!*■»™vW1MWlB»*WTW1■1!MM=kcrp*'.'iiBl-aiiwhi.!■rj'4"n;*-i4Minc^jwh_4]wiirit,nB^hblri4»laiHUFU-rRE.mu-amHtily.icrI'r■■-■"■■■&■■■*"iir_t-■I:iBta*E/BffWngL—FrHK心CEI13EL4F”.「"叫日rU-14r^NL.-3ILF-«B-3-n:^hiJaii3l.IUO:'biMI II*.M.ISEhlcixMKiiFi■■ 1jh'EfWUULLlt.^hLM.■BB«MHKMi:Hidiar-IEml.3M1.aa!il|hnrM■ ■*mflI plmd■r^d*Mr-n■HEHUdMHKI":rM-|tv-1*"111'tn><dAll图25Allure测试套图由上图25看出我对Jenkins做了8个测试用例,其中,链接测试报故障是因为注册界面的UI显示是“请登陆”,而我按照正常的UI显示应该是“请登录”,发现这些UI界面的bug我们就能反馈给开发人员,测试人员能够通过测试报告的用时,保证准确定位的前提下,适当地使用三种等待进行调优。6.3本章小结在实际生活的应用中,自动化测试是测试工程师的一种手段,按照需求,熟练地编写脚本开发出相匹配的测试框架,最终部署到持续集成工具上持续地进行测试。借助自动化流程能够加深对业务和数据的认知,有助于下阶段迭代发现隐藏的问题。虽然我的技术还未能到达那种地步,但这也相当于给了一个方向目标,就是能够熟练编写一个测试框架,而且自动化测试能够围绕数据,换言之,数据驱动配合PO模式,能够更好地分开页面元素、测试操作和数据并进行管理,最后生成一份测试报告反馈给开发人员对web应用进行修改。7.总结与展望7.1总结经过一个多月的Selenium自动化测试技术的学习,我对自动化测试有了深刻的了解。当然这个测试过程我也会遇到一些问题,比方说:删除项目的时候,通过项目总览页面去定位倒三角图标是无法定位的,原因是这个元素的属性是隐藏,如下图26:Jenkins—新建ItEE。用户列表二*构建历史临—新建ItEE。用户列表二*构建历史临MyViews4凭据何建队列叭列中没在构廷任刍圈坏.小中大Name,divJnwnyS^lectOPIEit16cHit222I定位此图标1空阅属性为hidden1空阅ApplicationMemorySecurityAuditsElementsConsoleNetworkPerformanceApplicationMemorySecurityAudits►id^'br^eadcrumbs'/ul>宇<divid-"breadcrumb-menu-target">*■<dlvidbreadcrumb-menuMclass-,ryui-moduleyul-overlayyulmenuyul-overlay-hiddemr,style-"visi</div></div></div></div></div><d±vid-*menuSelector"classstyle-"left:555px;top:172px;visibility:hidden;"></div>==>cd1vid-■bodyclass-"cl<?^r”>►/IKid—"-^-iriA-nAnp1>.../Jdiu%图26倒三角图标若不是了解项目功能和流程,是不知道到,这里需要鼠标操作到相应位置,倒三角才会出现,因此脚本中就会使用到一个Actions的鼠标操作,加上一个perform方法实现此操作,如下图27删除项目脚本所示:HlDeleteltemTeitjava臨2HlDeleteltemTeitjava臨25262728I彻303132333435弗38394041心43〃销股二咋(driver);〃创建気标键盘对象Actionsaction=newActions(driwer)jWebElementItemPJame=drj.'i/irr1.findElenient(By.1.Ln^Iext("i>>ebI®rtewNeme.isDisplaved(/;动曷亏;今ih;天成匕三*上>实现鼠标移动到相fiction.riove70Element(Z±eiiiNanie).performO;publicstaticvoiddeleteItemi(ChromeDriwerdriver)throwsException{〃访问项目苜页driver-eet("http://localhost=9000/jenkins/"); 合II硅■Hen、E〃扣席标務所至II侦曰成幸孔 /巳U建HLLI513入J/象—e.… .应■立置WebElementI^iangle=driver.findElement(By."menuSelector'"))■Triangle.isDisplayedO^Trtangle.click();图27删除项目脚本当然这只是其中一个问题,还有很多比如我的脚本实现方面,虽然实现其自动化测试的作用,但其中的部分测试用例并不能单独一个类,参数化方面可以修改成random生成,不至于影响后续的自动化操作,这些部分都是我应该慢慢整理总结出的内容。在做毕业设计之前,我认为毕业设计将就是把大学所学知识单纯的汇总成一个作品,实际做完后,发觉这是为了让我们认识到如今社会技术发展到什么程度,我们应该把知识掌握到什么水平才能更好地开创未来,从毕业设计过程中认识自身的不足,相对应地进行学习,努力提高自我知识和综合素质,毕竟,自动化测试工程师这一岗位不是一蹴而就的,需要不断地积累经验和进行实战。7.2后续研究展望后续的研究重点在于框架和持续集成,在熟悉自动化测试基础的前提下,Selenium能够配合移动端的Appium进行Web端和APP端的联动测试,加上接口自动化能够更好地保障产品的质量。一个好的自动化测试框架能够帮助测试人员做项目事半功倍,反复应用于不同的项目中,使其熟能生巧用得变幻莫测。持续集成是自动化测试的核心,由于持续集成不断去构建、编译和测试,可以较早地发现问题,降低项目风险,而且它能够进行无人值守的测试,减少重复性工作所花费的人力,经过持续集成平台获取到持续交付可供使用的版本,减少发布风险,增强团队信心。7.3本章小结本章对论文完成总结陈词并且明晰未来发展方向和学习目标,不能为了自动化而自动化,而是为了保证产品质量而进行自动化,把自动化思维融入到项目中,提

高工作效率,缩短回归测试时间,编写的脚本尽量复用性高且易维护,提升软件可信度。附录附录一:注册模块用例设计用例标识Jenkins001项目名称Jenkins持续集成系统开发人员XXX版本号Jenkinsver.2.190.1用例作者李杰豪模块名称注册操作流程设计日期2020-03-02测试方法场景分析法、等价类划分法、边界值分析法测试类型功能测试、黑盒测试、手工测试测试人员李杰豪测试日期2020-03-03用例描述该用例用来测试在“注册”模块中能否完成注册业务流程,并测试其中的功能是否实现。前置条件已进入Jenkins系统中的注册模块编号测试项操作步骤预期结果数据实际结果结果比较说明1从注册界面跳转到登录界面1、点击“请登录”的字样1、点击后能够跳转到登录界面1、点击后能够跳转到登录界面1、a标签实现跳转2完整填写注册信息-成功注册账号1、 在“用户名”输入框填写信息2、 在“全称”输入框填写信息3、 在“邮箱”输入框填写信息4、 在“密码”输入框填写信息5、 点击“创建账号”按钮1、若所填写的信息符合要求与规范能够成功注册并跳转到该用户已登录状态界面1、 用户名:aaa2、 全称:李四3、 邮箱

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论