目录

清分结算测试实践

对于大部分业务层面的需求,如果出问题,一般影响集中在:

  • 用户体验不好
  • 转化率降低
  • 页面异常

基本是局部的业务损失。而清分结算系统一旦出问题,影响的是平台资金、商户收益、财务可信度。例如:

  • 数据口径不一致,商户看到的销量与实际结算的钱对不上
  • 由于故障导致少结算
  • 状态机异常,结算单状态卡死
  • 转移主体后结算不符合预期

相比普通业务测试,清分结算测试的特点在于:

  • 规则复杂
  • 数据链路长
  • 精度要求高
  • 风险等级高

但也有好处,就是规则、数据流动都是非常明确的,做自动化很容易,也很好维护。

一、什么是清分结算

我刚接触这个词的时候,“结算”好懂,“清分”有点抽象。查了一下,是财务术语,奇石很好理解,“清分”就是划清楚这笔钱怎么分,“结算”就是实际分钱。

典型流程:

下单支付 -> 平台收款 -> 清分拆账 -> 周期结算 -> 财务对账 -> 银行出款

对于测试来说,一般主要是前面的部分,后面财务对帐开始的逻辑很稳定,很少改动。

1.清分

清分,就是按照一定的规则,把一笔订单的资金拆分到不同账户。

比如,用户支付了100元,清分规则为:支付渠道费30%,剩余与平台与商家五五分成,那么清分结果就是:

  • 渠道费30
  • 平台35
  • 商家35

这是一个简单的规则,实际可能还有优惠券、退款、多商户、税费扣减等逻辑。

2.结算

结算,就是要把待结算账户的余额按周期进行打款。

例如,日结、周结、月结、延迟结算、风控冻结等。

二、清分结算系统测试的难点

1.系统链路长,依赖复杂

一个完整的订单可能经过:

  • 订单系统
  • 支付系统
  • 清分系统
  • 分账系统
  • 财务系统
  • 提现系统
  • 银行渠道

任何一个环节出问题,都可能让最终资金异常。比如:

  • 支付成功清分失败
  • 清分规则错误
  • 清分成功但记账有问题
  • 记账成功但结算失败
  • 系统状态未更新

因此测试时,必须关注好全链路一致性、状态同步、重试安全等方面。

2.金额准确性要求绝对严格

普通的业务系统允许一些无伤大雅的体验问题,但是作为资金系统,一分钱的失误都是不允许的。因此测试重点:

  • 分账计算
  • 四舍五入规则
  • 优惠券冲抵
  • 退款回滚
  • 多订单累计误差

每一单误差1分钱,随着时间累计将会无限放大。

3.异常场景

根据我的经验,这种规则极其明确的系统,很少在异常场景出现问题,但也不能掉以轻心,一旦出问题将是非常严重的。测试时要关注好这些异常路径:

  • 网络超时
  • 第三方支付重复回调
  • 定时任务重复执行
  • 配置有误
  • 人工补单

如果只覆盖正常流程,风险很高。

三、核心验证点

1.金额计算准确性

需验证:

  • 用户实际支付金额
  • 平台实际收入
  • 商家结算金额
  • 商家结算单数据
  • 四舍五入规则

不仅单笔订单要验证,还要验证批量累计的订单。

2.幂等性

  • 重复支付回调
  • 重复清分任务
  • 重复结算任务
  • 人工补单重复提交
  • MQ消息重复消费

保证同一事件无论执行多少次,最终的结果必须唯一。

3.时效与周期验证

  • T+1
  • 月结
  • 临时修改结算时间点

这一块测试主要是做好边界:

  • 时区
  • 跨日边界
  • 跨月边界
  • 定时任务执行时间
  • 补跑的任务

4.对账一致性

需要验证多个系统金额的统一:

  • 订单金额
  • 清分金额
  • 账户金额
  • 打款金额
  • 财务记账金额

这块不只是测试阶段,巡检也可以抽样进行检测。

四、常见问题

1.配置问题

真实线上问题中,配置问题远多于代码的问题。例如:

  • 分成比例配置错误
  • 未及时变更主体

2.对账口径不统一

出现商家用销量和规则自己计算的金额与实际结算金额对不上的问题。

五、总结

清分结算的核心就是准确、一致、可追溯。

作为决定平台资金安全的底层系统,需要抱以敬畏之心。