
干银行测试这些年被问得最多的一个问题就是核心业务测试到底在测什么很多刚转行进金融测试的朋友手里拿着一摞测试用例看着借贷记账科目余额日终批量计息积数这些词整个人是懵的。网上聊银行测试的文章不算少但大多停在开户、存款、取款这种表面流程上真正核心的东西——账怎么记、息怎么算、批量怎么跑、账不平了怎么查——很少有人系统说透。这篇文章想把这些年攒下来的核心业务测试点做个整体汇总不整虚的全是能直接落到用例里、能拿去跟开发对线的干货。适合三类人看刚进银行测试项目、正被核心业务蹂躏的新人从互联网测试转金融测试、想搞明白账务逻辑的同行以及带测试团队、需要梳理核心业务测试要点的负责人。1. 银行核心业务测试到底是什么1.1 核心系统管的是账不是界面先说清楚边界。你在手机银行App上看到的余额实际上是核心系统查出来的你转账时按下的确认键最终也要落到核心系统里记一笔账。外围渠道系统柜面、网银、手机银行、ATM、POS负责跟用户打交道核心银行系统才是记账的最终裁判。一句话概括核心业务测试测的不是某个按钮好不好用而是这笔交易有没有记对账、记对科目、记对利息。这也是为什么核心业务测试对数据库验证的要求特别高——光看界面提示交易成功远远不够必须到库里把账翻出来核对。在银行测试项目里核心业务往往和海量的外围系统联调测试混在一起很多新人以为把界面流程点通就算测完这个认知会吃大亏。一个功能是否真正上线可用最终判断标准是核心系统的账务是否正确而不是界面是否友好。1.2 为什么说核心业务测试门槛高核心业务系统有几个和其他系统截然不同的特点直接决定了测试难度。这些特点也是银行测试和互联网测试最本质的差别。第一资金敏感。一个余额字段错了哪怕只错一分钱都是生产事故。互联网产品弹个报错用户顶多骂两句银行系统账不平是要被通报、要追责的。第二强一致性。跨账户交易必须保证两边同时成功或者同时失败不存在转出成功、转入失败的中间状态。这种强一致性的验证光靠功能测试的黑盒手法很难覆盖需要结合数据库层面的核对。第三规则复杂。光是利息就分活期、定期、通知存款、大额存单、贷款、逾期罚息、复利等十几种算法每种算法还有起息日、结息日、计息基数、进位规则这些细节。任何一个细节错了结果就差之千里。第四时间维度敏感。日切、批量、节假日顺延这些概念在其他行业几乎不存在在银行却是每天都要面对的。测核心业务得敢调系统时间得理解时间窗口对账务的影响。正因为这些特点核心业务测试本质上是在做三件事读得懂业务规则、查得了数据库、看得懂批量任务。缺一项就只能停留在表面。2. 五大核心业务模块的测试点拆解核心业务可以粗分为五大模块客户信息、存款、贷款、支付结算、总账核算。每个模块的测试重点各不相同下面逐一拆。2.1 客户信息CIF测试先分清客户和账户客户信息管理Customer Information File简称CIF是所有业务的地基。很多新人上来就把客户和账户混为一谈其实两者是严格分开的客户是人个人或企业账户是户存款账户、贷款账户。一个客户可以挂多个账户一个账户必须归属且仅归属一个客户。CIF的核心测试点我按业务动作来梳理客户创建证件类型身份证/护照/军官证等、身份证号合法性和唯一性校验15位旧证转18位、末位X的处理、姓名生僻字、手机号格式、地址长度和非法字符。一个身份证号能不能开两个客户号这个唯一性校验是必测项。客户信息变更姓名变更、证件有效期更新、联系方式修改重点验证变更是否留痕、是否需要复核授权、变更后原信息能否在流水里追溯。很多系统变更不留痕上线后被监管查出来才补测试时就要盯死这一点。客户状态管理正常、冻结、销户、黑名单状态之间允许哪些流转、不允许哪些流转必须用状态迁移矩阵穷举。比如冻结状态下能不能新开账户黑名单客户能不能做转账各银行规则有差异但测法是一样的。客户合并同一个人因历史原因建了两个客户号合并后账户归属、交易流水归属、历史利息记录是否跟随迁移这是CIF测试里最复杂的场景也是联调测试最容易漏的场景。实操上CIF测试最常用的方法是造数先把正常数据铺好再刻意制造脏数据——身份证不合法、客户号重复、证件过期、生僻字姓名——看系统能不能兜住。不要嫌脏数据麻烦CIF这里漏掉的校验后面每一个业务模块都会帮你放大成大麻烦。我见过一个项目因为客户证件类型校验漏测导致一批对公客户无法正常开户整个上线计划推迟了两周根子就出在最基础的CIF用例上。2.2 存款业务测试计息规则是重灾区存款是核心业务里交易量最大的模块也是最容易出Bug的地方。先分清楚分类活期存款随时存取通常按季结息定期存款包含整存整取、零存整取、存本取息、整存零取通知存款分1天、7天通知提前通知后支取大额存单可转让、可质押起点金额高。存款业务的核心测试点开户与起息。定期开户的起息日是哪天到期日怎么算人民币定期存款通常算头不算尾——存入当天计息到期当天不计息。比如1月1日存入一年期到期日是次年1月1日实际计息到12月31日。这个规则理解不到位到期日用例就写不对。计息积数。这是活期利息的核心机制。银行每天按账户日终余额累加计息积数结息日按累计积数 × 日利率算利息。测试时最实用的验算方法是手工算积数把每天的余额列成表分段累加再乘日利率和系统结息结果对比。别看这个方法土真能揪出问题。利率变更。调息之后活期利率是分段计息还是统一调整定期利率是开户日锁定还是到期日按新利率这些规则必须以需求文档为准但测试点必须覆盖利率变更前后各有一笔交易的场景只测变更前或只测变更后都发现不了分段计息的错误。提前支取。定期未到期提前支取利息按活期利率计算部分提前支取剩余部分是否仍按原定期利率支取次数有没有限制提前支取后剩余金额低于起存金额怎么办这些都是高频用例。自动转存。定期到期后自动转存转存本金是原本金还是本息合计转存利率用到期日的挂牌利率还是原利率自动转存有没有次数限制漏测自动转存上线后客户投诉率会直线上升。金额边界。0元存款、最小起存金额比如整存整取50元、系统允许的最大金额、带两位小数的金额、超过两位小数的舍入规则。这些边界不测上线后迟早出事。存款测试我踩过的坑最典型的是结息日系统日期边界问题。测试环境里把日期调到结息日当天结果发现日切任务和结息任务并发导致一批账户利息重复计提。这种问题光点界面永远发现不了必须配合批量任务分析才能测出来。所以存款测试从来不是单独的用例设计而是交易测试 批量测试的组合拳。2.3 贷款业务测试还款计算必须验算到分贷款业务的核心是还款计划。等额本息、等额本金、按月付息到期还本、先息后本每一种还款方式每期的本金、利息、剩余本金都不相同测试时最忌讳看着系统结果差不多就行。以等额本息为例公式是月供 本金 × 月利率 × (1 月利率)^还款月数 ÷ [(1 月利率)^还款月数 - 1]。举个例子贷款10万元年利率4.9%贷款20年240期。月利率 4.9% ÷ 12 ≈ 0.408333%。(1 月利率)^240 ≈ 2.6629代入公式月供约为654.44元。这个数必须手工验算一遍再和系统生成的还款计划表逐项对比。第一期利息 剩余本金 × 月利率 ≈ 408.33元第一期本金 月供 - 当期利息 ≈ 246.11元还完第一期后剩余本金约99753.89元第二期利息按这个剩余本金重新算。贷款测试的重点场景放款放款金额、放款日、起息日、手续费/担保费的扣收方式。放款当天是否计息部分银行放款日不计息次日才开始这个规则直接影响第一期还款金额。正常还款每期还款日、节假日顺延还款日逢周末是否顺延到下一个工作日、扣款账户余额不足时的处理部分扣收还是整笔失败。余额不足是最容易出争议的场景扣了部分算不算逾期、算不算违约都要在用例里明确。提前还款部分提前还款后剩余本金重新计算通常有减少月供和缩短期限两种模式是否收取违约金提前还款的利息是结算到当天还是到下一个结息日。提前还款后还款计划表的刷新是数据库验证的重点。逾期逾期本金、逾期利息、罚息。罚息利率通常是合同利率上浮一定比例罚息 逾期本金 × 罚息日利率 × 逾期天数。还有复利——欠息部分也要计息这是最容易算错的地方。复利测试用例一定要手工验算别信系统自动算出来的数。结清贷款全部还清后账户状态改为结清担保解押剩余利息是否收尾一次结清结清后账户还能不能继续还款。实操上最想提醒的一点贷款测试一定要做跨月、跨季、跨年的数据。只测当月还款永远发现不了12月31日放款、次年1月1日计息这种跨年场景下的利息截断问题。我见过一个生产事故就是跨年放款的利率取值用了旧参数导致整个批次利息算错这种问题必须靠跨年造数才能提前暴露。2.4 支付结算测试转账流程藏着最多坑支付结算是核心业务里和用户体验最直接相关的部分。行内转账、跨行转账、代收代付、批量转账每一种都有独立的规则和测试重点。行内转账转出账户余额扣减、转入账户余额增加、手续费扣收收费方式有按笔、按金额比例、封顶价、转出/转入账户状态校验冻结、挂失、睡眠户等异常状态不能交易。跨行转账依赖支付系统处理测试重点是交易状态查询——核心系统发出报文后接收方是否返回回执回执是成功还是失败失败后原路退回什么时候生效跨行转账的状态流转受理中、已发送、已回执、已入账、已退回必须逐个验证。转账失败处理余额不足、账户状态异常、金额超限时系统必须给出明确报错且不能产生半笔流水。所谓半笔流水就是借方扣了钱贷方没入账这是最严重的账务事故。冲正一笔转账因超时或其他原因被冲正原交易的所有流水必须反向冲平不能留下转账成功但资金没到账的挂账。冲正后手续费退不退、退给谁也要有明确预期。支付结算的测试关键在于实时性和原子性。我常用的验证套路是转账后立刻查转出方和转入方的账面余额、可用余额、当日发生额再查交易流水里有没有完整的两条记录一条借方、一条贷方。两边对不上问题基本就出在记账环节。另外行内转账和跨行转账的异常场景一定要分开造因为跨行涉及外部系统回执失败路径比行内多得多。2.5 总账核算测试所有账最后都要平总账General Ledger是核心业务的最终裁判。每一笔交易都会在总账里产生借贷分录所有科目的借方发生额合计必须等于贷方发生额合计这就是试算平衡。总账测试的核心点科目挂接交易类型到会计科目的映射关系是否正确。同样是存款活期存款和定期存款挂的科目不同同样是利息支出活期结息和定期结息挂的科目也不同。科目挂接错了总分是对平的但报表全是错的这种问题隐蔽性极强。分录完整性一笔交易产生几条分录借方是谁、贷方是谁、金额是否一致少一条分录总分就会不平。测试时要把每笔交易的分录清单拉出来逐一核对借贷方向。总分核对总账科目余额 该科目下所有分户账余额之和。这个核对在日终批量里自动执行但测试时要手动模拟验证一遍确认核对逻辑本身是可靠的。报表正确性日终、月终报表的取数逻辑、期初余额、本期发生额、期末余额以及报表之间的勾稽关系比如资产 负债 所有者权益这一类的平衡关系都要有对应的验证用例。总账测试最实用的场景是主动制造不平故意构造一笔只有借方没有贷方的交易看系统能不能在日终总分核对时发现并告警。能发现说明核对机制有效发现不了说明核对逻辑有漏洞这个漏洞必须在上线前补上。我项目里就干过这事儿构造了一条单边分录结果系统一点反应没有开发排查了两天才发现核对任务漏了一个科目段这种问题靠正常业务用例永远测不出来。3. 日终批量测试核心业务最容易翻车的环节3.1 为什么日终批量是硬骨头银行每天营业结束后系统要做一系列批量任务日切、批量结息、利息计提、总分核对、批量代收代付、征信报送、报表生成。这些任务的特点是按顺序执行、有依赖关系、必须在规定窗口内跑完、任何一步失败都会堵住后面的流程。日终批量测试难在三点。第一批量任务的触发条件复杂——有的是按日期触发有的是按交易量触发有的是前一个任务成功后才触发。第二批量数据量大测试环境要造足够多的数据才能暴露性能问题几张表几十条数据跑出来的结果没有说服力。第三批量出错的场景很难造——任务跑到一半失败了、重复执行了、漏执行了这些异常场景的用例往往没人写但这恰恰是最容易出生产事故的地方。3.2 日终批量测试准备清单我在项目里会提前准备一份清单缺一不可存量数据造数覆盖所有账户类型的存量数据包括正常户、冻结户、挂失户、睡眠户、销户当日账户。批量任务对每类账户的处理规则不同只造正常户等于没测。参数核对利率参数、科目参数、交易手续费参数、批量开关参数全部核对一遍。参数错一个整个批量的结果全错而且错得悄无声息。批次顺序确认拿到当批次任务清单明确每个任务的执行顺序和依赖关系。批量执行顺序错了后面的任务会在错误的数据基础上运行。数据快照批量前对关键账户余额、关键科目余额做一次快照批量后做对比。快照是排查问题的唯一依据没有快照出问题只能靠猜。异常预案验证批次失败后的重跑机制、断点续跑机制、人工干预入口是否可用。这些平时用不上但一旦批量失败这些都是救命通道。3.3 批量结果的三个核心验证日终批量后最核心的验证有三件事缺一不可。第一结息结果验证。活期结息日当天把每个账户的计息积数、日利率、利息金额、入账日期全部检查一遍。重点看积数是否被正确清零、利息是否入账到正确账户、入账日期是否是结息日次日。第二总分核对验证。批量跑完的总账余额和分户账加总是否一致。这一步我会直接用SQL做SUM比较绝不肉眼看报表。总分不平第一时间定位是哪类科目、哪个机构、哪段时间出的差异。第三账户状态变化验证。睡眠户激活、不动户转睡眠、贷款逾期状态更新、定期到期自动转存批量后状态是否正确。状态变化类问题通常不会在交易测试里暴露因为触发条件是日终判定。我见过最经典的日终Bug某个批次的计息积数清零任务被重复执行了两次导致所有活期账户的积数归零结息日利息全部变成0。这种问题单笔交易测试是发现不了的必须靠批量测试里的数据快照对比才能抓出来。所以批量测试不光要看批量跑没跑完更要看批量跑完的数据对不对。4. 数据库验证技巧用SQL把账核对明白4.1 账户三余额概念先搞明白银行核心系统的账户表里通常有三个余额字段每个做银行测试的人都必须搞清楚它们的区别。账面余额Ledger Balance核心系统记账后的余额是账户的法定余额。可用余额Available Balance账面余额减去冻结金额是客户真正可以动用的金额。当前余额Current Balance在部分银行系统里指包含了未入账交易的实时余额口径各家不同。测试里最常见的断言是转账成功后转出方可用余额减少转出金额手续费转入方可用余额增加转入金额。如果只看账面余额不看冻结金额涉及冻结户的用例永远测不对。账户冻结了一部分资金可用余额和账面余额对不上是正常的对不上不代表Bug——但测试人员得能说清楚为什么对不上。4.2 常用核对SQL与验证套路以典型核心系统的账户主表(acct)和交易流水表(tx_flow)为例我常用的三类SQL如下-- 1. 查账户余额和状态 SELECT account_no, curr_balance, ledger_balance, available_balance, status FROM acct WHERE account_no 6222020200001234567; -- 2. 查当日全部交易流水 SELECT tx_no, tx_type, dr_amount, cr_amount, dr_acct, cr_acct, tx_date FROM tx_flow WHERE biz_date 2025-01-15 AND (dr_acct 6222020200001234567 OR cr_acct 6222020200001234567) ORDER BY tx_time; -- 3. 总分核对按科目汇总分户账余额 SELECT subject_no, SUM(available_balance) AS total_bal FROM acct WHERE subject_no 10100101 GROUP BY subject_no;验证逻辑不复杂交易前查一遍余额交易后查一遍余额和流水两边差额跟预期值对比。但有一个细节必须强调——一定要在交易前手动记录快照不能依赖系统帮你回忆交易前的状态因为很多系统的流水表只记录变化值不记录交易前的完整快照。没有快照排查的时候连这笔交易前余额是多少都说不清楚。4.3 利息验算的正向与逆向利息验算有两个方向我建议都做。正向验算手工算出期望利息和系统结果对比。活期利息 累计计息积数 × 日利率。举个具体例子某账户1月1日余额10000元1月15日存入5000元1月20日取出2000元到3月20日结息积数怎么算分三段加总1月1日到1月14日为10000元×14天1月15日到1月19日为15000元×5天1月20日到3月19日为13000元×59天累计积数 140000 75000 767000 982000。然后用这个积数乘以活期日利率得出利息。手工分段算积数虽然繁琐但最能发现系统计息口径的错误。逆向验算已知系统算出的利息金额反推它使用的积数和利率看是否符合预期。这个方法特别适合排查利息比别人多了一分钱这种细微差异——反推出来的日利率对不对、积数有没有被多算一目了然。提示验算利息时先确认计息基数。人民币业务通常按年360天折算日利率也有个别产品按365天。基数搞错所有利息验算都是白做。5. 核心业务测试常见问题与排查实录5.1 高频问题速查表我整理了核心业务测试里出现频率最高的一批问题可以当排查手册用问题现象可能原因排查思路转账后两边余额对不上手续费未扣或重复扣除对比转出方扣款总额与流水中的手续费记录结息结果差几分钱计息天数或舍入规则错误反推计息积数和日利率核对计息基数日终总分不平某笔交易缺少借贷一方查当日全部流水找单边分录批量任务卡住前一任务未完成或数据锁冲突查批次日志定位卡点任务跨行转账状态不明确回执报文未处理查报文状态表确认是否需要手工补录定期到期未自动转存转存参数未配置核对账户级和产品级参数确认转存标志可用余额为负冻结金额超过账面余额查冻结流水核对冻结和解冻的匹配关系这张表是常年积累下来的遇到问题先按表排查一遍能省下大量时间。排查不出来的再往深处挖但大部分问题都逃不出这几类。5.2 复盘一个典型的日终不平案例去年我带的一个项目出过这么一档子事。交易日结束后跑总分核对总账和分户账差了8万。第一反应是查当日大额交易把超过5万的转账和取款全翻了一遍查了半天没发现问题。后来把当日全部流水拉出来按科目汇总逐项对才发现根源有一笔利息支出挂了借方科目贷方却挂到了应解汇款而不是活期存款。等于一笔利息支出记错了对手科目整体看总分是平的因为借贷金额相等但科目余额全串了。报表上利息支出科目少了8万应解汇款科目多了8万刚好是这次差数的来源。这个案例给我的教训很直接总分平不平只看总账汇总是不够的必须逐科目核对分户账加总与总账科目余额的一致性。测试核心业务SQL的GROUP BY和SUM是基本功不是加分项。尤其涉及跨科目交易一定要验证每个涉及科目的余额变化而不是只看账户余额。5.3 老测试踩坑后的几点建议最后说几句掏心窝子的话。第一核心业务测试一定要做正向反向双重验证。正向是照着需求预期走一遍反向是故意构造非法数据、边界数据、异常流程。很多团队只做正向上线后出事的大多是被反向场景击穿的。第二动手写用例之前先把业务规则理清楚。尤其是计息规则、节假日顺延规则、跨机构交易规则不搞清楚就写用例写出来的要么测不到点要么测错了地方。理规则的过程也是在帮自己做业务积累这笔功夫花得值。第三测试环境的时间要敢调。日切、结息、月末、年末这些时间点不敢调系统时间就永远测不到银行系统最脆弱的那一面。我见过不少团队怕调时间影响其他测试结果生产环境一到月末就出问题这就是典型的平时不测出事才测。第四记录一切。批量前的快照、批量后的结果、SQL查询的中间数据全部留档。排查问题的时候这些记录就是救命稻草。没有记录出了问题只能靠猜而靠猜的核心业务问题十个有九个猜不中。核心业务测试这条路没有捷径就是靠一个个用例、一次次对账、一回回踩坑堆出来的。把上面这些测试点吃透你已经比大多数刚入行的测试走得远了。