社区分享|杭银消费金融基于MeterSphere开展接口自动化测试
杭银消费金融有限公司(以下简称“杭银消费金融”)成立于2015年12月,是经中国银保监会批准,由杭州银行作为主发起人,联合滴滴出行、中国银泰等企业组建的持牌消费金融机构,注册资本为25.61亿元。杭银消费金融秉承“数字普惠金融”的初心,坚持服务传统金融覆盖不充分的、具有消费信贷需求的客户群体,以“数据、场景、风控、技术”为核心,探索消费金融新模式,为全国消费者提供专业、高效、便捷、可信赖的金融服务。
一、系统架构与交互现状
杭银消费金融经历了长期的高速发展,随着科技自研能力的不断提升和系统架构的不断升级,目前拥有上百个内部系统,这些系统之间存在复杂的调用关系,形成了庞大而错综复杂的业务链路(如图1所示)。同时,公司的金融系统与多个引流渠道和三方机构进行外部对接,进一步增加了系统的复杂性。
▲图1 杭银消费金融系统交互架构
在业务的高速发展期,由于内部系统相对复杂,杭银消费金融在软件高质量交付方面面临着一系列的难点和挑战,具体包括:
1.需求快速迭代,大规模回归测试成为常态
杭银消费金融的用户端种类非常多,用户入口多种多样,包括杭银消费App、消邦App、H5、小程序、公众号等。在持续交付的开发模式下,功能迭代频繁,由于所有入口的底层服务高度耦合,导致每接入一个新产品都可能会影响到其他已有产品,需求上线前面临大量的回归测试工作;
2.金融业务复杂度高,不同产品业务流程千差万别
由于当前各条业务线的业务模式和系统实现差异性很大,存在业务壁垒,各领域采用自动化测试资产离线管理的方式,之前存在测试脚本和数据存储零散、维护困难、跨系统用例冗余等问题;
3.缺乏全链路自动化测试工具
缺乏打通全域的链路级用例,跨系统数据校验不完整,进行全链路回归测试耗时耗力;
4.依赖外部的第三方机构,上下游测试存在数据依赖和环境依赖
测试阶段,在三方环境不通的情况下,需要Mock渠道、银行、外部数据等交互数据。
二、自动化测试发展路径
杭银消费金融的自动化测试进程大致可以拆分为四个阶段:
■ 第一阶段为系统建设期:各系统分别做自动化,虽然已经沉淀了很多提效工具,但是缺乏统一的规则,共享协同性差,难以沉淀;
■ 第二阶段为业务扩展期:建设统一的自动化测试平台,完成各系统自动化用例的统一管理和度量;
■ 第三阶段为流程完善期:自动化测试件在DevOps流程中全面落地,建设了完善的发布质量防护网;
■ 第四阶段为维护和探索期:在自动化基建全面落地之后,还需要不断与时俱进,探索提升交付质量和研发质量的前沿方法,并在公司内部落地。
目前,杭银消费金融的自动化测试进程正在从脚本化向平台化整合的过渡阶段。虽然脚本化的自动化测试往往更能体现出测试人员的代码编写能力和个人测试水平,然而脚本化的自动化测试存在着一些弊端:
1.工程化成本高,对测试人员的要求较高。工程的环境搭建、本地脚本编写以及调试这几环节都具有非常高的时间和人力成本;
2.非平台化自动化测试场景单一。由于测试环境和测试数据与脚本直接关联,而测试人员的编码水平参差不齐,编写的自动化测试脚本在测试环境及测试数据方面,很可能出现数据场景单一、覆盖范围有限等较大弊端;
3.自动化测试的测试经验无法及时沉淀。测试脚本里沉淀的能力也难以快速复用,一旦出现人员的流动变化,将直接导致测试工作的停滞不前,甚至中断;
4.缺乏统一指标度量各个系统自动化用例的完整性、稳定性和有效性。
三、自动化测试平台建设进程
1.自动化测试平台总体架构
围绕杭银消费金融的快速发展战略,以及“需求交付短平快”的原则,在技术资源有限的前提下,杭银消费金融的测试团队希望借鉴业界自动化测试统一平台化的成功经验,对其各系统的测试资产进行治理,采用自动化测试件统一管理和跨系统场景链路编排的方式,实现测试资产管理统一化、度量标准化,最终达成需求交付降本、提效和增收的目标。
经历了一年多不断的探索和尝试,杭银消费金融团队最终确定了其统一自动化测试平台的整体架构,并且在营销业务领域建立了创新试点,取得了非常不错的效果。
杭银消费金融统一自动化测试平台的整体架构图如图2所示。该平台通过构建自动化通用能力的方式来提升测试效率和项目交付质量,包括数据生成能力、用例自动化能力、质量流水线能力等。
其中,数据生成能力包括业务数据和通用数据生成,线上流量采集和脱敏;用例自动化能力包括接口自动化、场景自动化、UI自动化和自动化用例统一管理和度量、用例定时执行、报告自动生成等;质量流水线能力包括在DevOps流程中实现质量门禁,发布通过率度量、自动化持续集成等。
▲图2 杭银消费金融自动化测试平台总体架构
2.自动化测试平台建设进程
为了将业务快速接入统一自动化测试平台,测试团队花费了半年时间调研、分析和对比了几个主流的自动化测试平台和公司内部的自研平台。考虑到工具的易用性、存量数据的兼容性、功能可扩展性和后期的维护成本,杭银消费金融的测试团队最终选择了MeterSphere开源持续测试平台作为统一的自动化测试基础设施。MeterSphere开源持续测试平台的系统架构如图3所示。
▲图3 MeterSphere开源持续测试平台系统架构
MeterSphere平台提供的接口测试功能很好地契合了杭银消费金融自动化测试的需求。这一开源持续测试平台的主要优点如下:
① 用例编写可视化,降低测试门槛
MeterSphere开源持续测试平台用例编写可视化,易用性强,测试人员上手容易,有利于聚焦业务;
② 支持多种格式的接口集导入和定时同步
MeterSphere可以兼容多种协议,支持多种协议类型的API管理,包括HTTP、TCP、RPC等。适合对杭银消费金融的各域接口进行统一管理。MeterSphere还支持Postman、Swagger、JMeter等多种格式的接口用例集导入和定时同步,还可以通过插件打通IDEA与测试平台进行接口同步;
③ MeterSphere采用主流技术栈,方便二次开发
MeterSphere平台使用Java语言开发,采用前后端分离的架构,使用Spring Boot(后端)、Vue.js(前端)等常见的技术栈,与测试团队人员的技术栈相匹配,方便开展二次开发。MeterSphere在接口自动化和性能测试方面与JMeter保持一致,并在一定程度上对其进行了二次封装,使得测试操作更加简单、方便;
④ MeterSphere拥有丰富的插件体系,扩展性强
目前,MeterSphere开源社区对外提供各种各样的插件,比如支持发布流水线接入的Jenkins插件、支持工程中接口同步的IDEA插件、支持UI测试的Selenium插件等,甚至还支持用户开发各种自定义插件。
3.自动化测试落地DevOps
在整个项目研发流程中,杭银消费金融的测试团队希望在开发编码阶段,测试人员同时编写好接口测试用例,交由开发人员完成测试准入,通过后由测试人员进行最终的验收。而不是由测试人员去反复执行用例后再将结果通知到开发人员(如图4所示)。
▲图4 研发协作最佳模式
这看似简单的环节,之前由于没有统一平台的支持,只依靠Postman、Jenkins等工具维护用例脚本,在开发和测试之间想实现无缝对接是非常困难的。MeterSphere平台可以很好地解决这个问题,它将各域的接口管理、自动化用例管理集中在同一个平台进行管理,助力研发协作模式从串行到并行的升级,实现测试左移,最终提升研发效率。
此外,为了在提效、回归时减少手工的测试执行,最终必然会将场景自动化加到整个DevOps流水线中。MeterSphere的Jenkins插件可以方便地将自动化用例集作为一个质量门禁,添加到现有的发布流水线中,通过持续构建和持续测试的方式来保障业务的稳定性。
▲图5 杭银消费金融质量发布流水线
四、自动化测试实践与成果
1.接口自动化现阶段成果
杭银消费金融的测试团队通过MeterSphere的接口自动化功能,实现了对包括授信、支用、还款等在内的核心业务系统内业务监控的100%覆盖。目前,杭银消费金融已经在MeterSphere平台上通过树状分级分组管理的方式沉淀了1000多条单接口用例,大约100个多个场景用例,覆盖15个核心系统,涉及6个核心业务。
▲图6 杭银消费金融自动化用例大屏
2.营销域自动化测试最佳实践
测试团队选择营销域作为MeterSphere在杭银消费金融的自动化样板间有以下几点原因:
① 营销领域需求短平快
从2020年开始,在公司快速发展战略的指引下,营销领域需求短平快,在技术资源有限的前提下,亟需提升研发效率;
② 营销领域的需求回归测试覆盖范围广
营销系统覆盖杭银消费金融所有的业务场景,包括自营、渠道联营等。公司科技部的业务系统则相互独立,但底层共用一套信贷系统,每块业务的变更都可能会影响到信贷的主流程。由于当前自营、渠道联营的业务模式和系统实现差异较大,存在业务壁垒,回归测试资源协调难度比较大;
③ 营销系统的变更“牵一发而动全身”
营销活动贯穿整个信贷流程,包括支用、还款等,每次上线新功能都需要对支用和还款主流程进行回归测试;
④ 营销玩法多样,活动配置种类非常多,场景覆盖困难
营销优惠和参与条件是业务设计营销玩法的核心。设置端需对条件和优惠充分开放定制,对活动的配置项做笛卡尔积会产生大量场景,人工覆盖验证不现实。
▲图7 杭银消费金融营销域业务架构
针对营销领域的业务形态,杭银消费金融的测试团队采用数据驱动的方式,通过构造批量场景数据来进行用例膨胀,最终实现覆盖所有营销场景的主流程自动化回归。
2.1 营销管理端:采用数据驱动的方式实现活动配置自动化
虽然营销管理端活动创建的流程很长,场景种类多,但是流程是相对固定的,可以通过数据驱动的方式批量生成场景用例,通过自动化的方式实现活动配置和更新(如图8所示)。
▲图8 MeterSphere数据驱动方式
以下是杭银消费金融在MeterSphere平台创建数据驱动的场景用例的具体步骤。
第一步:构造场景数据
定义场景用例所需的参数和预期结果,将数据保存在CSV文件中,每行代表一个场景用例。
▲图9 MeterSphere场景用例数据文件
第二步:场景用例编排
使用条件控制器进行场景用例编排,可以一键执行场景文件中的所有用例并与文件中的断言进行比对,不同的条件路由到不同的场景用例。
▲图10 MeterSphere场景用例数据文件
▲图11 活动管理端创建链路
2.2 用户端:采用链路编排的方式实现用户端的用券链路回归
针对用户端的优惠使用链路,目前对于同类别的活动信贷系统与营销系统使用同一套流程,可以对信贷流程(支用、还款)进行链路编排,实现用户端的用券链路回归。
以自营业务的支用场景为例,网关层发起借款确认请求之后,下游的系统,比如信贷、资产、营销、支付、账务等会经过一系列调用后,将支用金额和状态以异步返回的方式返回给网关层。在这一过程中,除了接口调用之外还存在系统间的消息传递、数据持久化保存等步骤。所以,对于分布式系统进行一次全链路调用,除了验证业务层接口的返回结果之外,更重要的是验证系统之间的数据一致性、数据的正确性等。
图12展示了支用流程的全链路用例,杭银消费金融的测试团队将营销活动抽象成一个通用的节点,通过条件控制器可以路由到不同的活动链路。一条用例几乎可以覆盖营销用户端的所有场景。
▲图12 杭银消费金融自营业务支用链路场景用例编排
原本进行一次支用操作需要进行8次接口调用和10次SQL查询,涉及跨系统的接口调用、跨库的数据查询、多分支条件执行和循环等待等操作。比较有经验的测试人员执行一次这样的场景用例大概需要15分钟时间,自动化场景测试一键触发只需要4分钟左右时间(如图13所示),通过一次编排,可以多次复用。并且通过数据驱动的方式,一条编排好的链路可以复用到多个场景中,测试效率实现了指数级提升,大大节省测试的回归成本。
▲图13 杭银消费金融自营业务支用链路场景用例执行结果
2.3 营销域场景自动化现状
杭银消费金融营销域的自动化场景用例已达到90%以上,覆盖了营销活动、营销工具、触达渠道、人群圈选等模块(如图14所示)。
▲图14 杭银消费金融营销域自动化用例管理
3.自动化测试平台后续规划
统一自动化测试平台已经在杭州消费金融的营销领域和金融中后台全面落地,并且取得了非常不错的效果。杭银消费金融的测试团队计划在2023年梳理分析所有领域的系统,将其自动化测试资产迁移至MeterSphere平台,并且进一步进行各域的自动化度量以及版本质量度量。
五、自动化测试规划与展望
在全面实现自动化测试平台化之后,杭银消费金融还将建设一个更加完善和智能化的自动化测试体系,具体包括:
1.测试数据生成智能化
通过数据驱动测试用例,测试流程与测试数据分开管理。打通杭银消费金融的数据工厂与MeterSphere自动化平台,实现数据驱动的自动化测试;
2.契约测试探索
杭银消费金融产品微服务架构体系日益庞大,为了确保微服务之间足够兼容及通信协议调度正常,后续将引入契约测试,实现问题的快速定位和测试前移;
3.无人值守、主流程巡检
主流程定期巡检,实时监控需求变更后所发现的问题,做到科技部的防控自闭环。
相关文章:

