基于Selenium+Python的自动化测试框架的设计与实现.docx
《基于Selenium+Python的自动化测试框架的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Selenium+Python的自动化测试框架的设计与实现.docx(32页珍藏版)》请在冰豆网上搜索。
基于Selenium+Python的自动化测试框架的设计与实现
中文摘要
随着互联网行业的快速发展,敏捷开发快速迭代的性质。
传统软件测试的技术和方式并不完全适用于如今的Web系统的测试,对于企业引进自动化测试是非常必要的。
目前,市场上已经有许多自动化测试工具和框架。
如何构建一套适合自我测试的工具或框架,满足实际需求的自动化测试框架是每个研究自动化测试或自动化测试的工作者需要考虑和解决的问题。
本文主要是利用软件测试知识、自动化测试相关教程和自动化测试框架理论,在结合对当前市场上流行的自动化测试工具的分析结果,使用高效、简洁、灵活的Python语言去实现一款基于Selenium+Python的自动化测试框架,该框架的测试对象主要是功能测试。
在使用该测试框架过程中,需要提高测试脚本的维护性、复用性和扩展性,有利于实现减少测试成本的消耗、提高测试执行的效率和保证软件产品的质量。
关键词:
自动化测试测试框架Selenium框架Python脚本
Abstract
WithWiththeagiledevelopmentoftheInternetindustry.Nowadays,traditionalsoftwaretestingtechniquesandmethodsarenotfullyapplicabletoWebsystemtesting,soitisverynecessaryforenterprisestointroduceautomatedtesting.Atpresent,therearealotofautomatedtestingtoolsandshellframeinthemarket.Howtobuildasetofself-testmeansorshellframetomeetthe physicaldemandsofautomatedtestingframeworkisaproblemthateveryresearcherofautomatedtestingor testautomationneedstoconsiderandsolve.
This paper mainly uses the knowledge of software testing, related courses of automatic testing and the theory of automatic testing framework. Combining with the analysis results of the popular automatic testing tools in the current market, it uses the efficient, concise and flexible Python language to realize an automatic testing framework based on selenium + python. The testing object of this framework is mainly function testing.
Inusingthetestframeworkatthisprocess,weneedtoimprovethemaintainability,reusabilityandaugmentabilityoftestscripts,whichisinstrumentalinreducingtheconsumptionoftestcosts,improvingtheefficiencyoftestexecutionandensuringthequalityofsoftwareproducts.
Keywords:
AutomaticTestFrameworkSeleniumFramework
PythonScript
图表目录
第一章绪论
1.1研究背景及意义
随着软件行业的发展,公司是越来越重视测试部门的发展,这就使得测试工作者更加的需要实力,所有对于自动化测试这一领域是一定需要涉及的,不光如此,自动化测试其本身也是很有价值的。
引入自动测试可以在不同程度上提高整个项目的测试效率,与手工测试一起保证软件产品的高质量。
身处这个互联网行业发展迅速的时代,对测试人员来说,随着技术的不断更新,是需要不断提升个人的核心竞争力,以期待符合企业用人需求和对自动化、性能、接口测试的硬性要求,以及对编码、数据库、服务器等综合应用需求。
总的来说,于这个时代软件、互联网行业的工作者来说,特别是测试工作者,对于自动化测试的学习和运用是一个提升能力的途径。
现如今可以辅助进行自动化测试的工具有很多,有商业化的,有开源性质的。
其中Selenium就属于开源的,可以很好的用于学习。
自动化测试在一个版本周期比较长且主要功能业务改变的可能性不大的项目中是非常有存在意义的。
在这样的项目中,首先,枯燥、重复的手工操作可以进行脚本化,用于避免人为因素影响测试的进展及质量,可以解放部分时间。
其次,对于一些软件,比如其功能比较全面、整体框架比较稳定,进行新版本发布时,这些软件的整体页面及其整体功能变化不大。
类似这样的软件迭代就比较适合用自动化测试框架进行测试,可以提高软件的可信度。
再次,它可以更好地利用资源,如工作日的晚上和每周的周末,可以用自动化测试来代替人工测试,使公司的资源可以被充分利用起来。
最后,在版本快速迭代的过程中,自动化测试的目的是为了保证产品的质量,而不是发现更多的Bug,多数的Bug还是需要手工测试才会暴露出来。
本毕业论文主要是利用软件测试知识、自动化测试相关教程和自动化测试框架理论,在结合对当前市场上流行的自动化测试工具的分析结果,使用高效、简洁、灵活的Python语言去实现一款基于Selenium+Python的自动化测试框架,框架以功能测试为主。
在使用该测试框架过程中,需要提高测试脚本的维护性、复用性和扩展性,有利于实现减少测试成本的消耗、提高测试效率和执行速度和保证其测试的产品的质量。
1.2国内外研究现状
本文研究基于Selenium+Python的自动化测试框架,在此也段落分别介绍Selenium、Python以及自动化测试的现今的发展及其历史起源。
Selenium是ThoughtWorks测试团队开发的。
最初,它只是一个名为JavaScriptrunner的简单测试工具,由JasonHuggins在2004年编写。
在后来的一系列发展中,逐渐成为了现在这样的一个开源、免费、独立的自动化测试工具。
出色的多语言开发特性、跨平台、跨浏览器的工作兼容性使得Selenium获得了许多研发团队的青睐[1]。
1991年,出现python编译器。
自从Python编译器出现以来,Python已经有了核心数据类型,如类、函数、异常处理机制、表、字典和基于模块的扩展系统。
Python的发展主要由Guido和他的团队以及社区进行推动的。
在Python2.0版本之后,Python的开发方法是完全开源的。
到现在,Python已经拥有了一个稳定的框架。
Python是一种编程语言,它围绕对象组织代码,支持多种编程模式,并自动回收内存。
Python的标准库(BatteryIncluded)非常强大和稳定。
正因为如此,Python已经开始扩展第三方包。
Python一直是一种美丽、清晰、简单的语言,因而被广泛使用。
第一代自动化测试通过硬件记录键盘输入,然后回放。
其测试脚本的维护是非常非常不容易的。
第二代自动化测试已经从硬件转换为通过软件录制/播放生成自动化的测试脚本,同时增加了检查点功能对软件进行自动化测试是否正确进行验证,自动化测试的整体范围比前身的范围要扩大了很多[2]。
第三代开始逐渐被称为测试框架,其功能是将脚本进行抽象化,使理解不了测试脚本源代码、完全不会编写测试脚本的人也会使用该工具来完成测试。
第四代MercuryBusinessProcessTesting:
关注的是业务需求。
1.3研究目标与内容
本文利用所学的软件测试基础知识、自动化测试相关教程和自动化测试框架理论,在综合分析当前市场流行的自动化测试工具,实现一个基于Selenium+Python的自动化测试框架,该框架侧重于功能测试。
在使用过程中,有必要提高测试脚本的可维护性、可重用性和可扩展性,从而降低自动化测试的成本,提高自动化测试的测试执行效率,以到达保证软件的整体质量的目的。
本篇论文的主要研究内容如下:
(1)研究和分析软件测试的基础知识、自动化测试的相关技术和自动化测试框架技术。
本文分析了当前市场上流行的自动化测试工具,介绍了Selenium自动化测试系列工具及其特点,分析了Selenium自动化测试的工作原理和实现机制。
(2)结合测试理论与实际测试需求,分析并定义基于Selenium+Python的自动化测试框架的功能和非功能需求。
(3)根据分析出来的需求点,设计和实现基于Selenium+Python的易于维护、易于扩展、可复用的自动化测试框架,以实现Web应用程序功能的自动化测试。
(4)应用与实践。
以校友邦为测试对象,设计一些测试用例,通过实现的框架进行脚本执行,并对自动化测试生成的测试结果报告进行分析。
1.4本文结构
本毕业论文章节结构及相应章节内容展示:
第一章绪论:
对本毕业论文的研究背景及意义、国内外自动化测试相关研究现状以及论文的整体结构进行阐述。
第二章自动化测试相关技术研究:
对自动化测试的理论、过程、框架和工具进行相关研究。
第三章自动化测试框架需求分析:
对测试框架的功能和非功能需求这两方面进行分析和叙述。
第四章自动化测试框架设计:
对基于Selenium+Python的自动化测试框架的总体架构进行设计,然后对框架涉及的所有功能和需要用到的测试输入数据进行设计。
第五章自动化测试框架实现:
实现基于Selenium+Python的自动化测试框架,包括开发环境的搭建以及各个功能和数据的具体实现。
第六章应用实践:
介绍基于Selenium+Python的自动化测试框架在真实项目中的运用,以及对测试结果报告进行简要分析。
第七章总结与展望:
对实现的测试框架其成果进行总结,以及对未来的展望。
1.5本章小结
本章是对自动化测试的研究背景和意义进行一个简要的概述说明,对本课题的研究内容和自动化测试在国内外的现状进行一个总的综述。
同时对本课题进行一个纲要介绍。
第二章自动化测试技术研究
2.1软件自动化测试概念研究
2.1.1自动化测试定义
自动化测试(AutomatedTest)是把机器执行测试代替手工测试的一种过程,即通过执行编写的自动化程序脚本来模拟手工测试的过程[2]。
根据需要,自动化测试可以包括所有的测试阶段,支持跨平台,并且与进程没有关系。
通常情况下,进行软件测试,都是先进行理解需求,在进行需求评审,评审通过后,开始编写自动化测试的整体测试计划、和用于自动化测试的测试用例编写,然后在通过自动化测试用例评审会议,评审会议通过后,测试人员才会正式的进行测试,前面的步骤只是介入测试和对正式执行测试的一些准备工作。
当进入执行测试阶段时,测试人员需要根据测试用例对被测系统进行测试,测试完成后,将分析测试结果并将其与预期结果进行比较,如果测试用例与预期相同,则判断为通过,需要将其按照正常的Bug提交流程提交到项目管理工具中,方便于项目开发人员进行Bug的修复。
在这个样的手工测试过程中是一个耗时耗力的工作,如此操作虽然对测试的质量有很高的保证,但它同时对人力、物力以及一些资源造成了浪费。
因此,为了节省各种资源(包括人力、物力、时间、硬件),提高测试执行效率和测试的质量,以及不脱轨于国家计算机信息化的发展,紧跟软件的迭代速度,自动化测试注入软件行业是一个必然事件。
自动化测试现在运用得比较多的三个地方是单元测试、接口测试,界面测试。
单元自动化测试是软件的数据处理层,是系统中可检测和验证的最小模块,在很大程度上,它将依赖于一些自动化测试的基本框架,例如JUnit,TestNG,Python的Unittest等;接口自动化测试是各种软件的另一个基本业务逻辑层,它直接用于全面检查和验证各种软件模块的初始化参数和返回数据,以及与系统和服务之间的数据交换。
常用的接口测试工具包括Postman(非常简单,操作简单,免费享受)、JMeter(开源社区,基本功能非常强大,免费享受)、LoadRunner(付费购买)等;UI自动化测试是对各种软件应用程序界面层进行测试。
测试中的其他大部分工作都相对集中在这里,因为用户基本都是与这一层进行交互,常见的测试工具有Robotframework、Selenium、Appium等等工具。
2.1.2自动化测试过程
在当下,进行一个项目的开发,测试与开发是并行的,都会同时介入项目,只是侧重点不一致。
自动化测试也是测试,从本质上来进与手工测试没什么不同,都是用于软件测试质量保证,只不过自动化技术的测试是利用自动化测试技术相关工具和代码自动构造输入,并自动检查结果的连续输出是否可以满足期望,手动测试要求执行测试的人员自己执行所有测试。
利用自动化技术进行自动化测试需要制定最终测试计划,深入分析测试的实际需求,并对用户需求进行评审,然后设计用于测试人员手动进行测试的测试用例,在其中挑选出一些手工测试用例转换为自动化测试用例,完成用例评审,根据需求,选取相应的工具进行搭建自动化测试的框架,框架搭建完毕就可以开始编写自动化测试过程中需要的脚本,在使用的测试脚本都编写完成并成功调试通过后,进行脚本执行然后生成自动化测试结果分析报告,并根据最终测试正式报告对最终测试的最终结果进行分析,并完整记录测试中的核心问题,追踪Bug,进行回归测试、执行测试脚本,根据实际情况结束测试,如图2-1。
这基本就是一个完整的自动化测试完成流程。
当然,用于执行自动化的自动化测试脚本是需要持续改进和优化的,这样做的目的是希望提高自动化测试脚本的可维护性、复用性和扩展性,有利于实现减少测试成本的消耗、提高测试执行的效率和保证软件质量的目的。
图2-1自动化测试基本流程
(1)测试计划制定
测试之前,制定一个总体方案(测试计划),在整个计划中必须写清楚测试的对象和目的、自动化测试的具体测试内容和具体会用到的测试方法、测试进度的详细计划和安排、测试所需的人力物力准备等。
一个好的测试计划可以很好的指导整个测试过程。
(2)对进行自动化测试进行需求分析
当被测系统满足其整体需求的变化不会很频繁,项目周期持续时间长、有生命力,最终的测试数据是全面的,并且用于自动化测试的测试用例和脚本的可重用性和可移植性非常强,并且被测试系统开发具有标准化和可测试性。
当公司本身具有自动化设备最终测试的相关前提条件和高质量资源时,此时就可以分析自动化测试的内容以及更多需求。
在此过程中,有必要定义自动测试的覆盖范围,测试用例和测试要使用的数据,并将其整理成文档,方便后续使用。
(3)设计用于自动化测试的用例
深入分析需求,然后设计可用的用例,设计用例需要注意其设计的测试用例是否覆盖了分析出来的所有的需求点,如若无误,则可以将其整理为测试用例文档。
当然,并不是所有设计出来的用例都适合用于自动化测试的事实,有必要从详细设计的用例中选择适合于自动化测试的用例,并将其转化为自动化测试用例脚本。
在条件允许的情况下,建议把一些参数信息(如:
登录、注册界面的用户、密码等数据)独立出来,形成一份测试数据,写入Excel,并将其放到实现的自动化测试框架中去。
(4)测试框架的搭建及测试脚本编写
自动化测试框架类似与软件架构,是需要明确在使用此框架使需要用到哪些文件、哪些结构,以及调用这些文件或结构的过程。
在编写脚本的过程中,将公共类进行封装,分别进行调用。
如果有需要,可以对一些数据进行参数化。
在脚本编写完毕后,是需要其编写的脚本进行反复不断的调试,避免框架本身的问题造成测试结果的失误,对于调试,一定要调试到脚本运行正常不会出错为止。
在脚本的编写以及对其进行命名时都需要注意其是否要符合规范,以方便进行统一的管理和维护。
(5)运行脚本,即执行测试
在此过程中会生成日志,也会有相应的问题记录截图和测试报告生成。
需要分析其结果,以便定位失败用例和发现缺陷。
在此过程中发现的Bug需要提交到相应的缺陷管理工具中,方便对Bug的跟踪。
待开发人员修复完成后,需要进行回归测试,如若通过则关闭,否则将会继续修改。
2.1.3自动化测试框架分类
应对于不同测试需求以及测试条件的测试框架也明显不同,不过大多数框架都是由基础模块、执行模块、管理模块和统计模块中的一个或多个组合而成[3,4,9]。
下面具体介绍几个常见的测试框架类型。
(1)模块化测试框架。
其优点是将测试脚本按照应用程序的功能模块进行封装。
当需要修改某个模块的时候,不会影响其他模块,提高脚本的独立性和可维护性。
各个模块可以进行组装或者被其他框架引用,提高脚本的复用性和拓展性。
(2)关键字驱动框架。
自身存在一个底层的关键字处理逻辑,用户通过输入合法的关键字就可以驱动测试任务的执行,是后期维护工作最小的自动化测试框架。
但此框架很难进行调试,因为它使用标准的外部数据源(如Excel数据表)读取信息脚本中的关键字。
(3)测试库框架。
测试库驱动是实现脚本和测试数据有内在逻辑的分离[5],这种分离与模块化框架的分离不同,它是按预设在工程中的许多个性方法并引用这些方法以完成测试任务的框架。
优点是脚本复用率高、后期维护量小。
(4)数据驱动框架。
数据驱动框架的基本思想是将最终测试数据与最终测试脚本分离,将数据文件放在外部的储存空间中,需要时再引入即可。
其优点是数据与脚本是分离的其可维护性提高。
(5)混合测试框架。
理论上,上述的框架都可以单独运行测试,但在现实的中问题多是复杂而多样的,单个测试框架完成测试很难覆盖全面,所以将以上四种测试框架实行按需组合形成混合框架,是比较完美的解决措施。
混合测试框架虽然其维护工作量大于单个框架,但其实用性也是最高的。
2.2软件自动化测试框架研究
2.2.1主流自动化测试框架研究
Robot框架是基于Python语言结构的开源项目。
它是关键字驱动的,有许多的测试库。
使用SeleniumWebDriver时,它支持系统中Web应用程序的自动化测试;当使用Appnium时,它支持移动应用测试(如Android),另外也支持数据库测试。
以及拥有许多的API外部设备接口,支持基本功能扩展。
Tellurium是用于web应用程序的自动化测试框架。
它是在Selenium的基础上搭建成立的,但它与Selenium还是存在很多的不同,例如,selenium有两种模式:
录制模式和回放模式,而Tellurium不是录制和回放模式,而是侧重于网页模块。
QTP是用于系统自动化测试。
QTP非常适合需要重复测试的测试模块。
它最常用于回归测试和版本升级为其他版本的最终测试。
QTP测试之前,需要还考虑怎样去测试需要测试的软件,比如测试要用的数据、函数和需要哪些操作都需要提前考虑清楚。
PhoenixAutotest是基于用Python+Java编写的自动化测试框架。
它涵盖了WebUI自动化测试所需的大多数基本功能封装。
2.2.2自动化测试框架设计原则研究
(1)最终测试框架和被测试项目需要相互独立。
大部分企业只有开发一个测试框架的精力,而被测试的项目则是多种多样的,这样就只能要求测试框架有能力去测试这些项目中的共同部分,而其他部分采用人工检测[5]。
(2)编写测试框架脚本时,应遵守开发代码所要求的可靠性、可扩展性、可维护性、健壮性等原则,特别注意的是尽量使各个部分都相对独立方便后期修改和维护。
(3)测试脚本语言与框架编程语言相适应原则。
脚本测试语言需要由测试项目的具体特征确定,这样才能避免测试项目迁移的导致大量需重写的麻烦。
2.3软件自动化测试工具研究
2.3.1自动化测试工具分类研究
随着电子科技的不断进步人们对软件自动化检测的需求越来越大,各类自动化测试工具应运而生,尽管功能与种类繁多但根据测试方法的不同可分为黑盒自动化测试工具、白盒自动化测试工具和测试管理工具[6]。
自动化测试的工具,大多数基本来自于MercuryInteractive(MI)、Segue、IBM/Rational、Compuware和Empirix等公司,其中占主流的自动化测试软件来至于MI公司。
常见的用于黑盒测试的自动化测试工具,如表2-1所示。
表2-1用于黑盒测试的自动化工具
工具
支持语言
简介
Robotframework
Python/Java
开源软件,支持关键字驱动,可以实现验收测试以及驱动开发和在短时间内完成关键字以及测试用例的编写,对测试自动化人员的编程能力要求较高。
WinRunner
Java
其主要功能是用于检验被测系统或软件程序是否如期运行。
LoadRunner
Java
该工具主要是通过模拟实际用户在系统使用过程中的操作行为和对实时性能进行监测,从而查找和发现问题出现位置和方式,并预测系统行为进行系统性能优化。
QuickTestProfessional
VB
该工具适合功能、回归测试,可以根据录播进行自动捕获、验证和重放用户的交互行为,有助于提高自动化开发效率
Selenium
支持多种语言
开源软件,可扩展性强,比较灵活,支持各种语言,可以集成到很多的开发工具中。
几种用于白盒测试的自动化测试工具,如表2-2所示。
表2-2用于白盒测试的自动化工具
工具
支持语言
简介
Jtest
代码分析和动态类、组件测试
C++Test
代码分析和动态测试
SmartCheck
VB
函数调用次数,所占比例统计以及稳定性跟踪
CodeReview
VB
自动源代码分析工具
常见的用于管理测试过程的管理工具,如表2-3所示。
表2-3用于管理测试过程的管理工具
工具
公司
简介
TeamManager
Rational
对测试的需求、测试的计划、测试的用例和测试的实施过程进行管理、同时可以对缺陷进行跟踪处理。
TrackRecord
Compuware
TestDirector
MercuryInteractive
WebLoad
Radview
用于性能测试
TestBytes
针对数据库测试
本课题研究的自动化测试框架主要是自动化功能测试即黑盒测试的,使用Selenium用于自动化测试,其优点有,完全开源、免费,具有很强的可扩展性,相对的灵活性,支持多种语言编程和改写,可以集成到多数开发工具中去。
2.3.2Selenium工具研究
Selenium是一款应用广泛的免费开源自动化测试工具并且能够使用多种语言进行编写,其主要由IDE、Grid、RC三大基本组件构成[7]。
其中RC是Selenium的核心组成部分,是可以为测试脚本访问应用的代理服务器,具体原理如图2-2所示。
不过在最新的Selenium3.0中WebDriver已经能够代替其工作;IDE是对脚本进行初步构建,可以通过录制来进行简单的脚本生成、并可以对生成的脚本代码执行简单的脚本编辑和灵活的操作步骤来回放其他功能;Grid测试辅助工具,可以可分布式执行测试。
图2-2Selenium-RC的原理