記錄一次余額遷移的坑(測(cè)試角度)

一、這是一個(gè)遷移流程圖;現(xiàn)在把a(bǔ)ction做個(gè)簡(jiǎn)單的記錄:備注:本次遷移核心是遷移流水,通過(guò)流水的收入-支出-余額=0,在平臺(tái)用戶(hù)最少的時(shí)候進(jìn)行遷移(凌晨2點(diǎn)進(jìn)行);找出收入和支出有差異的--仔細(xì)對(duì)賬查賬;然后運(yùn)維配合,流水扎帳,記錄最大的流水id;繼續(xù)賬單平賬,然后進(jìn)行快照流水回放遷移,遷移完成后,進(jìn)行對(duì)賬,收入-支出-余額=0那就很好,恭喜你沒(méi)有采坑,系統(tǒng)健壯;我們就不是,然后就一點(diǎn)一點(diǎn)查賬對(duì)賬;賬單平了以后,可以繼續(xù)遷移,遷移增量(首先我們是熱牽),遷移增量可能 要進(jìn)行好幾次,每次遷移都要對(duì)賬;
|
No.
|
ACTION
|
REMARK
|
執(zhí)行任務(wù)
|
|---|---|---|---|
| 1 | 針對(duì)user_balance表執(zhí)行一次獲取差異賬單(賬單一) | 查出賬單,通常是54筆 |
select u.code, u.nickname , u.available_balance, ( |
| 2 | 取一次流水表最大id | 取出流水表中的最大的id(MAX_ID) | SELECT MAX(id) from user_balance ; |
| 3 | 再獲取一次獲取差異賬單(賬單二) | 查出賬單,通常是54筆 | select u.code, u.nickname , u.available_balance, ( (select sum(ub.balance) from user_balance ub where ub.user_code = u.code and ub.status = 1 and ub.bi_type =1) - (select sum(ub.balance) from user_balance ub where ub.user_code = u.code and ub.status = 1 and ub.bi_type =2) ) as '收入減支出' from user u where available_balance <> ( (select sum(ub.balance) from user_balance ub where ub.user_code = u.code and ub.status = 1 and ub.bi_type =1) - (select sum(ub.balance) from user_balance ub where ub.user_code = u.code and ub.status = 1 and ub.bi_type =2) ); |
| 4 | 驗(yàn)證賬單一和賬單二是否一致 | ||
| 5 | 進(jìn)行差異賬單平賬 | 差異賬單進(jìn)行調(diào)整,通過(guò)資金后臺(tái)功能,導(dǎo)入excel,自動(dòng)進(jìn)行平賬 |
需要提供導(dǎo)入平賬的能力; fund-manager已提供http接口 |
| 核對(duì)差異賬單正確性 |
SELECT * FROM user_account WHERE 1 limit 100; SELECT * FROM org_account where 1 limit 100; |
||
| 6 | 進(jìn)行快照流水遷移 |
從0開(kāi)始遷移到MAX_ID為止到流水,進(jìn)行業(yè)務(wù)回放 |
需要提供從0到N流水號(hào)回放的能力 fund-manager已提供http接口 |
| 7 | 遷移完成后進(jìn)行資金系統(tǒng)對(duì)賬 | 收入-支出 -余額 = 0 |
select u.account_id, u.account_name, u.user_code, ( |
| 8 | 檢驗(yàn)是否有差異 | 正常情況下應(yīng)該是0 | |
| 9 | 進(jìn)行差異數(shù)據(jù)單筆重試 |
需要提供單筆業(yè)務(wù)重試的能力 fund-manager已提供http接口 |
|
| 10 | 對(duì)資金系統(tǒng)進(jìn)行備份 | sg_account庫(kù) | |
| 11 | 增量遷移 |
提供增量遷移能力,記錄老系統(tǒng)ID和新系統(tǒng)ID,在執(zhí)行業(yè)務(wù)之前,需要進(jìn)行冪等(執(zhí)行轉(zhuǎn)賬業(yè)務(wù)之前,fund-manager), user_balance存在order_no為 |
需要提供從X到Y(jié)流水號(hào)回放的能力(和從0到MAX_ID的能力是同一個(gè)) fund-manager已提供http接口 |
| 12 | 應(yīng)用發(fā)布(含業(yè)務(wù)回歸驗(yàn)證) |
應(yīng)用發(fā)布 |
|
| 13 | 再次進(jìn)行增量遷移 | 提供增量遷移能力(可執(zhí)行之前一樣的操作) |
需要提供從X到Y(jié)流水號(hào)回放的能力(和從0到MAX_ID的能力是同一個(gè)) fund-manager已提供http接口 |
| 14 | 遷移完成后進(jìn)行資金系統(tǒng)對(duì)賬 | 收入-支出 -余額 = 0 |
select u.account_id, u.account_name, u.user_code, ( |
| 15 | 進(jìn)行系統(tǒng)間對(duì)賬 |
系統(tǒng)內(nèi)對(duì)賬: 資金系統(tǒng)快照2 - 資金系統(tǒng)快照1 = 增量流水軋差 + 新業(yè)務(wù)流水 系統(tǒng)間對(duì)賬:老系統(tǒng)增量流水和新系統(tǒng)遷移流水進(jìn)行對(duì)賬 |
增量流水獲取 |
| 16 | 針對(duì)差異數(shù)據(jù)進(jìn)行單筆調(diào)賬 |
需要提供單筆業(yè)務(wù)重試的能力 fund-manager已提供http接口 |
二、開(kāi)發(fā)踩得的坑,測(cè)試流的淚
1. userbalance表, serialNo/orderNo 重復(fù), 與遷移程序唯一單號(hào)生成策略沖突,導(dǎo)致部分?jǐn)?shù)據(jù)丟失。
eg: 接口并發(fā),同一筆訂單可能生成多筆,我就看到一個(gè)用相同訂單號(hào)有17筆;
2. userbalance有記錄,但user表沒(méi)有用戶(hù) 引發(fā)bug、賬不平。
eg:用戶(hù)userCode被修改,或者直接被刪除,但是有消費(fèi)過(guò),balance里面沒(méi)有被處理
3. account-business 對(duì)于已存在的commonbill賬單,再次申請(qǐng)會(huì)進(jìn)行數(shù)據(jù)覆蓋,導(dǎo)致后面重復(fù)的單號(hào)數(shù)據(jù)會(huì)覆蓋前面轉(zhuǎn)賬成功的數(shù)據(jù),從而account-business與account-core賬對(duì)不上。
4. account-business調(diào)用轉(zhuǎn)賬時(shí),金額小于等于0會(huì)直接變成成功,不走account-core。 應(yīng)改為金額等于0直接成功,不走core。金額小于0報(bào)錯(cuò)
三、測(cè)試需要關(guān)注點(diǎn):
- 測(cè)試用例質(zhì)量和checklist是否清晰明了:第一次接觸余額遷移,我知道必須重視,可是我還是重視不夠,寫(xiě)出的checklist沒(méi)有進(jìn)行評(píng)審,就上手了
- 遷移風(fēng)險(xiǎn),遷移方案沒(méi)有完全吃透:如果遷移失敗,有回滾方案嗎?遷移的性能瓶頸?有些歷史數(shù)據(jù)處理--待入賬?接入新數(shù)據(jù)兼容問(wèn)題等,上線(xiàn)后,全面業(yè)務(wù)回歸

浙公網(wǎng)安備 33010602011771號(hào)