社区分享|杭银消费金融基于MeterSphere开展接口自动化测试
杭银消费金融有限公司(以下简称“杭银消费金融”)成立于2015年12月,是经中国银保监会批准,由杭州银行作为主发起人,联合滴滴出行、中国银泰等企业组建的持牌消费金融机构,注册资本为25.61亿元。杭银消费金融…...

阿里云2核2G云服务器99元一年!3M带宽的ECS云服务器哦
经济型e实例2核2G3M带宽优惠价99元一年 除了轻量服务器配置,经济型e实例2核2G3M配置也成为了用户关注的焦点。这款云服务器以99元一年的价格,适合个人和普通企业用户搭建网站、开发测试等需求。 我买的是阿里云这款99元的云服务器,活动参与地…...

【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)
硬件平台: 1、firefly安装Ubuntu系统的RK3588; 2、安装Windows系统的电脑一台,其上安装Ubuntu18.04系统虚拟机。 参考手册:《00-Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN》 《RKNN Toolkit Lite2 用户使用指南》 1、文…...
Dockerfile运行容器不立即退出
1. 问题描述 运行容器结束,docker container立即退出。 2. 解决方案 在dockerfile中,添加如下命令, ENTRYPOINT ["tail", "-f", "/dev/null"]...

基因检测技术的发展与创新:安全文件数据传输的重要作用
基因是生命的密码,它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展,我们可以通过对基因进行测序、分析和解读,更深入地认识自己,预防和治疗各种遗传性疾病,甚至实现个性化医疗和精准健康管…...

