Time will tell(时间会证明一切).
前言
本文会以一个web端的UI自动化测试框架设计为例。在进行自动化框架设计之前我们首先要明白几个问题:
(1)什么是自动化框架?
(2)设计的时候应该注意什么原则?
(3)然后该怎么做?
什么是自动化测试框架
1、框架
特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。
框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。也就是说框架本身不解决特定的问题,它是通过扩展的各种组件或者工具来解决问题,并且它可以方便的添加或者修改部分组件的功能。
2、自动化测试框架
拆分来看其实就是三个方面,自动化、测试、框架,什么是框架上面说了,还有就是它能执行测试,而且还是自动化的,所以框架的各个组件的主要功能就是围绕着如何自动化如何执行测试展开的。
这里可以把框架的各个功能称作模块,那我们来看看都需要那些模块,需要一个基础模块,主要是怎么实现脚本编写,管理模块,主要的行为是持续集成,定时执行、case管理,统计模块,主要是发送测试报告,统计分析。
3、总结
自动化测试框架的定义就是:把在自动化测试过程中用到的一些功能或者工具,分装成各个模块,包括如何进行自动化脚本编写以及分层功能的基础模块,进行持续集成、定时任务的管理模块,发送测试报告、进行测试结果统计分析的统计模块等,将这些模块组成一套可重用的骨架。
自动化测试框架的设计原则
通用性:能够在各种各样的系统和平台都能够使用;
易维护性:能够把我们的数据、用例、框架的实现进行独立的维护,能够在实现完善的过程,快速的定义到维护的点,而不对框架的其他功能造成影响;
定时处理:能够在指定的时间执行;
持续集成:当被测程序和测试代码有更新能够自动执行;
调试:可调试行强;
测试结果:测试报告、测试数据的统计分析;
框架的设计思想
可以把自动化测试框架主体分为两部分,一个是内部框架,一个是外部框架,内部框架就是我们自己实现的测试框架代码,外部框架就是抛开我们实现的核心代码,要达到自动化测试框架设计原的一些内容时用到的一些第三方工具。
外部框架
主要是指以webdriver为核心,辅以外部第三放框架和工具。用以实现持续集成、自动部署、脚本执行、远程调用、报告优化、邮件发送导等功能性框架,实现自动化框架设计原则的一些外围的组件。
内部框架
也就是分层框架,目的在于更好的优化和管理测试用例,更便捷的进行数据、元素、脚本的维护和更快速的创建新脚本
自动化测试框架设计思路
1、通用的外部框架实现逻辑
maven或者tox-自动编译,执行TestNG或junit,集成邮件发送等。
TestNG或Junit、pytest,调用webdriver或者发送请求的方法,执行自动化测试用例,规范自动化测试脚本。
selenium脚本或者接口用例脚本。
reportNG或者allure报告优化模板。
main 自动以html邮件通知或者Jenkins发送邮件。
2、内部框架
层架框架-也就是代码结构优化,根据具体的业务和需求可以大致分为以下几层,有时并不需要下面所有的层次,选取合适自己业务测试的就行。
TestCase层,执行的用例脚本。
Task层,公共业务分装,是其他的项目不需要的,只和当前项目相关,比如公共登陆、搜索等业务。
utils层:与业务无关的方法,比如数据驱动-也就进行数据文件的读写、浏览器操作、元素定位方法等进行封装。
page层或po层:页面层,页面层主要维护某一个页面的所有元素,对页面的操作、对元素的操作以及和其他页面的交互,业务其实就是一个元素到另一个元素或者一个页面到另一个页面,这就和task层有点重复一般有一个就可以了。
element层:公共元素或者组件的维护,或者自定义组件封装
data层:数据存储
properties层:配置文件、全局变量
絮叨
在自动化测试的学习之路中,我也曾无数次彷徨和迷茫过:
1、想学自动化测试,而不知道该怎么学?
2、想转型自动化测试,以及技术提升,却不知道该怎么做?
3、自学自动化测试过程中遇到问题,却无处可闻,始终停滞不前?
4、请教同事碍于面子或同事有所保留,导致学习被动?
5、想系统地了解和学习自动化测试,却无从下手?
6、想系统了解web自动化测试在企业中如何落地使用,却不清楚自动化测试流程?
我深深体会过没人带,没人问的感觉,我把自己学习过、实际工作中使用的技术、自学方法、心得、踩过的一些坑以及面试题分享在了175317069群文件夹中。同时群里也有很多技术同行及行业大佬,平时偶尔会交流一些技术问题,也有不定期的软件测试资料链接发放。