王語杰,歐陽鵬,辛存生,沈桐,喬子真
(1.國網(wǎng)匯通金財(北京)信息科技有限公司,北京 100053;2.國網(wǎng)電子商務(wù)有限公司,北京 100053)
相比于傳統(tǒng)的測試方法,數(shù)據(jù)工廠在幫助測試人員提升測試效率上已經(jīng)有了很大的進步,因此數(shù)據(jù)工廠及其相關(guān)技術(shù)和業(yè)務(wù)在過去幾年得以推廣,并且已經(jīng)開始應(yīng)用于各種實際的測試場景中,如大批量數(shù)據(jù)多表關(guān)聯(lián)的測試場景、高并發(fā)的壓力測試場景等,已經(jīng)成為測試開發(fā)人員最關(guān)注的測試工具之一[1]。
但是由于數(shù)據(jù)工廠這個解決方案本身還處在發(fā)展階段,所以在設(shè)計上依然存在許多可以優(yōu)化的方向。傳統(tǒng)的數(shù)據(jù)工廠僅負(fù)責(zé)生成數(shù)據(jù),在測試過程中需要測試人員手工查看哪些數(shù)據(jù)發(fā)生了哪些變化,是否符合預(yù)期;如果測試過程中發(fā)現(xiàn)問題則需要手動還原數(shù)據(jù),而對于批服務(wù)測試和壓力測試,測試人員有時希望能夠快速地把測試數(shù)據(jù)重置為初始狀態(tài)。因此,本發(fā)明旨在在數(shù)據(jù)工廠的基礎(chǔ)上解決如下兩個問題:一是對于測試中測試數(shù)據(jù)及其關(guān)聯(lián)數(shù)據(jù)的狀態(tài)變動的監(jiān)控和顯示;二是當(dāng)測試結(jié)果并不符合預(yù)期或者測試場景需要時,將測試數(shù)據(jù)及其關(guān)聯(lián)數(shù)據(jù)恢復(fù)成初始狀態(tài)。
目前已經(jīng)投入給測試人員使用的數(shù)據(jù)工廠大體分為兩大類型,一種是主要提供自動生成測試數(shù)據(jù)的方法,其能夠根據(jù)實際場景的需要,向數(shù)據(jù)庫大批量地寫入測試數(shù)據(jù),從而幫助測試人員提高數(shù)據(jù)的生成效率和質(zhì)量[2]。另一種則將測試中需要用到的數(shù)據(jù)以數(shù)據(jù)模板的形式統(tǒng)一管理,在自動化測試系統(tǒng)中,實現(xiàn)測試數(shù)據(jù)的記錄,保存,復(fù)用等功能,也可以整體性地提高測試的效率以及自動化系統(tǒng)的代碼復(fù)用率[3]。
然而現(xiàn)存的方法都僅關(guān)注測試數(shù)據(jù)的生成和復(fù)用,在實際應(yīng)用中對于測試人員來說存在大量的問題:
一是因為傳統(tǒng)的數(shù)據(jù)工廠僅負(fù)責(zé)批量生成符合測試要求的數(shù)據(jù)[4],但是對于測試過程中后續(xù)的流程沒有任何參與,測試人員往往需要手工對測試數(shù)據(jù)進行一一校驗,而這個過程往往十分耗時耗力,占用大量測試資源。
二是傳統(tǒng)的測試人員人工校驗測試數(shù)據(jù)變動情況時,一般只能獲取測試完成后的數(shù)據(jù)終態(tài),對測試過程中的數(shù)據(jù)變化,無法有效的捕獲和分析。
三是由于難以保證開發(fā)人員的代碼是正確的,如果測試過程中發(fā)生錯誤需要重新進行測試,而測試數(shù)據(jù)已經(jīng)產(chǎn)生了一定程度的變化,會影響到后續(xù)的測試進程,導(dǎo)致測試人員需要手工刪除批量插入的數(shù)據(jù)及其流轉(zhuǎn)過程中產(chǎn)生的新數(shù)據(jù),占用大量的測試時間并且容易出現(xiàn)錯刪漏刪的現(xiàn)象。
本文提出的方案按功能劃分由以下六個模塊組成:
(1)抽數(shù)提取模塊。抽數(shù)提取模塊用于將數(shù)據(jù)庫表變動的信息明細(xì)提供給聚合分析模塊使用。其原理是利用CDC抽數(shù)獲得數(shù)據(jù)變化的日志信息,依據(jù)日志中的數(shù)據(jù)變化明細(xì)生成操作表、操作類型、操作前后狀態(tài)等信息,然后發(fā)送至消息隊列中間件。
(2)數(shù)據(jù)工廠模塊。數(shù)據(jù)工廠負(fù)責(zé)創(chuàng)建單條或批量生成數(shù)據(jù)的任務(wù),并將數(shù)據(jù)生成任務(wù)與數(shù)據(jù)生成的結(jié)果關(guān)聯(lián)起來,便于后續(xù)針對單個數(shù)據(jù)生成任務(wù)進行監(jiān)控和聚合分析。
(3)監(jiān)控配置模塊。針對某個數(shù)據(jù)生成任務(wù)中生成的某些數(shù)據(jù),即需要關(guān)注的測試數(shù)據(jù),可以設(shè)定特定的監(jiān)控和聚合分析配置規(guī)則,如監(jiān)控流水表中支付狀態(tài)字段的插入和更新情況,隨后便可以以表名、監(jiān)控字段和操作類型為標(biāo)記進行聚合統(tǒng)計分析。此模塊生成的配置規(guī)則,會傳遞到聚合分析模塊后生效。
(4)聚合分析模塊。如圖1所示當(dāng)聚合分析模塊從消息隊列中間件獲取數(shù)據(jù)后,會根據(jù)監(jiān)控配置模塊配置的規(guī)則,篩選過濾特定表、特定操作類型及關(guān)注字段的變動信息,進行數(shù)據(jù)歸類匯總并進行數(shù)量和比例的統(tǒng)計,從業(yè)務(wù)角度統(tǒng)計出測試過程中數(shù)據(jù)表中數(shù)據(jù)的變動。
圖1 數(shù)據(jù)流轉(zhuǎn)關(guān)系圖
(5)數(shù)據(jù)恢復(fù)模塊。數(shù)據(jù)恢復(fù)模塊可以依據(jù)數(shù)據(jù)流轉(zhuǎn)關(guān)系,即測試流程中數(shù)據(jù)的傳遞和變化涉及的,自動在數(shù)據(jù)批量生成開始前生成備份表,支持?jǐn)?shù)據(jù)恢復(fù)和備份表自動刪除等功能。
(6)交互展示模塊。交互展示模塊可以配置需要監(jiān)控的數(shù)據(jù)表、操作類型、關(guān)注字段等配置,同時會將數(shù)據(jù)表變動的結(jié)果直觀地展示出來。
整個系統(tǒng)執(zhí)行的流程步驟如圖2所示:
圖2 系統(tǒng)流程圖
步驟1:測試人員在測試平臺中的數(shù)據(jù)工廠模塊配置需要批量添加的數(shù)據(jù),并添加數(shù)據(jù)流轉(zhuǎn)相關(guān)的表,點擊生成后自動對相關(guān)表進行備份,隨后開始批量生成數(shù)據(jù),生成數(shù)據(jù)結(jié)束后配置要監(jiān)控的數(shù)據(jù)表、操作類型、關(guān)注字段等信息并點擊開始監(jiān)控。
步驟2:測試平臺在收到開始監(jiān)控的命令后會開始獲取消息隊列中間件中當(dāng)前時間之后的數(shù)據(jù)變動信息,并根據(jù)配置的聚合分析規(guī)則開始實時聚合分析。
步驟3:當(dāng)測試過程結(jié)束后,測試人員點擊監(jiān)控結(jié)束,平臺接收到請求后終止接收消息隊列中間件數(shù)據(jù),并將期間收集到的信息,依據(jù)數(shù)據(jù)表、操作類型、關(guān)注字段等配置將數(shù)據(jù)歸類匯總,生成測試過程中數(shù)據(jù)流轉(zhuǎn)的整體結(jié)果,并展示在前端頁面。
步驟4:測試人員依據(jù)前端展示的數(shù)據(jù)流轉(zhuǎn)結(jié)果對測試結(jié)果進行判斷,如果認(rèn)為結(jié)果存在問題,則可以點擊數(shù)據(jù)恢復(fù),平臺收到請求后會清空關(guān)聯(lián)的所有數(shù)據(jù)庫表,并將備份表中數(shù)據(jù)復(fù)制進原表中;如果認(rèn)為測試結(jié)果不存在問題,則在一段時間后,自動刪除該備份表。
要實現(xiàn)數(shù)據(jù)庫表數(shù)據(jù)監(jiān)控還可以通過觸發(fā)器實現(xiàn),而CDC抽數(shù)相對觸發(fā)器的方式有以下優(yōu)點:
(1)通過CDC抽數(shù)的方式更加容易實現(xiàn)[5-6],只需要配置CDC即可將數(shù)據(jù)發(fā)送至消息隊列中間件,而觸發(fā)器需要針對表和字段進行配置,需要表級、字段級去手動維護,需要使用JMS監(jiān)聽Oracle AQ才可以實現(xiàn)相同的效果。
(2)成本更低。如圖3所示,CDC本身就可以將數(shù)據(jù)轉(zhuǎn)化為容易處理的json格式,而觸發(fā)器一般需要提供一個轉(zhuǎn)換工廠類將Oracle類型轉(zhuǎn)換為Java類型才可以進行處理。
圖3 數(shù)據(jù)格式圖
(3)占用資源更少。觸發(fā)器的使用需要占用額外的數(shù)據(jù)庫及系統(tǒng)資源,而CDC僅捕獲數(shù)據(jù)變化的日志信息,可以一定程度上降低系統(tǒng)資源的消耗。
本文提出的方案將數(shù)據(jù)工廠和CDC抽數(shù)相結(jié)合,先通過CDC抽數(shù)將數(shù)據(jù)庫數(shù)據(jù)的變化提取出來,然后通過聚合分析將符合條件的數(shù)據(jù)進行匯總展示,可以方便地查看測試結(jié)果,定位錯誤點,方便代碼優(yōu)化和問題排查。同時對數(shù)據(jù)變動的實時收集和實時分析,使得測試人員能夠在關(guān)注數(shù)據(jù)終態(tài)之外同時關(guān)注測試數(shù)據(jù)的變動過程,擴大測試的有效范圍;同時在生成數(shù)據(jù)時自動對涉及的關(guān)聯(lián)表進行備份,幫助測試人員對數(shù)據(jù)進行還原,更加方便可靠地將測試數(shù)據(jù)初始化。