一部分 数据 迁移_软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?...
信息時(shí)代,隨著用戶數(shù)量不斷增加,業(yè)務(wù)量不斷增長(zhǎng),企業(yè)原有數(shù)據(jù)庫(kù)不足以有效支撐業(yè)務(wù)的發(fā)展,在此情況下,企業(yè)更多的是尋求一款更加穩(wěn)定的數(shù)據(jù)庫(kù)進(jìn)行替代。
本文以Sybase數(shù)據(jù)庫(kù)和Oracle數(shù)據(jù)庫(kù)為例。Oracle數(shù)據(jù)庫(kù)是目前世界上流行的關(guān)系數(shù)據(jù)庫(kù),采用多進(jìn)程多線索體系結(jié)構(gòu),而Sybase數(shù)據(jù)庫(kù)采用單進(jìn)程多線索體系結(jié)構(gòu)。兩者均采用多線索的模式,該模式能用較少的線索管理大量的用戶進(jìn)程,降低了對(duì)系統(tǒng)資源的占用,提高了系統(tǒng)資源的利用率。
多進(jìn)程較單進(jìn)程的優(yōu)勢(shì)在于,能實(shí)現(xiàn)數(shù)據(jù)庫(kù)事務(wù)的并行處理,提高并發(fā)事務(wù)處理的響應(yīng)速度,避免了單服務(wù)器結(jié)構(gòu)中很容易造成服務(wù)器進(jìn)程瓶頸,進(jìn)而避免了因此而引起的單服務(wù)器進(jìn)程死鎖。因此,當(dāng)前企業(yè)一般以O(shè)racle數(shù)據(jù)庫(kù)替代Sybase數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)遷移后,需要測(cè)試人員進(jìn)行有效的驗(yàn)證,以保障系統(tǒng)的可用性,這是一個(gè)必不可少的環(huán)節(jié)。本文以實(shí)際項(xiàng)目測(cè)試經(jīng)歷為依據(jù),對(duì)數(shù)據(jù)庫(kù)表結(jié)構(gòu)及遷移數(shù)據(jù)的測(cè)試方法、經(jīng)驗(yàn)進(jìn)行了總結(jié),供測(cè)試人員使用。
1、數(shù)據(jù)庫(kù)表結(jié)構(gòu)測(cè)試
數(shù)據(jù)庫(kù)遷移普遍會(huì)涉及表字段的變換,包括字段的新增、刪除或修改等情況,此時(shí),測(cè)試需關(guān)注以下3個(gè)方面:
(1)新增字段測(cè)試:關(guān)注表結(jié)構(gòu),檢查新庫(kù)中新增字段的字段類型是否與預(yù)先定義一致;檢查遷移前后新增的字段在數(shù)據(jù)庫(kù)記錄中是否有值及其正確性。數(shù)據(jù)庫(kù)遷移后,新增字段根據(jù)業(yè)務(wù)需求可能會(huì)存在以下兩種插入方式:一是系統(tǒng)上線前就通過數(shù)據(jù)變更導(dǎo)入數(shù)據(jù),這種情況下我們需要驗(yàn)證該新增字段在數(shù)據(jù)庫(kù)表中是否都已按照業(yè)務(wù)需求填充完整。二是系統(tǒng)上線后,客戶發(fā)生實(shí)際業(yè)務(wù)后獲取并填充該新增字段,針對(duì)這種情況,則建議驗(yàn)證涉及該字段增刪改查的系統(tǒng)功能在遷移后能否正常使用。
(2)刪除字段測(cè)試:關(guān)注表結(jié)構(gòu),檢查刪除的字段在新庫(kù)中是否已被刪除,確認(rèn)被刪除字段數(shù)據(jù)是否需要導(dǎo)入新庫(kù),還是直接刪除,如需導(dǎo)入新庫(kù),需確定數(shù)據(jù)導(dǎo)入規(guī)則,然后驗(yàn)證導(dǎo)入后數(shù)據(jù)的準(zhǔn)確性、完整性等。此外,需要選擇關(guān)聯(lián)功能進(jìn)行驗(yàn)證。
(3)修改字段測(cè)試:關(guān)注表結(jié)構(gòu),檢查新庫(kù)中新增字段的字段類型是否與預(yù)先定義一致。數(shù)據(jù)庫(kù)遷移時(shí),部分字段類型、字段內(nèi)容可能會(huì)發(fā)生改變。針對(duì)字段內(nèi)容發(fā)生變化的情況,也需要驗(yàn)證相關(guān)系統(tǒng)功能能否正常使用,以及表中數(shù)據(jù)的準(zhǔn)確性及完整性。針對(duì)字段類型,Sybase及Oracle數(shù)據(jù)庫(kù)存在一些差別,以Sybase的datetime字段為例,它保留了毫秒級(jí)的數(shù)據(jù),而Oracle的date類型只保留到秒級(jí)別數(shù)據(jù),因此測(cè)試時(shí)需要關(guān)注因字段類型變化帶來的數(shù)據(jù)一致性問題。同時(shí),在測(cè)試時(shí)要極為關(guān)注,并與開發(fā)確認(rèn)字段類型的差別是否會(huì)對(duì)系統(tǒng)功產(chǎn)生影響。下表列出了Sybase及Oracle部分常見字段類型,供測(cè)試人員參考:
表1 Sybase及Oracle常見數(shù)值類型
2、遷移數(shù)據(jù)測(cè)試
對(duì)于進(jìn)行數(shù)據(jù)庫(kù)遷移的數(shù)據(jù),要關(guān)注以下幾點(diǎn):遷移過程中出現(xiàn)的臟數(shù)據(jù),數(shù)據(jù)的提取方式,遷移前后的數(shù)據(jù)一致性。
(1)臟數(shù)據(jù)
臟數(shù)據(jù)是指源系統(tǒng)中的數(shù)據(jù)不在給定的范圍內(nèi)、對(duì)于實(shí)際業(yè)務(wù)毫無意義、數(shù)據(jù)格式非法、以及在源系統(tǒng)中存在不規(guī)范的編碼和含糊的業(yè)務(wù)邏輯。數(shù)據(jù)從Sybase數(shù)據(jù)庫(kù)中遷移出來時(shí)會(huì)有一部分臟數(shù)據(jù),包含重復(fù)數(shù)據(jù)、無效數(shù)據(jù)、不可見數(shù)據(jù)等,首先需要在Sybase數(shù)據(jù)庫(kù)中處理臟數(shù)據(jù),再導(dǎo)出數(shù)據(jù),最后將數(shù)據(jù)導(dǎo)入Oracle數(shù)據(jù)庫(kù)。所以遷移后:
Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)量=實(shí)際遷移數(shù)據(jù)量=遷移前Sybase數(shù)據(jù)量-臟數(shù)據(jù)量。
(2)數(shù)據(jù)提取方式
數(shù)據(jù)的提取是為了更好的進(jìn)行數(shù)據(jù)一致性對(duì)比,考慮到Sybase數(shù)據(jù)庫(kù)與Oracle數(shù)據(jù)庫(kù)導(dǎo)出數(shù)據(jù)的規(guī)則不同,直接對(duì)比各自導(dǎo)出數(shù)據(jù)文件需要進(jìn)行大量的格式和文本轉(zhuǎn)換,我們采用直接從兩種數(shù)據(jù)庫(kù)中查詢,然后以統(tǒng)一格式生成文本文檔的方式提取數(shù)據(jù),并在數(shù)據(jù)之間以特定的分隔符進(jìn)行分割。在實(shí)際操作中需要針對(duì)不同處理字段類型,定義不同的轉(zhuǎn)換函數(shù),例如定義一段Oracle數(shù)據(jù)庫(kù)中clob字段轉(zhuǎn)string的函數(shù):
然后通過用Java語(yǔ)句提取到文本文檔當(dāng)中,而Sybase數(shù)據(jù)庫(kù)中的字段則可直接轉(zhuǎn)為string然后寫入文本文檔。
這樣就可以獲取到格式為TXT的數(shù)據(jù)提取文本。
(3)基于Beyond Compare工具進(jìn)行數(shù)據(jù)對(duì)比
Beyond Compare是一種文本比對(duì)工具,此工具主要用途是對(duì)比兩個(gè)文件夾或者文件,并將其差異以顏色標(biāo)出。針對(duì)遷移前后數(shù)據(jù)的一致性測(cè)試,我們的基本思路是對(duì)于沒有發(fā)生改變的字段的數(shù)據(jù)進(jìn)行全量的文本對(duì)比,再采用抽樣的方式選中一部分?jǐn)?shù)據(jù)進(jìn)行所有字段的人工對(duì)比。
前文中數(shù)據(jù)庫(kù)結(jié)構(gòu)測(cè)試?yán)锏谋斫Y(jié)構(gòu)在這里就是數(shù)據(jù)一致性測(cè)試的一個(gè)基礎(chǔ),確定了需要使用文本對(duì)比的字段。在Beyond Compare工具中,選擇文本比較,將兩份提取出的數(shù)據(jù)文本分別放入兩側(cè)對(duì)比框中,將立即對(duì)文本進(jìn)行比較,并標(biāo)注出有差異的項(xiàng)。一般選擇顯示差異項(xiàng)來鎖定有差異的數(shù)據(jù)。當(dāng)兩份文本對(duì)比無差異時(shí),我們就可以確認(rèn)數(shù)據(jù)庫(kù)遷移前后的數(shù)據(jù)是完全一致的了。
圖1 Beyond Compare比較界面
以上,便是我們本文的主要內(nèi)容。當(dāng)然,數(shù)據(jù)庫(kù)遷移測(cè)試,并不能只從數(shù)據(jù)庫(kù)結(jié)構(gòu)、遷移數(shù)據(jù)兩個(gè)維度進(jìn)行驗(yàn)證,我們還需在數(shù)據(jù)遷移后的環(huán)境開展功能驗(yàn)證,通過全量的功能回歸,發(fā)掘數(shù)據(jù)遷移后的缺陷。此外,為了保障系統(tǒng)上線后的穩(wěn)定性,我們需要開展性能測(cè)試,這些我們將在以后再進(jìn)行分享,希望上述內(nèi)容能對(duì)開展數(shù)據(jù)庫(kù)遷移測(cè)試的朋友提供幫助!
總結(jié)
以上是生活随笔為你收集整理的一部分 数据 迁移_软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 换主板系统怎么安装系统安装教程图解 换主
- 下一篇: python中组合框_PyQt 组合框