
01 平安普惠自动化测试平台建设之路
作者介绍
吕三 资深测试开发专家,在测试工具平台研发、推广应用等方面有丰富的实战经验。就职于平安普惠,负责平安普惠的自动化测试平台建设,专注于自动化测试效率的提升,自动化测试的实施、落地和推广以及相关标准的制定,同时兼任中心培训讲师,负责自动化测试相关的内训。
案例综述
要打造一个供零代码基础的测试人员做自动化测试的可配置平台,我们要解决的问题有如下两个。
1)降低自动化测试的门槛。由于现有的主流自动化测试工具都要求测试人员有一定的编程基础,因此自动化测试门槛比较高,系统难以维护和管理。
2)提高自动化测试的效率。将频繁用到的自动化测试步骤和操作封装为组件,使得只需进行界面操作,即可编写和执行自动化测试案例。
案例背景
1)传统开源自动化测试工具学习成本高,需具备一定的代码功底,不适合大团队全员开展。
2)开源工具案例管理困难,人员变动交接成本高。
3)开源工具难以集成对接公司内部其他平台,不适合开发定制化需求。
4)自动化测试实施效果分析困难,不便于过程管理。
案例实施
1.平台概述
(1)平台功能
平台功能包括权限管理、基础信息管理、案例管理、日志精准分析、一键造数、无人值守、报告分析等。
•权限管理:用于控制用户登录,创建、更新、执行自动化测试案例,创建、更新定时任务的权限,降低自动化数据被篡改的概率,即使被篡改也有迹可循。
•基础信息管理:自动化测试需要配置的基础信息包括系统信息、环境信息、接口信息、版本信息。不同的版本对应不同的环境,平台会根据选择的系统和版本得到其对应的环境,再去调用相应环境的数据库或接口。
•案例管理:包括版本案例和自动化案例库,二者都用于存放配置的自动化案例数据。区别是,版本案例是针对版本需求特性而建的测试案例,在版本上线后,需要将版本案例中的测试案例同步至自动化案例库中。所以自动化案例库是全量、综合的案例库。
•日志精准分析:测试人员只需使用一个关键字,即可一键查询该关键字所属业务流程中所有系统的日志信息,可用于快速定位错误。
•一键造数:提供界面化的造数页面,选择需要造数的字段信息,一键生成所需的测试数据。
•无人值守:提供定时任务功能,可在无人值守时自动执行测试案例,并将案例执行结果以邮件形式发送。
•报告分析:定制化展示报告所需的自动化测试数据,用于分析自动化测试的效果。
(2)平台技术方案
平台采用了分层开发的模式,包括用户操作层、服务层以及数据存储层等。
•用户操作层:使用Bootstrap、JsTree、H5、CSS3、AJAX等技术,实现Web界面化的展示,将测试案例中重复性的、公共的部分提取出来,组装为通用功能,并界面化展示出来。
•服务层:使用Spring Boot、SpringMVC、Spring、MyBatis、Quartz、HttpClient、POI、ActiveMQ等技术,将整个平台分为八个服务,每个服务对应不同的功能。这八个服务分别是权限服务、任务调度服务、案例执行引擎、接口服务、数据库服务、日志服务、文件服务、应用监控服务。这样设计的优点是可以按需分配,便于维护。
•数据存储层:用Oracle数据库存储数据,Redis缓存数据,并用MyBatis进行二级缓存。
2.实践应用
(1)公共函数
将测试案例中通用的、重复的、公共的测试案例部分提取出来作为公共函数,单独配置,达到一次配置、多次使用的目的。
需要使用公共函数时可在版本案例和自动化案例库中搜索关键字,选择相应的公共函数名称进行引用,也可以对接到其他平台,直接进行调用。
(2)八大组件
平台的测试案例分为案例、节点、组件三个层级。案例代表一个测试流程,节点表示测试流程中的每个步骤,组件表示每个步骤中的具体操作。组件是案例中的最小单元,也是案例中最重要的一部分。
八大组件包括接口组件、数据库组件、公共函数组件、流程控制组件、变量组件、函数组件、日志组件、断言组件。将功能组件化管理,灵活组装,可以覆盖各种测试场景。
1)接口组件:针对接口测试中的各种场景进行设计,支持HTTP、HTTPS协议,可进行上传文件、断言检查、按指定规则轮询、获取接口返参等操作。
2)数据库组件:针对测试中数据库操作的各种场景进行设计,支持Oracle、MySQL、PostgreSQL、MongoDB,可进行数据库的增、删、改、查操作,可配置数据库轮询、进行结果断言、提取数据库查询结果。
3)公共函数组件:引用用户已经配置的公共函数实现流程复用,简化案例的配置过程,节省案例的配置时间,便于维护案例。在案例中引用公共函数时,后台会根据该公共函数ID去提取保存的公共函数信息、节点信息、组件信息,执行案例服务,从而去执行选择的公共函数的测试流程。
4)流程控制组件:包含IF控制器和循环控制器,控制器里可嵌套其他组件,以此实现复杂案例场景的配置。
5)变量组件:支持对各种数据类型的变量进行处理,包含自定义变量名和值、变量运算、字符串截取、URL编码、URL解码、JSON转义、变量提取、提取list长度、提取list元素、日期相减、字符串切割、小数四舍五入等功能,用于处理各类型的测试数据。
6)函数组件:支持常用函数方法的直接调用,包含生成身份证号码、生成手机号、生成姓名、生成随机数、生成银行卡号、加密变量、生成时间、生成环境信息、生成案例执行方式、生成版本信息等,用于生成各类型的测试数据。
7)日志组件:支持用户在案例调试及执行中输出任何信息,提高案例的维护性和可读性。
8)断言组件:支持配置断言,提供多种断言方式以应对不同断言场景,包含等于、大于、小于、大于等于、小于等于、不等于、无序对比、包含、不包含。
(3)接口自检
接口自检功能属于接口组件,依据案例分解算法智能检测接口参数的合法性。
首先需要填写监测的接口信息,包含接口路径、入参、必传性、参数类型、枚举值、字节长度、预期值、异常值。然后保存案例信息,点击执行,案例分解引擎会根据案例分解算法智能检测正常场景、异常场景、枚举值、边界值,案例执行服务按照规则去执行案例,最后生成接口自检报告。接口自检报告可用于查看各种校验场景及结果。
接口自检功能覆盖场景多、手工重复少,可提高接口测试的效率和质量。
(4)断点续跑
将失败案例的节点、组件信息都序列化地保存至数据库中,当执行断点续跑时,再从数据库中读取断点数据进行反序列化恢复,按序提取ID及关联数据。断点续跑的优点是可以重复利用数据,避免数据浪费;避开环境问题,执行更为高效;可多次执行,数据可持续。
(5)无人值守
使用Quartz和HttpClient技术,实现配置定时任务的功能,以达到无人值守的效果。无人值守可配置重试机制,可配置是否重试、重试方式(从头开始执行或断点执行)、重试次数、重试间隔时间,支持发送邮件及定时任务报告。
(6)一键造数
在选择造数模板后点击“开始”按钮,即可实现一键造数,并且支持实时查看造数日志、断点续造、并发造数等功能。
(7)日志精准分析
首先配置基础信息,包括日志环境名、日志文件地址。然后配置系统的链路关系,配置系统查询日志的关键字、日志异常关键字以及日志展示条件,最后查询日志。平台会将所有的配置信息串联起来,根据生成的系统链路关系和用户输入的系统关键字查询链路上所有系统的日志。
日志查询结果会按链路关系倒序展示。在调用链最末端的系统,展示在结果页的最前面。日志中会高亮展示查询日志的关键字以及异常关键字,便于快速定位报错系统,发现问题,减少定位问题的时间,节省沟通成本。
(8)开放性平台
自动化测试平台对外提供了丰富的OpenAPI,可以被第三方工具平台调用,实现指定案例流程的执行。其他平台也可以通过前端界面或者后端接口调用平台提供的OpenAPI实现功能共享。
(9)效益报告
平台自动统计数据,实时展示自动化效益报告,包括自动化覆盖率、节省人力、案例数、缺陷数等信息。多维度数据展示,全方位分析自动化实施情况,可以在数据展示、趋势图、柱状图之间随意切换。
案例总结
自动化测试平台降低了自动化测试的门槛,便于大型团队的推广使用。自动化测试平台实现了自动化测试配置化,无须写代码,只需在页面进行配置即可完成自动化测试案例的编写。
从本案例中我们可以得到如下启示。
1)不盲目跟随,要合理选择,打造符合自身需求的工具平台。
2)技术无须“花里胡哨”,能产生价值效益的技术就是好技术。
3)应更多站在一线用户的角度考虑如何设计工具平台。
4)保持好奇心,持续创新。