Flink SQL自定义标量函数(Scalar Function)
使用场景: 标量函数即 UDF,⽤于进⼀条数据出⼀条数据的场景。 开发流程: 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数,名称必须叫做 eval,eval ⽅法签名必须是 p…...

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象
process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例,因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…...

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地
11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…...

竞赛 车道线检测(自动驾驶 机器视觉)
0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
128. 最长连续序列
这道题最简单的想法就是排序计数,但是复杂度为O(nlogn),不符合题意 于是采用哈希表的方法 将所有数字存放在哈希表中,然后开始逐个寻找。 比如当前遍历到x,如果x-1也存在哈希表中,那就从x-1开始遍历最长连续序列&#…...
设计模式-设计原则
文章目录 设计模式-设计原则单一职责原则开闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 设计模式-设计原则 单一职责原则 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 有时候类的功能并不…...
MongoDB基础运维
mongodb的基础概念介绍 database #数据库 collection #集合,类似于mysql中的表 filed #类似于mysql中字段 document #每行的记录 连接客户端 mongo ip:port 例如mongo 127.0.0.1:27017 mongo客户端的命…...

侧击雷如何检测预防
侧击雷是一种雷击的形式,指的是雷电从建筑物的侧面打来的直接雷击。侧击雷对高层建筑物的防雷保护提出了更高的要求,因为一般的避雷带或避雷针不能完全保护住建筑物的侧面。侧击雷可能会对建筑物的结构、设备和人员造成严重的损害,甚至引发火…...

