一种基于Selenium与Unittest的Web自动化测试框架
2021-09-23单攀攀
单攀攀
(上海维也知科技责任有限公司,上海201106)
0 引言
软件测试是为了提高软件系统可靠性,保障软件系统质量而存在。IEEE、ACM等组织制定了一系列的软件测试流程标准。Carnegie Mellon主要进行了基于关键字驱动模型自动化测试的研究[1]。伴随着互联网技术的发展和自动化测试工具与方法的不断完善和扩展,自动化测试技术越来越成为了当前软件工程领域的热门研究方向之一。
现今越来越多的企业应用在使用B/S架构[2](即Web),B/S架构解决了C/S架构存在的部分问题,不仅没有客户端的差异,而且用户只需要安装浏览器,不需要再额外安装客户端应用。假如应用的业务需求有所变更,仅仅将服务器端的应用程序进行更新即可。另外,客户端应用将不会受限于操作系统的区别,当前主流的浏览器往往在多种操作系统下都有对应的版本可供使用。
随着市场Web应用的不断扩充,Web平台的自动化测试或为软件自动化测试的主要组成内容,目前软件行业也在该方面取得了一些研究硕果。Throught Works公司研发了一系列开源的Selenium Web平台的功能测试工具集,普遍应用于各式各样的Web平台自动化测试,其中特性不仅具有方便扩展、可跨平台,还可支持多浏览器等。Selenium被诸多自动化Web测试框架所使用,最近几年来已有众多基于Selenium的Web自动化测试框架的研究成果逐渐被引起重视[3-4]。
在实际应用和实施过程中,自动化测试的框架与方法使用的越优良,其长期应用所取得的收益也就越显著。其中自动化测试的核心技术主要是设计与使用自动化测试框架,不适用的测试框架不能顺利开展良好的自动化测试,即造成人力成本输出,也不能保障产品质量。
目前许多Web自动化测试框架都是以Seleniun为基础实现的,在已有的Selenium框架上进行的进一步封装。目前已设计运营的Web自动化测试框架仍具有编写测试脚本代价高、不够稳定等缺陷。在本文中设计了一种基于Selenium与Unittest的Web自动化测试框架,且运用到实际项目里进行验证该测试框架的应用,在某种程度上提高了自动化测试的效率与稳定性。
1 Unittest与Selenium概述
Unittest[5-7]是一个基于Python自带的单元测试框架,常用来做单元测试使用。也经常应用到UI自动化测试和接口自动化测试中,用来管理和维护测试用例脚本。其中Unittest模块包含了如下几个模块:TestCase(测试用例),TestSuit(测试集或测试套件[8]),TestLoader(加载用例),TextTestRunner(执行用例)。能够组织多个用例去执行(可以把多条测试用例封装成一个测试套件,实现批量执行测试用例);提供了丰富的断言方法,方便对用例执行的结果进行判断;能够生成HTML格式的测试报告;使用Fixture功能可以减少代码的冗余。具体用例调用流程如图1所示。
图1 Unittes用例调用流程
Selenium为Web平台提供了一系列测试方法的测试工具。与其他测试框架不同的是,它是直接运行在浏览器之中,用户可以非常清楚地看到浏览器执行的每一步操作。工具的主要功能包括:测试与浏览器的兼容性,测试系统功能创建回归测试检验软件功能和用户需求。框架的底层是采用JavaScript模拟用户对浏览器的操作过程,测试脚本在浏览器之中的动作,直接从用户的角度来测试程序。它的特点是简单、易于操作,而且规避了浏览器兼容性问题。
Selenium[9-10]的核心是用JavaScript编写的。这使得测试脚本可以在受支持的浏览器中运行。Selenium负责执行从测试脚本接收到的命令,测试脚本要么是用JavaScript编写的,要么是使用一种受支持的编程语言编写的。Selenium测试工具的起源是2004年,由一些开源爱好者编写的JavaScript测试工具不断完善而来。发展到现在,已经成为了一个非常高效强大的开源测试框架。目前仍然有很多公司和个人在使用Selenium框架并且相当多的机构也继续为它提供支持。
其中Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素和功能模块的封装减少冗余代码,同时在后期维护中,若元素定位或功能模块发生变化,只需要调整页面元素或功能模块封装的代码,提高测试用例的可维护性。
2 基于Selenium与Unittest的Web自动化测试框架设计
2.1 自动化测试软件环境搭建
自动化测试软件环境搭建步骤下:
第一步:安装Python3软件,并添加对应安装目录到本机的环境变量。
第二步:Python3安装后默认会通过pip install selenium安装selenium2工具(pip.exe默认在python的Scripts路径下)。
第三步:浏览器与相应浏览器驱动版本的安装是Web平台自动化测试前提条件,注意事项路径中不要有中文。
第四步:PyCharm编译工具安装,进行编写脚本,具有极为智能的填充功能,提高脚本编写效率。依靠它进行智能代码完成,动态错误检查、快速修复和项目导航等。
2.2 自动化框架的设计流程
为了实现基于Selenium与Unittest的Web自动化测试框架,主要内容是4个基础模块设计,分别是页面元素定位,基本功能方法的定义,测试用例设计与测试执行生成报告模块。其具体设计流程如图2所示。
图2 自动化测试框架设计流程图
模块一:页面元素定位是UI自动化的主要内容之一,不论哪一种UI自动化测试框架,或者什么结构驱动,都需要针对某一个元素来操作,定位准确简洁是非常重要的。通过运用Selenium自动化测试项目开发实践的设计模式Page Object,提高代码和用例的可维护性。
模块二:基本功能方法的定义包括基础的截屏方法,邮件发送方法,查找最近的测试报告方法等,为后续测试用例设计与用例执行等提供方法支撑。
模块三:测试用例设计引入Unittest单元测试框架设计测试用例,精简代码脚本,也更便于相关测试人员理解测试用例业务逻辑关系。
模块四:测试执行生成报告,通过基本功能方法,利用Unittest框架中执行测试用例,生成测试报告,并发送最近测试报告给相关人员,对项目产品质量有一定的把控,进一步保障项目产品的质量。
3 Web自动化测试框架的应用
现以真实项目Web平台测试为基础,通过实行平台自动化用例的设计与脚本编写,对比框架使用前后的成本分析如表1所示。
表1 框架使用前后成本对比
在执行当中,该测试框架的测试优势比较显著,编写代码简便、易懂,脚本更易于维护。不论是冒烟测试,还是全量测试,测试成本均减少了50%,单用例的维护成本下降了60%。每个测试用例执行后,该测试框架采用截图方式保存本地,测试人员可根据结果截图,并对应日志和业务需求快速进行预览以定位问题,使得发现平台问题更直观。其中,每个版本测试的分析成本降低了75%,其缺陷发现率增加了近30%,数据表明通过使用该自动化测试框架,不仅减少了测试成本,还进一步提高了项目/产品质量。
具体应用样例功能的详细测试报告结果如图3所示。该HTML测试报告通过定时任务可自动发送邮件给相关人员,用于监控项目/产品执行情况,并通过测试报告分析,从而进一步提升了Web应用的平台质量。
图3 Web应用自动化测试XML报告详细结果图
4 结论
本文实现了一种基于Selenium与Unittest的Web自动化测试框架,并实际应用在项目产品自动测试中,有效节省了测试人员资源成本,提高整体产品迭代回归的速度,保证产品质量的稳定性。同时,随着测试集群环境与业务需求的复杂多元化,一方面需要统一完整的自动化测试框架,另一方面需要减少自动化测试框架研发的开支,都必须进行深入的探求与研究工作。