本申請涉及數(shù)據(jù)庫,具體涉及一種數(shù)據(jù)庫請求的模擬方法及裝置。
背景技術(shù):
1、mock可以用于軟件開發(fā)和測試過程中,模擬系統(tǒng)組件或服務(wù),便于開發(fā)、測試和調(diào)試階段,特別是在微服務(wù)架構(gòu)、客戶端-服務(wù)器應(yīng)用以及需要與外部api交互的系統(tǒng)中。當(dāng)前接口管理工具如postman、apifox等都已經(jīng)內(nèi)置了mock功能,其主要支持http/https協(xié)議以模擬傳統(tǒng)http接口和restful風(fēng)格接口的相關(guān)功能。moco和powermock作為開源的mock工具,分別提供了對socket協(xié)議和grpc接口的支持。
2、但當(dāng)前現(xiàn)有的各種mock工具都缺少對數(shù)據(jù)庫協(xié)議的支持,使得在進行產(chǎn)品研發(fā)、測試支持的時候會存在以下局限性:
3、1)網(wǎng)絡(luò)請求往往存在較長的調(diào)用鏈路,除常見的http、grpc等接口外,數(shù)據(jù)庫請求同樣是鏈路中的重要一環(huán),若無法進行數(shù)據(jù)庫請求的mock模擬,當(dāng)測試環(huán)境數(shù)據(jù)庫表結(jié)構(gòu)落后,數(shù)據(jù)庫請求會直接報錯;或者,當(dāng)測試環(huán)境數(shù)據(jù)庫表中數(shù)據(jù)不足或不滿足業(yè)務(wù)需求時,調(diào)用鏈路無法繼續(xù)向下推進;
4、2)寫請求會給測試環(huán)境數(shù)據(jù)庫帶來大量的臟數(shù)據(jù),還需要通過使用影子庫或者影子表的方式來代替測試環(huán)境數(shù)據(jù)庫,以避免臟數(shù)據(jù)的產(chǎn)生、數(shù)據(jù)唯一索引沖突等問題。但影子庫或者影子表對于前期準備過程而言,其投入過大,并且對于唯一索引,還需要每次回放都新建影子表才能滿足需求,不僅使回放鏈路變得復(fù)雜,而且加大了資源的消耗。
技術(shù)實現(xiàn)思路
1、鑒于上述問題,提出了本申請實施例以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)庫請求的模擬方法及裝置。
2、根據(jù)本申請實施例的第一方面,提供了一種數(shù)據(jù)庫請求的模擬方法,其包括:
3、由數(shù)據(jù)庫中間件接收應(yīng)用服務(wù)的數(shù)據(jù)庫請求,基于數(shù)據(jù)庫協(xié)議對數(shù)據(jù)庫請求進行解析,得到數(shù)據(jù)庫命令的操作類型以及數(shù)據(jù)庫執(zhí)行語句;
4、根據(jù)操作類型,確定數(shù)據(jù)庫執(zhí)行語句是否包含業(yè)務(wù)處理邏輯;
5、若包含業(yè)務(wù)處理邏輯,將數(shù)據(jù)庫執(zhí)行語句傳遞給規(guī)則引擎,由規(guī)則引擎將數(shù)據(jù)庫執(zhí)行語句與預(yù)設(shè)匹配規(guī)則進行匹配,得到匹配的模擬數(shù)據(jù);
6、將匹配的模擬數(shù)據(jù)返回給構(gòu)造模塊,由構(gòu)造模塊根據(jù)匹配的模擬數(shù)據(jù)構(gòu)建得到與數(shù)據(jù)庫請求對應(yīng)的模擬返回結(jié)果,以返回給應(yīng)用服務(wù)。
7、可選地,方法還包括:
8、啟動數(shù)據(jù)庫中間件,并與數(shù)據(jù)庫建立連接,構(gòu)建數(shù)據(jù)庫實例會話,以請求數(shù)據(jù)庫;其中,數(shù)據(jù)庫中間件根據(jù)預(yù)設(shè)配置文件或者依賴服務(wù)傳遞的數(shù)據(jù)庫信息啟動;數(shù)據(jù)庫中間件基于數(shù)據(jù)庫協(xié)議與數(shù)據(jù)庫建立連接,應(yīng)用服務(wù)經(jīng)由數(shù)據(jù)庫中間件訪問數(shù)據(jù)庫。
9、可選地,數(shù)據(jù)庫協(xié)議預(yù)先定義數(shù)據(jù)庫請求的報文格式;
10、由數(shù)據(jù)庫中間件接收應(yīng)用服務(wù)的數(shù)據(jù)庫請求,基于數(shù)據(jù)庫協(xié)議對數(shù)據(jù)庫請求進行解析,得到數(shù)據(jù)庫命令的操作類型以及數(shù)據(jù)庫執(zhí)行語句進一步包括:
11、由數(shù)據(jù)庫中間件接收應(yīng)用服務(wù)的數(shù)據(jù)庫請求;數(shù)據(jù)庫請求包括請求報文;
12、基于數(shù)據(jù)庫協(xié)議對數(shù)據(jù)庫請求的請求報文進行解析,根據(jù)報文格式獲取數(shù)據(jù)庫請求包含的數(shù)據(jù)庫命令的操作類型以及數(shù)據(jù)庫執(zhí)行語句。
13、可選地,根據(jù)操作類型,確定數(shù)據(jù)庫執(zhí)行語句是否包含業(yè)務(wù)處理邏輯進一步包括:
14、判斷操作類型是否為預(yù)設(shè)操作類型;
15、若是預(yù)設(shè)操作類型,確定數(shù)據(jù)庫執(zhí)行語句包含業(yè)務(wù)處理邏輯。
16、可選地,若數(shù)據(jù)庫執(zhí)行語句不包含業(yè)務(wù)處理邏輯,方法還包括:
17、根據(jù)數(shù)據(jù)庫執(zhí)行語句訪問數(shù)據(jù)庫,并返回對應(yīng)的數(shù)據(jù)庫結(jié)果。
18、可選地,將數(shù)據(jù)庫執(zhí)行語句傳遞給規(guī)則引擎,由規(guī)則引擎將數(shù)據(jù)庫執(zhí)行語句與預(yù)設(shè)匹配規(guī)則進行匹配,得到匹配的模擬數(shù)據(jù)進一步包括:
19、由規(guī)則引擎將數(shù)據(jù)庫執(zhí)行語句與預(yù)設(shè)匹配規(guī)則進行匹配,基于預(yù)設(shè)的多個模擬數(shù)據(jù),確定匹配的模擬數(shù)據(jù);預(yù)設(shè)匹配規(guī)則包括請求匹配、語句匹配和/或字段匹配;匹配的模擬數(shù)據(jù)包括數(shù)據(jù)值和數(shù)據(jù)類型。
20、可選地,將匹配的模擬數(shù)據(jù)返回給構(gòu)造模塊,由構(gòu)造模塊根據(jù)匹配的模擬數(shù)據(jù)構(gòu)建得到與數(shù)據(jù)庫請求對應(yīng)的模擬返回結(jié)果進一步包括:
21、構(gòu)造模塊根據(jù)匹配的模擬數(shù)據(jù)中包含的數(shù)據(jù)類型,將匹配的模擬數(shù)據(jù)中的數(shù)據(jù)類型轉(zhuǎn)換為模擬返回結(jié)果所需的數(shù)據(jù)類型,基于轉(zhuǎn)換后的匹配的模擬數(shù)據(jù)構(gòu)建得到與數(shù)據(jù)庫請求對應(yīng)的模擬返回結(jié)果。
22、可選地,數(shù)據(jù)庫包括關(guān)系型數(shù)據(jù)庫。
23、根據(jù)本申請實施例的第二方面,提供了一種數(shù)據(jù)庫請求的模擬裝置,其包括:
24、數(shù)據(jù)庫中間件,用于由數(shù)據(jù)庫中間件接收應(yīng)用服務(wù)的數(shù)據(jù)庫請求,基于數(shù)據(jù)庫協(xié)議對數(shù)據(jù)庫請求進行解析,得到數(shù)據(jù)庫命令的操作類型以及數(shù)據(jù)庫執(zhí)行語句;根據(jù)操作類型,確定數(shù)據(jù)庫執(zhí)行語句是否包含業(yè)務(wù)處理邏輯;
25、規(guī)則引擎,用于若包含業(yè)務(wù)處理邏輯,將數(shù)據(jù)庫執(zhí)行語句與預(yù)設(shè)匹配規(guī)則進行匹配,得到匹配的模擬數(shù)據(jù);
26、構(gòu)造模塊,用于根據(jù)匹配的模擬數(shù)據(jù)構(gòu)建得到與數(shù)據(jù)庫請求對應(yīng)的模擬返回結(jié)果,以返回給應(yīng)用服務(wù)。
27、根據(jù)本申請實施例的第三方面,提供了一種計算設(shè)備,包括:處理器、存儲器、通信接口和通信總線,所述處理器、所述存儲器和所述通信接口通過所述通信總線完成相互間的通信;
28、所述存儲器用于存放至少一可執(zhí)行指令,所述可執(zhí)行指令使所述處理器執(zhí)行上述數(shù)據(jù)庫請求的模擬方法對應(yīng)的操作。
29、根據(jù)本申請實施例的第四方面,提供了一種計算機存儲介質(zhì),所述存儲介質(zhì)中存儲有至少一可執(zhí)行指令,所述可執(zhí)行指令使處理器執(zhí)行如上述數(shù)據(jù)庫請求的模擬方法對應(yīng)的操作。
30、根據(jù)本申請實施例的第五方面,提供了一種計算機程序產(chǎn)品,包括至少一可執(zhí)行指令,所述可執(zhí)行指令使處理器執(zhí)行如上述數(shù)據(jù)庫請求的模擬方法對應(yīng)的操作。
31、根據(jù)本申請的提供的數(shù)據(jù)庫請求的模擬方法及裝置,通過數(shù)據(jù)庫中間件避免了待測試的應(yīng)用服務(wù)與數(shù)據(jù)庫的直接連接,無需關(guān)注應(yīng)用服務(wù)使用的語言以及使用的數(shù)據(jù)庫框架,不侵入應(yīng)用服務(wù)代碼,實現(xiàn)與數(shù)據(jù)庫連接等前置操作,獲取數(shù)據(jù)庫請求進行解析,攔截數(shù)據(jù)庫執(zhí)行語句,為其匹配模擬數(shù)據(jù),構(gòu)造模擬返回數(shù)據(jù),實現(xiàn)對數(shù)據(jù)庫請求的模擬,整個過程無需關(guān)注被測環(huán)境數(shù)據(jù)庫的表結(jié)構(gòu)、表中數(shù)據(jù),也無需準備影子庫、影子表等以規(guī)避寫請求帶來的臟數(shù)據(jù)問題。
32、上述說明僅是本申請技術(shù)方案的概述,為了能夠更清楚了解本申請的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本申請的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本申請的具體實施方式。
1.一種數(shù)據(jù)庫請求的模擬方法,其包括:
2.根據(jù)權(quán)利要求1所述的方法,其中,所述方法還包括:
3.根據(jù)權(quán)利要求1所述的方法,其中,所述數(shù)據(jù)庫協(xié)議預(yù)先定義所述數(shù)據(jù)庫請求的報文格式;
4.根據(jù)權(quán)利要求1所述的方法,其中,所述根據(jù)所述操作類型,確定所述數(shù)據(jù)庫執(zhí)行語句是否包含業(yè)務(wù)處理邏輯進一步包括:
5.根據(jù)權(quán)利要求1-4中任一項所述的方法,其中,若所述數(shù)據(jù)庫執(zhí)行語句不包含業(yè)務(wù)處理邏輯,所述方法還包括:
6.根據(jù)權(quán)利要求1-5中任一項所述的方法,其中,所述將所述數(shù)據(jù)庫執(zhí)行語句傳遞給規(guī)則引擎,由所述規(guī)則引擎將所述數(shù)據(jù)庫執(zhí)行語句與預(yù)設(shè)匹配規(guī)則進行匹配,得到匹配的模擬數(shù)據(jù)進一步包括:
7.根據(jù)權(quán)利要求1-6中任一項所述的方法,其中,所述將所述匹配的模擬數(shù)據(jù)返回給構(gòu)造模塊,由所述構(gòu)造模塊根據(jù)所述匹配的模擬數(shù)據(jù)構(gòu)建得到與所述數(shù)據(jù)庫請求對應(yīng)的模擬返回結(jié)果進一步包括:
8.根據(jù)權(quán)利要求1-7中任一項所述的方法,其中,所述數(shù)據(jù)庫包括關(guān)系型數(shù)據(jù)庫。
9.一種數(shù)據(jù)庫請求的模擬裝置,其包括:
10.一種計算設(shè)備,包括:處理器、存儲器、通信接口和通信總線,所述處理器、所述存儲器和所述通信接口通過所述通信總線完成相互間的通信;
11.一種計算機存儲介質(zhì),所述存儲介質(zhì)中存儲有至少一可執(zhí)行指令,所述可執(zhí)行指令使處理器執(zhí)行如權(quán)利要求1-8中任一項所述的數(shù)據(jù)庫請求的模擬方法對應(yīng)的操作。
12.一種計算機程序產(chǎn)品,包括至少一可執(zhí)行指令,所述可執(zhí)行指令使處理器執(zhí)行如權(quán)利要求1-8中任一項所述的數(shù)據(jù)庫請求的模擬方法對應(yīng)的操作。