检索搜索信息能力
(一)搜索工具的选择 谷歌 > 微信搜一搜 > 抖音等短视频 > 百度 (二)搜索方式 一,搜索内容的分类 信息类学习类工具类 二,谷歌浏览器的搜索技巧 1、“搜索内容” 限定完整出现的词 如下图搜…...

设计大咖亲授:Figma中文环境设置全攻略!
作为UI设计师,你一定很熟悉Figma,Figma是一款专注于UI/UX设计的在线协作工具,使用非常高效方便,不需要下载和安装。它只需要通过浏览器编辑,在国外很受欢迎。但是Figma对于国内的小伙伴来说,使用Figma有一定…...
华为Hcia-数通学习(更改策略)
方法:书籍视频题目训练 书籍:华为HCNA网络技术学习指南。 视频:网络工程师学习路线_哔哩哔哩_bilibili 有过一点基础。考软考网络工程师的时候做了大量笔记,回去复习了一遍。现在准备找工作了,开始学习华为认证的网…...

数据校验:Spring Validation
Spring Validation概述 在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦…...
CSS怎么选择除了第一个子元素外的其余同级子元素
使用 CSS 的:not()伪类选择器和:nth-child()伪类选择器 要通过CSS的代码选择某一个元素的除了第一个子元素外的其余的跟第一个子元素同级的子元素,可以结合使用CSS的:not()伪类选择器和:nth-child()伪类选择器进行选择。大致的语法如下: .parent > …...

Mac下eclipse配置JDK
目录 一、配置JDK,需要电脑下载Java并且配置环境 (1)、左上角找到“Eclipse”-->“Preferences...” (2)、找到“Java”-->“Installde JREs”-->界面显示电脑所安安装的Java;若没有需要点击“Add”进行配置 ①、选择“Standard VM”--&g…...

基于springboot实现体育场馆运营平台项目【项目源码】
基于springboot实现体育场馆运营管理系统演示 系统开发平台 在该数码论坛系统中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...