《基于Python Selenium的Web自动化测试设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Python Selenium的Web自动化测试设计与实现.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要计算机行业更新迭代快速,功能就会越多,也就会越复杂,出现bug的概率也就会变高,这将会导致发现到bug的时间不确定的延长,bug越晚被发现的话,修复它的成本就会变高;而自动化使得一系列测试方面的问题得到了有效的解决,它代替频繁而且重复的人工操作,以此达到提高测试效率的目的。而Selenium作为其中一款免费且开源的WebUI自动化和接口自动化测试工具,适用于不同platform和browser,有利于测试人员搭建Web自动化测试环境。本论文以Selenium和Python为基础对Web进行设计与实现自动化测试,项目中以pageobject设计模式主要实现了三个主模块,分别是页面对象模块(p
2、age)、测试用例模块(testcase)、公共模块(common),以这三个模块展开了自动化测试。本项目实现了以selenium模拟人工进行测试,针对不同的browser和业务展开工作,在规范测试流程、提高效率方面有一定意义。关键词:Python Selenium pageobject自动化测试 Web测试 Abstract In the computer industry, the update iteration is fast, the more complex the functions are, the higher the risk of bugs, which makes th
3、e time of finding bugs longer, the later the bugs are found, the higher the cost of fixing bugs is; and the Web automation test makes this series of problems effectively solved, which replaces frequent and repeated manual operations, so as to achieve the purpose of improving test efficiency.As one o
4、f the free open source automation testing components, Selenium is suitable for Web applications across different browsers and platforms, which provides a good support for testers to build Web automation testing. This paper designs and implements Web automation test based on Selenium + Python, includ
5、ing log management module (logs), page object module (page), test case script module (testcase), common module, etc.In this project, selenium simulation is used to test manually. It aims at different browsers and businesses. It has webRTC significance to standardize the detection process and improve
6、 the detection efficiency Key words: Python Selenium pageobject automated testing Web testing目 录一、绪论11.1、课题研究背景11.2、课题研究目的与意义11.3、国内外研究现状21.4、课题研究的主要内容21.5、论文结构21.6、本章小结3二、自动化测试技术研究42.1、自动化测试的相关概念42.2、开展自动化测试的条件42.3、自动化测试的一般流程42.4、自动化测试的优劣52.5、基于Web的自动化测试技术研究与分析52.6、本章小结6三、 Selenium自动化测试技术研究73.1、Sel
7、enium基本技术研究73.2、Selenium的工作原理73.3、Selenium元素定位83.4、本章小结9四、自动化测试框架的设计104.1、关于POM模式的设计114.2、公共类模块的设计114.2.1、HTMLTestRunner114.2.2、LogGen124.2.3、OpenBrowser134.2.4、ReadConfig134.2.5、ScreenShot134.2.6、SendMail134.2.7、ReadData144.3、页面对象模块的设计154.3.1、基类basepage154.3.2、子类(loginpage、mainpage、registerpage)154
8、.4、测试用例模块的设计164.4.1、test_01login164.4.2、test_02register174.5、配置文件184.6、本章小结18五、Unittest单元测试框架的设计195.1、Unittest基本技术研究195.2、Unittest工作原理195.2.1、TestFixture195.2.2、TestCase205.2.3、TestSuite205.2.4、TestRunner215.3、断言设计215.4、参数化设计225.5、本章小结22六、测试实施与结果分析236.1、测试实施236.2、测试结果分析246.3、本章小结25七、 总结与展望267.1、总结26
9、7.2、后续研究与展望267.3、本章小结26参 考 文 献27致谢28图表目录图3-1 Selenium的工作原理8图3-2本章小结9图4-1 common模块10图4-2 config模块10图4-3 page模块10图4-4 testcase模块10图 4-5 Python3 HTMLTestRunner12图 4-6 日志模块关键代码13图 4-7 用例读取关键代码14图 4-8 元素定位封装15图 4-9 子类操作部分代码16图 4-10 登录操作部分代码16图 4-11 登录失败测试用例代码17图 4-12 注册用例代码117图 4-13 注册用例代码217图 4-14 注册用例代
10、码317图 4-15 配置文件18图 5-1 Unittest TestFixture20图 5-2 用例展示20图 5-3 测试套件21图 5-4 测试运行21图 5-5 参数化设计22图 6-1 运行图123图 6-2 运行图223图 6-3 运行图324图 6-4 注册和登录测试报告25图 6-5 订票测试报告25广东东软学院本科生毕业设计(论文)一、绪论1.1、课题研究背景目前国内的软件行业已经过了飞速发展的阶段,逐渐进入到一种饱和的,缓慢向上增长的阶段,可是即使这样软件测试领域仍然处于非常薄弱的阶段,大多数从事着软件测试这份工作的人依旧进行着手工测试。手工测试的优势是拥有较强.的.异
11、常处.理能.力,通.过人.为判.断.测.试.结果.是否.,能够细致的定位到问题。但是缺点也很明显,极度耗费时间和人力,且在数据量巨大或者重复进行操作的时候还有可能出现操作失误,导致输错数据或操作步骤错乱这种小错误;而.且.大量重.复.性.的.手.工.测.试的.成本只会.更高.,如果还要考虑到回归测试或者软件改动而进行的重复测试等特殊情况,成本不可估算!自.动.化.测.试.因.此.诞生.。与.手.工.测.试对.比,自动化.测.试.优.势明显:流程.更规范、效.率更高、覆.盖.率全.面.等,而且.部分测试.是手工.无法.进行.的,这个时候就需要自动化测试来执行。但也有不足的地方,那就是对测试人员的
12、水平要求较高,但是随着软件行业的持续发展,软件测试的从业人员的水平也会随之提高,自动化测试也会越来越普遍。1.2、课题研究目的与意义手工测试的地位是不可代替的,如果一个项目的周期较短,相对于成本和时间来说,手丁工丁测丁试丁是丁最丁优丁优选丁择。但丁如丁果丁项丁丁目丁稳丁定丁了下丁来,就可以考丁虑丁往丁自丁动化丁测试丁方向丁转丁变丁了,因为丁这丁个时丁候项丁目丁的丁需求丁趋于丁稳定,重复的任务会较多,适合自动化测试的开展。本次选题将以Web自动化测试为例,深入研究和学习自动化测试的规范步骤,从而进一步找出自动化测试的共性和规律,培养自动化测试思维,锻炼编程能力,通过分析并解决问题,养成良好的工作
13、习惯,为日后从事软件测试的相关工作打下良好基础,积累宝贵的经验。目前市面上比较流行的WEB自动化测试工具有Selenium、UFT、Watir和IBMRFT,Selenium是其中流行程度最高的开源自动化测试工具,该工具有着其他工具不能比拟的优越性,免费开源,支持多种环境,多种语言和多种主流浏览器,更加贴合测试结果。基于上述原因,选用Selenium作为本次自动化测试的工具。本次测试以WebTours系统作为被测系统。WebTours是一个booking系统丁丁丁丁,在这个项目中口将口口围口口绕口口口以注册口口、口登口口录、订口票等功能为口口核口心口口展开口测试,通过自口口动化口口的需求口口分
14、口析,编写口自口动口化测口试口脚本,搭口建自口动口化测试口环境口和口框口架,执口行口口测口试等口一口系口列口流程来口完口成口口一口口个口完口口整口口的自口动口化口测口试口过口口程口口。1.3、国内外研究现状国内的软件测试相比较于国外来说,起步较晚,同样,自动化测试也是落后于国外。但是随着国内测试行业飞快发展,自动化测试逐渐成为测试领域里得到普及,越来越多的企业已经开展了自动化测试(软件)且有了专门的流程和框架。国外的自动化测试最早可追溯到1990年,对比国内,起步早太多了。但是随着国内测试行业的不断学习和发展,国内的自动化测试行业也渐渐赶上了国外的步伐,至今两边的水平即使有差距,也不会相差太多
15、。1.4、课题研究的主要内容本次课题将以Web作为研究对象,通过Web自动化测试进一步研究自动化测试的核心内容,在完成自动化测试的过程中,能够更加深入了解测试的整个过程。内容上将以自动化的框架的设计和实现作为核心内容,而不是以测试流程作为核心,辅以相关的说明,如工具,框架设计原理和单元框架等。自动化测试框架本身不能完成一套自动化测试过程,它更像是一种管理工具,通过自动管理测试用例,生成日志和测试报告等,而关键的部分是通过一个个组件完成的。本次项目的自动化测试框架中集合了日志、报告、截图、用例等管理模块。1.5、论文结构本口论口文口口共有口口七口章,结口口构口口如口口下口:第口口一口章,口绪口论
16、口,口简口单口的口口介口口绍口了目前国口口内的口软口件测口口试口行口口业口的口口自口动口口化口现状,包括论文选题的目的与意义。第二章,自口动口化测口试口相关口介口绍口,介绍口口了口自口动化测试的一些相关内容,包括口定口义口口,开展条件,流程和优缺点,并简要描述了本次对被测系统的抉择。第三章,Selenium自动化测试工具,对Selenium进行了基本介绍,介绍了它工作的原理和组成,最后列举了自动化操作中最重要的八种元素定位方法。第四章,自动化测试框架的设计,本次论文的核心部分。首先介绍了本次项目的测试框架的核心:POM模式,然后逐一介绍了本次测试框架里的公共类模块,页面对象模块,测试用例模块和
17、配置文件模块的相关内容。第五章,Unittest单元测试框架,详细介绍了单元测试框架Unittest的各个方法,包括TestFixture,TestCase,TestSuite,TestRunner和断言。第六章,测试实施与结果分析,展开测试后的情况说明和得出测试结果的分析与说明。是对整个项目的总结。第七章,结束语,自动化测试结束后的心得总结和体会。以及对未来发展的一些想法。1.6、本章小结本章包含本次选题的相关说明,简要介绍了自动化测试在目前行业的现状和叙述了本次论文会涉及到的内容。27二、自动化测试技术研究在开展自动化测试之前,必须要先知道什么是自动化测试,如何开展自动化测试,它到底能够带
18、来什么?2.1、自动化测试的相关概念自动化测试就是将手工测试的测试超用例变成计算机或者其他工具来执行的一个运行的过程。一超般超来超说,超在超测超试超用超例设超计超编超写及超超评审通超过超后,测试人员根据测试用例中的步骤开展测试,最后将得到实际结果和预期结果对比,得出结果。这个过程中,以节省时间、人力物力,提高测试效率为目的,就有了自动化测试。2.2、开展自动化测试的条件在实超施自超动化超测试之前,要超分析软超件开超发的超过超程,判断它超是否超适合超自动超化测超试超的开展。一般来说,下面列出几个需要满足的最基本的条件:1、软件需求的变动不会太过于频繁因超为超软件超自动化超超测试的超维护超成本超由
19、测试超代码超的稳超定性超所决超定超超。假如需求经常发生变动,测试人员就要根据新的需求来编写新的代码,这样子无疑是很花费时间,耗费大量成本的。这样子自动化测试对比于手工测试方便高效的优点就不复存在了,那超超还超不超如超开超展超手超工超测超试超超。2、超项超超目周超期超长超由于确定自超动化测超试需超求超超,超设计自动化超测试框架超,超编写与调超试测试超脚超本都需超要超花超费大超量超的超时超间超来超完超成超。这是一种类似功在当代,利在千秋的项目。但如果时间不够,那么就没必要开展自动化测试。2.3、自动化测试的一般流程自动化测试的一般流程:首先是制定测试计划,接着分析测试需求,搭建自动化测试环境,设计
20、并编写自动化脚本,最后执行脚本,生成测试报告,自动化测试流程到这里就算结束了。1、制定测试计划。在开始自动化测试之前,要先做好相关的准备工作。做好测试计划,准备好一切工作前要完成的东西。比如说测试对象,目的,项目内容,用到的方法,进展要求,资源分配状况等。2、分析测试需求。根据项目的测试计划和需求规格说明书,分析总结出软件的测试需求,便于在编写测试用例的时候覆盖到更多的测试点,这点和普通的测试流程很相似。3、搭建测试环境。搭建自动化测试环境是整个流程中的重点,将在下一章详细说明。4、设计测试用例。根据测试需求分析后得出的结果,设计出覆盖程度相对高的测试用例。5、编写测试脚本,执行自动化测试将会
21、在后面进行详细说明。2.4、自动化测试的优劣优势:1、 避免了人为出错。测试人员不可能精神持续高度集中进行手工测试,长时间下来容易受外界影响,可能会造成意外的错误。2、 有利于回归测试的开展,因为用例是已经设计好了的,预期也超没有过多变化,将这一步骤自动化,能够大幅超度的提高超测试的效率,缩短周超期。3、 解放人超超力,超让超测试超人员超可以去超进行那超些超更重要的超测试超工作。劣势:1、 开发测试框架和脚本需要花费较大的时间成本,变相拉长了周期。2、 当项目快速迭代时,自动化测试脚本也需要跟着不断迭代,进一步提高了时间成本。3、 不同项目之间的自动化脚本的复用率低。4、 对测试人员的水平要求
22、较高,并不是所有的测试人员都能够胜任自动化测试这份工作的。2.5、基于Web的自动化测试技术研究与分析目前Web自动化测试的主流技术是QTP和Selenium,两种技术都是通过模拟用户的操作实现Web自动化测试,都能够很好的完成自动化测试的流程。而本次项目正是基于Selenium工具进行的,通过模拟用户的相关操作,如点击、输入等操作,组合成一系列测试用例,通过自动化测试框架的集成管理,最终完成测试流程。基于上述关于自动化测试的特点和优缺点描述,本次测试决定选用WebTours作为被测项目。WebTours是一个飞机购票网站,项目和需求已经稳定,自动化测试的脚本复杂度比较低,非常适合新手作为初次
23、自动化测试的被测项目。在本次自动化测试中,主要做了注册、登录和订票三个功能自动化测试,注册和登录适合自动化测试效果的展示,订票属于核心流程。这三个功能重复性高,结果明显易判断,完全可以用自动化测试取而代之。2.6、本章小结在自动化测试技术研究该超章节中,具体介超绍了自超动化测试超的相关超概念,超分析超了开超展自动化超测试的相超关条件,通过超自动化测试超与手超工测试超的对比超,得出了自动化测超试超开展超的可行超性。三、 Selenium自动化测试技术研究3.1、Selenium基本技术研究Selenium是一款开源Web的自超动化测试工具超,主要用超于网页超的自动超化测试和接口测超试。Selen
24、ium在浏览器上进行模拟人工操作。支持多种浏览器,支持多种语言;支持多个平台。Selenium目前最新的版本为Selenium3。对比其他工具,如QTP,需要昂贵的费用,Selenium则完全免费,且支持多平台和多种语言,所以选择Selenium作为本次测试的工具。3.2、Selenium的工作原理启动浏览器以后,客户端向服务器端发送http请求,服务端收到请求以后依赖浏览器的组件,超超将Web Service的超命超令超转超化为超超浏超超超览超超器超超的native的超超调超超用超超进行相超超关超超的超超工作超超。Selenium工作过程中有三个角色发挥着至关重要的作用:1、 测试脚本。用编
25、程语言写成的脚本控制着Selenium的操作,可以说自动化测试中的所有操作都依赖于Selenium的脚本编写。2、 浏览器驱动,不同的browser要对应不同的Webdriver,而且还要对应browser版本,否则无法工作。3、 浏览器,测试主体,所有的用例都要在上面执行。以上原理在本次测试中皆能很好的得到体现,如Python语言编写的脚本通过浏览器驱动在对应版本的浏览器上运行。图 3-1 selenium的工作原理3.3、Selenium元素定位使用Selenium进行Web页面自动化时,第一步就是进行元素定位,只有定位元素后才能继续进行后续的操作。比如说如果要点击一个按钮,那么在点击之前
26、就必须要知道这个按钮的位置在哪里。在Selenium中,常用的元素定位方式有八种1:表1 元素定位方法元素定位方法描述参数id通过ID的属性值去定位查找单个元素id: 需要被查找的元素的IDname通过name的属性值去定位查找单个元素name: 需要被查找的元素的名称class name通过class的名称值去定位查找单个元素class_name: 需要被查找的元素的类名tag_name通过tag的名称值去定位1 UnmeshGundecha.Selenium自动化测试 基于 Python 语言.M.人民邮电出版社,2018,124.查找单个元素tag: 需要被查找的元素的标签名称link_
27、text通过链接文字去定位查找单个元素link_text: 需要被查找的元素的链接文字partial_link_text通过部分链接文字去定位查找单个元素link_text: 需要被查找的元素的部分链接文字xpath通过XPath值去定位查找单个元素xpath: 需要被查找的元素的xpathcss_selector通过CSS选择器去定位查找单个元素找单个元素css_selector: 需要被查找的元素的ID本次测试中主要运用了NAME和XPATH的方式进行元素定位,如下图所示:图 3-2元素定位方法展示3.4、本章小结介绍了本次开展自动化测试的工具Selenium,其工作原理是依赖于测试脚本、
28、浏览器驱动和浏览器三者的相互协作,才能完成自动化的展开;同时在本章中还介绍了Selenium的相关定位方法。四、自动化测试框架的设计本项目采用Selenium3自动化测试框架、PMO(project Object model/PageObject)模式、以pycharm作为集成开发环境(IDE)、脚本开发语言使用Python,主要在Windows上进行测试。项目的开发主要实现了针对Windows系统,IE、Firefox、Chorme三种主流浏览器来进行的自动化测试的开发、调试、构建项目、部署、运行、生成html测试报告等一系列功能。本次项目共有四个模块,分别为公共类模块(common),页面
29、对象模块(page),测试用例模块(testcase)和配置文件模块(config)图 4-1 common模块图 4-2 config模块图 4-3 page模块图 4-4 testcase模块4.1、关于POM模式的设计2 虫师.Selenium3 Python 自动化测试实战.M.中国工信出版集团,2018,339.本论文设计的测试框架是以POM模式(PageObject)为基础,所有的内容都是围绕该模式来进行进一步的设计,因此POM模式对于这篇论文来说是核心内容。POM即页面对象模型,是一种页面对象模式。在POM这种模式下,Web的每一个页面都有一个对应的page,每一个page维护着
30、对应网页的各个元素以及操纵这些元素的对应方法。POM模式是一种底层,逻辑与用例分离的model,让代码可读性和复用性变得更高,稳定性亦更高。而且更重要的是让页面对象与测试用例分离,进一步优化了元素、用例、数据的维护组织,这就让Web页面元素假使发生了改变,也不用改变测试用例的的脚本代码,只需改动对象库里的内容即可完成维护。POM模式还有一个好处,那就是基类(basepage)的代码一般可以复用,在项目开始之际就可以调用,在项目完成或者成熟后,再进行元素定位的适配和调试;方便其他人共同维护开发脚本,利于合作。4.2、公共类模块的设计公共类模块里存放了自动化测试过程中各个模块所需要调用的相关方法。
31、在本次测试中,common类包含了以下py文件:HTMLTestRunner(HTML测试报告生成)、LogGen(日志生成)、OpenBrowser(浏览器配置驱动)、ReadConfig(配置文件读取)、ScreenShot(自动化测试过程中出现异常时截图)、sendmail(自动化测试结束后将生成的html测试报告自动发送至邮箱)、ReadData(读取excel里的测试数据传入测试用例中,使测试数据和测试用例分离)。4.2.1、HTMLTestRunner这是一份使用Python库中Unittest单元测试框架的一份扩展性文件来生成HTML的第三方文件,可以直接引用。通过这份文件生成的
32、测试报告与普通数据进行对比,能够更直观的让人了解测试结果。但是目前的HTMLTestRunner文件只支持Python2,如果要使它在Python3下运行,需要做到如下更改:图 4-5 python3 HTMLTestRUNNER然后将该文件放入Python3下的Lib目录中便可引用。4.2.2、LogGen日志文件是自动化测试里不可或缺的一部分。当自动化脚本运行时,可以根据当前日志来了解脚本运行的状态,并且可以在日志文件中回溯测试的过程。使用日志文件可以极大的增强脚本的健壮性。日志函数通过logging模块来实现,在该函数中,有5个等级,分别是:debug、info、warning、erro
33、r、critical。生成后的日志文件路径存放在配置文件中,默认等级为info,每个日志文件以当前时间点命名,日志的调用贯穿了这个项目的整个流程。表2 日志等级等级等级数值形容Debug10详细信息Info20预期信息Warming30警告信息Error40错误信息Critical50严重错误4.2.3、OpenBrowser该函数的作用是通过传入的参数来获取浏览器驱动配置文件,从而实现不同浏览器进行自动化测试。在本函数中我设置的参数每个浏览器的名称,通过传入浏览器的名称获得对应的驱动,从而打开浏览器。图 4-6 日志模块关键代码4.2.4、ReadConfig将常用的变量或参数值放入配置文件
34、中,在需要修改某个关键值的时候,只需要修改配置文件中的数值就能做到修改所有的变量值,然后用ReadConfig函数读取出来,让脚本更易维护,减少了代码的改动,提高了工作效率。4.2.5、ScreenShot在自动化测试执行过程中,有的时候会出现各种错误的情况,有可能是网络问题导致元素没有及时出现,也有可能是页面元素发生改变,总之有很多因素影响着自动化测试过程。所以这时候就需要计算机帮我们记录发生的错误,所以我在自动化测试中引入了日志功能。但是有的时候日志并不能高效的定位错误,所以还需要在失败的时刻用屏幕截图来复现当时的情景,进而排查出错误的原因。ScreenShot函数通过封装Selenium
35、自带的api(driver.get_screenshot_as_file())来进行截图,生成后的截图文件路径存放在配置文件中,文件的命名方式为截图的时间点。4.2.6、SendMail在测试用例运行完后会生成一份测试报告,在公司里,自动化测试一般是在主机上进行的,所以很不方便。但如果让计算机帮助我们,让这份测试报告可以通过邮件的形式在生成报告的第一时刻发送给相关的工人人员,这样就可以在测试完成的第一时间知道测试结果。4.2.7、ReadData在自动化测试中,需要用到的数据往往有很多条,如果将测试数据全都添加到测试用例了,无疑会使测试脚本变得十分臃肿,不利于维护。那么这个时候就可以借助xlr
36、d库实现数据分离。其原理是这样的,将测试数据与测试用例分离,把测试数据保存在excel文档里,通过xlrd将数据读取出来,在通过ddt将数据传入测试用例中,从而实现自动化测试。定义一个函数,将excel文件路径,sheetname作为传入参数,获取除第一行(第一行是标题)外的所以数据以字典的形式保存下来,以ddt数据驱动传入测试用例中,提高了代码的可维护性,简洁明了。图 1-7 用例读取关键代码4.3、页面对象模块的设计 利用pageobject模型,把所有可能涉及到的页面生成类文件,当需要使用的时候再去调用。页面对象模块其实可以分为两个部分。一部分是基类:basepage,其核心思想来源于公
37、共类,当多个对象之间存在共性的时候,就可以将共性设计为公共类,让其他页面继承于基类;另一部分是继承于基类的各个子类,属于具体业务操作类。4.3.1、基类basepage3 董付国.Python程序设计(第二版)M.清华大学出版社,2015-08,296.图 4-8 元素定位封装basepage类里主要包含了对Selenium.Webdriver方法的封装。在本项目里我将比较常用的定位元素、切换iframe框架、打开退出浏览器、获取页面文本等方法进行了封装,当后续操作需要用到上述方法时便可统一调用。该图为元素定位方法,我在该方法中加入了元素等待,用以判断元素是否存在,若元素不存在,则截图且输出到
38、日志文件中。其余方法则只是进行简单封装,无过多操作。4.3.2、子类(loginpage、mainpage、registerpage)子类继承与基类,在Webdriver封装后,则在子类中编写具体的操作步骤。在这里以loginpage为例进行解说。loginpage将登录页面的操作抽象为一个个方法,将页面元素与用例分离了开来,实现了低耦合,高内聚,提高了拓展性。下图为登录页面的输入账号、密码和点击登录按钮三个操作。图 4-9 子类操作部分代码mainpage和registerpage的操作与loginpage大同小异,在这里则不细说。4.4、测试用例模块的设计该模块就是将在页面对象模块中定义的
39、方法像搭积木一样组建起来,连成完整的操作。使用时将测试数据作为参数传入,最后使用Unittest框架来组装和批量执行测试用例。 李青.基于Selenium自动化测试的Web设计与实现J.计算机测量与控制,2016,(09):163-166.4.4.1、test_01login首先是登录测试用例,将在loginpage里封装好的元素操作拿出来使用,在第一个用例里使用了输入账号、输入密码、点击登录控件作为自动化操作,调用登录后显示的用户名作为断言,即LoginName,用来判断登录是否成功。图 4-10 登录成功部分代码图 4-11 登录失败测试用例代码第二个用例是登陆失败验证,在WebTours
40、系统了,登录失败以后会出现“Web Tours Error - Incorrect Password”的提示,所以我把这句话拿来作为错误断言errormessage。4.4.2、test_02register图 4-12 注册用例代码1该文件是注册页面的测试用例,在注册测试用例里我设计了三种测试用例,分别是对注册成功、注册页面用户名框、注册页面密码框进行测试代码的编写,断言方面采用了布尔类型的断言,总体设计思路和登录测试用例类似,其他业务的测试用例总体上也是这样,就不再展示。图 4-13 注册用例2 图 4-14 注册用例34.5、配置文件使用ini格式作为配置文件config的格式,将常用及
41、不易发生改变的数据放入其中,要使用时再通过ReadConfig函数将数据读取出来,减少了代码量,更方便脚本的维护。下面附一份本次项目的配置文件图,里面包含了浏览器名称,测试网址,测试中用到的路径和邮箱的STMP等信息。图 4-15 配置文件4.6、本章小结本章介绍了自动化测试的框架,该框架是根据POM模式来进行设计的,通过POM模式,将自动化测试框架分为三个模块:公共类模块、页面对象模块、公共类模块。每个模块在测试中都起到了关键的作用,其中公共类模块中包含了测试中的常用文件,如日志文件,读取文件,截图文件,自动发送邮件等;页面对象模块里包含了Web页面里的各个元素,将里面的各个元素进行封装,方
42、便后续调用;测试用例模块里是将页面对象模块里封装好的元素进行调用,模拟用户操作,组合成测试用例,是整个自动化测试中靠后的步骤。五、Unittest单元测试框架的设计当所有的前置工作都完成以后,就该开始执行测试用例了。而在执行测试用例代码时,则需要借助Unittest单元测试框架来运行。在执行测试代码前,先简述一下为何选用Unittest作为本次测试的框架。5.1、Unittest基本技术研究Unittest主要用于单元测试,而且还适用于Web自动化测试用例的开发与维护,提供了各种断言方法,用以帮助测试人员判断测试是否符合预期,是目前主流的单元测试框架之一,美中不足的是不能在测试用例执行失败后再
43、继续重跑,但瑕不掩瑜,由于它良好的特性能够满足大部分的测试,所以将它作为本次项目的测试框架。5 温素剑.零成本实现Web自动化测试:基于Selenium和BromineM.电子工业出版社,2011-05,266.5.2、Unittest工作原理通过对Unittest类进行调用分析,可以将框架的工作流程总结如下:在编写测试脚本以后,首先由TestLoader把测试用例加载到TestSuite套件内,之后用Runner套件运行TestSuite套件, 最终保存运行结果在TextTestResult之中。Unittest单元测试框架提供了TestFixture,TestCase,TestSuite,
44、TestRunner等相关的函数,让逻辑更清晰,测试更加方便、可控。在使用Unittest单元测试框架时,要遵守以下的规则:1、 在测试文件中要先导入Unittest单元测试框架2、 测试类要继承Unittest.TestCase类3、 每条用例都要以“test”作为开头,否则Unittest会识别不出测试用例5.2.1、TestFixture用于每个测试环境的初始化和结束。当测试用例每次开始执行时,都需要准备测试环境;每次执行完后,都要还原环境,以便下一条测试用例的执行。比如执行前打开浏览器,访问测试页面,执行完后需要退出系统,关闭浏览器等操作,都可以用到TestFixture。TestFi
45、xture中常用的函数:setUp():初始化环境,执行每个测试用例的前置条件,每个测试用例执行前都要运行一遍该函数;tearDown():还原环境,执行每个测试用例的后置条件,每个测试用例执行后都要运行一遍该函数;图 5-1 Unittest TestFixture如在本次项目中,每次执行前都会在setUp()中读取配置文件中所需打开浏览器的名称,被测系统的url,然后传入被测页面模块中,再打开浏览器。在结束以后,则会退出浏览器,还原环境。5.2.2、TestCase在Unittest单元测试框架中,所有的测试用例都要继承Unittest基本类。当一个类继承Unittest.TestCase
46、以后,才能算一条测试用例,每一条TestCase的实例才算一条测试用例,才能算完整的测试流程。每个TestCase都包含了setUp()、tearDown()和被测用例的代码。每个用例都要以test开头。下面放一张正常登录的测试用例图。图 5-2 用例展示5.2.3、TestSuiteTestSuite是用来创建测试套件的,当测试用例繁多而又只需要测试特定几条测试用例时,就可以用到TestSuite。一般来说,只需要用addTest()将用例添加到suite中就可以了。测试用例的执行顺序与添加到suite中的顺序是一样的。图 5-3 测试套件5.2.4、TestRunner用于运行整理好的TestSuite,控制测试结果的输出。在本次测试中,运用了第三方拓展库HTMLTestRunner来输出HTML测试报告。所以想要自定义控制测试结果输出的话,可以从扩展TestRunner这里入手。图 5-4 测试运行5.3、断言设计断言是自动化测试中重要的一环,在自动化测试中,我们不知道执行脚本后的结果是否符合预期的结果,所以需要程序来替我们来进行判断。Unittest内提供三种类型的断言,一种是最基本