面向金融业务的用例自动生成
如果无法正常显示,请先停止浏览器的去广告插件。
1. 面向金融业务的用例
自动生成技术
--
蚂蚁集团
王铎成
2. 讲师简介
蚂蚁集团-技术风险部 高级技术专家
2015年加入蚂蚁,专注于测试技术研发领域
先后负责过工具效能、资金安全风险运营、智能测试等专项能力,
目前主要担任蚂蚁测试智能引擎产品化研发负责人。
ee.msup.com.cn
3. 内容大纲
金融业务测试背景和特点
• background
当下测试困境和方向
• problem
智能化用例生成初探
• solution
案例剖析
• demo
未来方向
• future
ee.msup.com.cn
4. 前言 - 伴随架构升级的测试演进之路
技术架构演进路线
一代
集中式
二代
分布式
三代
自研体系
四代
云平台
五代
混合云原生
蚂蚁
生态
全球化
hybrid
DevOps / CI /CD
敏捷
稳定
月均代码行(万行)
安全
系统内设计复杂
系统间交互复杂
每年50%+增长
智
能
化
测
试
系
统
复
杂
度
传统测试方法
2019
2020
2021
过去
ee.msup.com.cn
现在
未来
测
试
覆
盖
度
5. 前言-测试演变进程
测试产品平台
测试核心服务抽象
赋能生态
开放集成
功能
测试
回归
测试
预发
确认
研发环境
支付服务
客户服务
余额充值 余额宝充值
集分宝充值 预付卡类充值
注册
红包发送
亲密付准入
认证
手工
优惠卡券构造
花呗准入
家庭宝准入
登陆
账户
产品交付验收
测
试
管
理
老场景回归
单元/
接口
交易创建
PC付款
全链路
UI
无线付款
Mock中心
ee.msup.com.cn
服务化
底层能力
数据工厂
模型仓库
持续集成
周 天 小时
手工测试 自动化工具 开放平台产品
智能化
6. 1行代码引发的故障
大众高频A、B、C支付场景
ackMessage.getResponseContext()
是json报文
+
+
+
+
小众低频D支付场景
ackMessage.getResponseContext()
是xml报文
// 特定的结果字段,需要在收到异步回执时取出发给下游XXX系统
MapUtil.putIfNotBlank(
payOrder.getResponseContext(), ORDER_ID,
JSONUtil.toMap(ackMessage.getResponseContext()).get(ORDER_ID));
(代码已脱敏)
代码哪里有问题?
代码本身没问题
ee.msup.com.cn
链路上下游调用复
杂
场景未充分测试
7. 金融业务测试困境
• 测试场景复杂性
分布式事务状态多样/账户状态多样
/记账类型多样/记账金额多样/并
发/幂等/兼容/……
• 测试流程复杂性
DB数据准备/上下文初始化/参数准
备/外围mock/接口调用/结果验证
/数据清理/……
• 测试验证复杂性
接口返回/远程调用/异步消息/DB
变更/日志数据/异常对象/……
当前痛点
分析遗漏
• 测试分析经验难以传
• 承
场景覆盖率缺失
覆盖遗漏
•
•
代码覆盖100%≠没有 • 测试占比50%
bug • 单笔业务链路系统节
行/分支覆盖评价指标
单一
ee.msup.com.cn
效率低
点300+、调用上千次
8. 解法
业务图谱沉淀
业务知识沉淀,结构化质量风险数据图谱
APP
分母
挡板
app A
分母
挡板
app B
分母
分层回归
老业务充分度执行
问题单元化隔离
ee.msup.com.cn
内部
对象
挡板
app C
DB存储
外部请
求
消息
稳固底盘
支撑业务迭代创新
动态
配置
接口返回
场景推导
新业务智能分析推荐测试
大数据沉淀业务图谱
9. 整体方案
业务知识图谱沉淀
大数据用例生成
场景分析推荐
用例映射
自动特征提取
调用隔离
依赖提取
场景用例
跨环境
人工经验
线下
业务融合 本体建模
图谱构建 元素搜索
生产
跨部署
数据可视化
信息抽取
入参/db/缓存
/输出
多
端
适
配
知识映射
ee.msup.com.cn
参数推荐
Mock生成
特征匹配
变异生成
智能引擎
代码分析
算法引擎
运行基线
值域分布
场景
引擎
变异生成新用例
统一注入框架
数据引擎
数据服务
变更影响
近端依赖/外
部依赖/调用
特征
多维画像适配
数据基线
分层模型
业务时序
区域机房
知识融合
画像基座
rpc/http/消
息/回调
要素关联 代码形态
全局机房
城市机房
底
座
能
力
业务入口
代码
领域结构
用例
数据字典
灰度
模型中心
值域
业务充分度 四维分析 链路下探
业务图谱 业务模型 要素决策
数据血缘 字段关联 知识融合
数据脉络
桩点推荐
10. 1. 业务测试图谱构建
离散业务知识点
(散点输入)
业务先验知识约束下的知识提纯 标准化业务测试模型
(建模)
(KG关联推导)
XX业务场景
业务
标识
外部API
订单合法状态
关联
账户
影响
核算
报送
影响
金额
币种
属性
.....
.....
.....
ee.msup.com.cn
变量
传递
路径
场
景
实
体
挑
选
关
联
规
则
约
束
编
码
协
议
约
束
依
赖
约
束
余额
算
法
挖
掘
•
•
•
场景分析
用例分析
编码分析
资金安全
支付限额
•
•
基线核对
水位监控
外部依赖API
规则
DB依赖
业
务
知
识
输
入
测试分析
订单
交易
工具
关联
单据
应用
实体(Entity): 余额, 限额, 订单
属性(Property): 配置, 规则
关系(Relation):
支付限额 -> 限制 -> 余额
余额 -> 支付 -> 商城订单
值(Value):
限额 -> 10000元
订单合法状态 -> 待支付
风险挖掘
•
•
•
容量风险
稳定性
变更风险
11. 1.1 业务知识图谱案例
用例图谱落地数据案例
业务知识查询
图谱探索
模型类型
辅助测试分析
•
系统
system
字段取值
factorValue
factorValueType
字段名
Api
Method
inputArgs
returnArgs
methodKeywords
declaredSystem
mockType
ee.msup.com.cn
参数类型
factorDetailNa
me
factorEndName
argType
argDirection
接口方法
字段及取值的
明细信息
图谱实例ID
bizKgModel
InstId
业务语义 调用链路 用例ID
bizMeaning Invoking
Chain caseId
实例
➢ 图谱语义标注
➢ 专家知识沉淀
➢ 新业务场景下用例推荐
12. 2 大数据充分度用例生成
单应用回归模型
充分度分母度量评价
标准化用例输出
回放能力
mock规则生成
ibatis cache random
近端 异步 rpc
调用链路
drm
Mock基线种类归类-静态分析识别
累
积
概
率
分
布
规则建模
Mock规则产出
系统自动录制
流量
录 百分比
制
模
式 客户端
安装
业务
特征
业务
分布
服
务
流
量
采
集
决策要素:
产品
业务
渠道
…
全自动
场景数据生成
其他:
sequence
datetime
userid
…
全自动
依赖数据分析
算
法
分
析
变量值域宽度
链路分析模型
•
循环调用压缩
•
时序层次提取
•
频繁模式挖掘聚合
规则
下放
进程
关联
链路特征刻画
特征提取
决策要素模型
•
值域宽度
•
存储层次
•
随机数/日期等模板过滤
无侵入拦截lothar
container
businessClas
s
算
法
框
架
businessCla
ss$1proxy
JVM
Agent
classLoader
录制数据标
准化接入
ee.msup.com.cn
模型透视
分布式运算对接
框架(mapreduce)
平台能力-万象
用例运维
0人工成本
10倍用例补充
百亿流量,5日分析,业务系统天级用例保鲜
充分度
模型建设
pipleline
链路/值分析
算法模块化
算法单元乱
序执行调度
框架
全自动
验证点、数据配置
精准/蜕变
质量资产
系统画像
资金画像
链路画像
13. 2.1 案例:场景链路结构自动解析
基于接口调用序列业务特性的时间序列特征
分解,分布式一致性, 完全的可读解释性
{'模式': ['consult'], '重复': 1},
方
法
调
用
序
列
长
度
'consult',
'putReqUUID',
'getBizIdentityCode',
'isLoadNew',
'getRules',
'getRuleTargetRefreshTime',
'isLoadNew',
'getInstitutionByInstId',
'getInstitutionByInstId',
'getInstitutionByInstId’
......................................
'getRuleTargetRefreshTime',
'isLoadNew',
'getRuleTargetRefreshTime',
'isLoadNew',
'getRuleTargetRefreshTime',
'isLoadNew',
'getRuleTargetRefreshTime',
'isLoadNew',
'getRuleTargetRefreshTime',
'isLoadNew’
原始数据
ee.msup.com.cn
{
'段落':
['consult', 'isLoadNew']
{'模式': ['putReqUUID'], '重复': 1},
'行为':
['consult',
'putReqUUID',
'getBizIdentityCode',
'isLoadNew',
'getRules'],
{'模式': ['getBizIdentityCode'], '重复': 1},
{'模式': ['isLoadNew'], '重复': 1},
{'模式': ['getRules'], '重复': 1},
{'模式': ['getRuleTargetRefreshTime', 'isLoadNew'], '
重复': 1},
['getRuleTargetRefreshTime',
'isLoadNew'] * N,
{'模式': ['getInstitutionByInstId'], '重复’: >100},
['findResourceByName',
'getCommonServiceTimeSwitch',
'isLoadNew'] * N,
{'模式’: ['findResourceByName’,
'getCommonServiceTimeSwitch’,
'isLoadNew’],
'重复’: >100},
['getInstitutionByInstId'] * N,
{'模式': ['isInServiceTime'], '重复’: >100},
['isInServiceTime'] * N,
{'模式': ['getInstitutionByInstId'], '重复’: >100},
{'模式': ['getRuleTargetRefreshTime', 'isLoadNew'], '
重复’: >20}
模式挖掘
'行为次序':
......
}
特征编码表示
14. 2.2 — 充分度分母模型
解决问题:业务场景度量的自评价方法,客观度量测试充分度水位。
场景模型四要素
流量模型
分布模型确定
类型
采样模型验证
建
模
时间分片验证
要素粒度
要素
链路
zone均衡验证
数据
分析
入口
场景粒度
业务图谱
理论模型输入
知识推演
要素 场景
代码分析 等价类划分
数据脉络 距离算法
值域推断 组合测试
本体关系
延伸构建
ee.msup.com.cn
充分度评估效果
值域动态分配
覆盖补充
精确置信区间
录制场景:录制下38种取值
实验
落地
定向录制
实时策略变换
场景入口(接口方法)
AAAA#bbb
数据脉络:对应的DAO
层方法为
→com.alipay.xxxDAO
要素坐标
java.lang.String -> bizMode
数据脉络:对应的库表字段→PMT_PAY_ORD^BIZ_MODE补
充9种取值,场景覆盖度(38-9)/38=76%
15. 2.3 — 用例生成交付
Test Script
1
Test Script
2
Test Script
3
APP-PlaybackTestBase
Data-Engine
Case-data
Mock-
data
Mock-Engine
Mock
rule
Mock
register
Mock
match
Check-Engine
Check
baseLine
Check
running
TestRuntimeContext
场景索引
本机加载
T
e
s
t
R
e
p
o
r
t
Dataprovider
测试数据
数据初始化
测试数据
场景元数据存储
中心
Scene
model
process
Clear
(rpc上下文)
prepare
(rpc上下文)
excute
(rpc调用+mock执行)
Test Framework
TestNG
ee.msup.com.cn
afterTest
结果收集/
自动分析
check
(结果+插桩点)
16. 2.4 用例整体DEMO
脚本结构
本机运行
CI运行
ee.msup.com.cn
17. 3. 场景推导 -领域推断模型
层次分析数据持续更新
三级二分预测模型
链路相似 Ranking
领域结构预测
top-T
调用链路
领域结构
静态定义预测
业务要素
静态值域
ee.msup.com.cn
从链路库中挑选出B个
业务关联性最低的候选
作为领域外候选
结构变换
相似链路同类业务: (精准30%)
余额宝转账-支付类型,过桥类型;
外部卡券支付-支付类型;
银行卡转账 - 付类型,机构渠道;
bizProduct :
bizMode :
......
静态定义组装
领域蜕变算子
领域内蜕变
执行结果预测
结构模板预测
bottom-B
从链路库中挑选出T个
业务关联性最高链路
作为领域内候选
变更代码解析
值变换
相同定义不同业务:
代数变换 (e.g. 金额
/ 精准80%)
字符变换 (e.g. 支付工具 / 精准50%)
枚举变换 (e.g. 错误码 / 精准80%)
args[0] = {
bizProduct: pay10001
bizMode : AAA
......
}
args[1] = xxxxxxxxx
args[2] = host-name
............................................
领域外蜕变
领域边界裁决
静态定义域内
业务关链路模板
规约预期(NPE等)
静态定义域外
模板错漏 / 业务无
业务要素破基线
领域内蜕变 预期通过
领域外蜕变 预期失败
18. 3.1 场景推导-系统测试分析
数据源
分析平台
应用
拦截录制
业务标准化分
析模型
业务场景智
能
分析模型
日志/配置
IR静态分析
数据
标准
化框
架
精细化
业务知识图谱
指令构成与约束
自动化CI
用例基数池
链路关键形态
智能
基线提炼
业务知识及语义
变更辐射范围
DB记录
业务指令
基线
业务元信息
数值水位分布等
专家知识
ee.msup.com.cn
业务场景建
模分析平台
...
业务数值
水位基线
19. 3.2 场景推导 - 链路预测领域结构实例(top-K)
......................................
['consult',
'getRuleTargetRefreshTime',
'putReqUUID',
'isLoadNew',
'getBizIdentityCode',
'getRuleTargetRefreshTime',
'isLoadNew',
'isLoadNew',
'getRules',
'getRuleTargetRefreshTime',
'getRuleTargetRefreshTime',
'isLoadNew',
'isLoadNew',
'getInstitutionByInstId', 'getRuleTargetRefreshTime',
'getInstitutionByInstId', 'isLoadNew',
'getInstitutionByInstId’ 'getRuleTargetRefreshTime',
...................................... 'isLoadNew']
链路特征智能抽取
[{'unary': ['consult'], 'repeat': 1},
{'unary': ['putReqUUID'], 'repeat': 1},
{'unary': ['getBizIdentityCode'], 'repeat': 1},
{'unary': ['isLoadNew'], 'repeat': 1},
{'unary': ['getRules'], 'repeat': 1},
{'unary': ['getRuleTargetRefreshTime', 'isLoadNew'], 'repeat': 1},
{'unary': ['getInstitutionByInstId'], 'repeat’: >100},
{'unary’: ['findResourceByName’,
'getCommonServiceTimeSwitch’,
'isLoadNew’],
'repeat’: >100},
{'unary': ['isInServiceTime'], 'repeat’: >100},
{'unary': ['getInstitutionByInstId'], 'repeat’: >100},
{'unary': ['getRuleTargetRefreshTime', 'isLoadNew'], 'repeat’: >20}]
ee.msup.com.cn
真实入参模板
蜕变预测模板
20. 案例总结
金融级分布式系统测试保障
更高 更快 更强
代码覆盖
业务要素覆盖
业务场景覆盖 用例编写提效
用例运行提效
执行验证提效 运行文档
自动断言
自动异常分析
全流程无干预,可迭代优化,能力开放
技术产出
ee.msup.com.cn
流量采集、用例
清洗、运行回归
无干预
专家经验反哺,
不断优化模型效
果
宽口径数据源,
适配各种技术栈
智能化探索
系统业务模型自 模型数据白盒化,
动刻画 可解释
21. 测试未来
需求评审 测试分析
设定测试范围 用例覆盖分析
单元/功能测试
清除接口代码
缺陷
清除系统链路
缺陷
验收测试
清除产品缺陷
单次0成本 持续低成本
• 接口一键接入 • 模型自学习
• 业务时序自动刻画 • 场景自动回归
• 数据动态构造 • 业务精细化自动校验
测试技术创新
ee.msup.com.cn
系统集成测试
22. 关注msup公众号
获取更多工程效能实践案例