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