本發(fā)明涉及軟件測試技術(shù)領(lǐng)域,更為具體而言,涉及一種模擬服務(wù)的方法和系統(tǒng)。
背景技術(shù):
隨著軟件開發(fā)的不斷發(fā)展,開發(fā)人員正在追求兼容性強、高效、便捷且準(zhǔn)確的數(shù)據(jù)處理方式。然而,如圖1所示,現(xiàn)在很多l(xiāng)inux后臺服務(wù)類模塊測試中,經(jīng)常會遇到被測模塊需要通過接口調(diào)用其它模塊的情況,大多數(shù)時候,我們可以直接連接被調(diào)用的模塊來進行測試。但是,有時這并不是個好主意,例如:被調(diào)用的模塊部署成本很高、操作比較繁瑣、數(shù)據(jù)構(gòu)造困難、性能不夠好等,更重要的是一些接口的異常情況可能根本無法直接模擬。
所以,在實際測試中,開發(fā)人員不得不自己編寫一些樁程序來模擬被調(diào)用模塊的行為。然而,所有的樁程序都大同小異,只是具體的接口協(xié)議不同而已,而像鏈接管理、配置管理、日志管理等工作,完全都是一樣的。因此,開發(fā)人員正在尋求某種方式,在構(gòu)造一個樁程序時,將相同的部分抽離出來,只需要考慮接口的邏輯,從而節(jié)省大量重復(fù)的工作。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中測試程序開發(fā)中對后端接口聯(lián)調(diào)調(diào)用的依賴所導(dǎo)致的開發(fā)成本高、不易管理和維護的問題,本發(fā)明的實施方式提供了一種用于消息處理方法和系統(tǒng)。
一方面,本發(fā)明實施方式提供了一種模擬服務(wù)的方法,所述方法包括:
接收客戶端發(fā)送的請求;
根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
在本發(fā)明的一些實施方式中,所述模擬環(huán)境為根據(jù)不同請求的源ip區(qū)分的不同的模擬規(guī)則分組。
在本發(fā)明的一些實施方式中,所述模擬規(guī)則定義了請求與相應(yīng)的模擬響應(yīng)的描述。
在本發(fā)明的一些實施方式中,所述請求的源ip到所述模擬環(huán)境的映射存儲于模擬配置文件中。
在本發(fā)明的一些實施方式中,根據(jù)所述請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名包括:
解析所述接收的請求解析出該請求的源ip;
根據(jù)所述模擬配置文件中源ip到模擬環(huán)境的映射獲取所述解析出的源ip對應(yīng)的模擬環(huán)境的獨立環(huán)境名。
在本發(fā)明的一些實施方式中,所述根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則包括:
獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;
遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則。
在本發(fā)明的一些實施方式中,所述遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則包括:
選擇所有模擬規(guī)則中的一條模擬規(guī)則;
判斷所述接收的請求是否符合所選擇的模擬規(guī)則;
如果所述接收的請求符合所選擇的模擬規(guī)則,則執(zhí)行所述根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)的處理。
在本發(fā)明的一些實施方式中,所述遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則還包括:
如果所述接收的請求不符合所選擇的模擬規(guī)則,則判斷是否還有其他模擬規(guī)則;
如果還有其他模擬規(guī)則,則選擇另一條模擬規(guī)則,并回到執(zhí)行所述判斷所述接收的請求是否符合所選擇的模擬規(guī)則的處理;
如果沒有其他模擬規(guī)則,則向客戶端返回預(yù)定義錯誤的提示。
相應(yīng)的,本發(fā)明實施方式還提供了一種模擬范圍系統(tǒng),所述系統(tǒng)包括:
請求接收模塊,用于接收客戶端發(fā)送的請求;
第一獲取模塊,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
在本發(fā)明的一些實施方式中,所述模擬環(huán)境為根據(jù)不同請求的源ip區(qū)分的不同的模擬規(guī)則分組。
在本發(fā)明的一些實施方式中,所述模擬規(guī)則定義了請求與相應(yīng)的模擬響應(yīng)的描述。
在本發(fā)明的一些實施方式中,所述請求的源ip到所述模擬環(huán)境的映射存儲于模擬配置文件中。
在本發(fā)明的一些實施方式中,所述第一獲取模塊包括:
解析單元,用于解析所述接收的請求解析出該請求的源ip;
第一獲取單元,用于根據(jù)所述模擬配置文件中源ip到模擬環(huán)境的映射獲取所述解析出的源ip對應(yīng)的模擬環(huán)境的獨立環(huán)境名。
在本發(fā)明的一些實施方式中,所述第二獲取模塊包括:
第二獲取單元,用于獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;
查找單元,用于遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則。
在本發(fā)明的一些實施方式中,所述查找單元包括:
第一選擇子單元,用于選擇所有模擬規(guī)則中的一條模擬規(guī)則;
第一判斷子單元,用于判斷所述接收的請求是否符合所選擇的模擬規(guī)則;
第一執(zhí)行子單元,用于如果所述接收的請求符合所選擇的模擬規(guī)則,則執(zhí)行所述根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)的處理。
在本發(fā)明的一些實施方式中,所述查找單元還包括:
第二判斷子單元,用于如果所述接收的請求不符合所選擇的模擬規(guī)則,則判斷是否還有其他模擬規(guī)則;
第二執(zhí)行子單元,用于如果還有其他模擬規(guī)則,則選擇另一條模擬規(guī)則,并回到執(zhí)行所述判斷所述接收的請求是否符合所選擇的模擬規(guī)則的處理;
錯誤返回子單元,用于如果沒有其他模擬規(guī)則,則向客戶端返回預(yù)定義錯誤的提示。
實施本發(fā)明的各種實施方式具有以下有益效果:可解決對后端接口聯(lián)調(diào)調(diào)用的依賴,大大提高前后端開發(fā)聯(lián)調(diào)效率,更加靈活、簡單、方便的管理模擬接口。
附圖說明
圖1是現(xiàn)有技術(shù)中被測系統(tǒng)與各依賴服務(wù)的聯(lián)調(diào)關(guān)系圖;
圖2是應(yīng)用本發(fā)明所述模擬服務(wù)的方法時被測系統(tǒng)與各依賴服務(wù)的聯(lián)調(diào)關(guān)系圖;
圖3是根據(jù)本發(fā)明一種實施方式的模擬服務(wù)方法的流程示意圖;
圖4是根據(jù)本發(fā)明實施例二的模擬服務(wù)方法的流程示意圖;
圖5是根據(jù)本發(fā)明實施例三的模擬服務(wù)方法的流程示意圖;
圖6是根據(jù)本發(fā)明實施例四的模擬服務(wù)方法的流程示意圖
圖7是根據(jù)本發(fā)明實施例五的模擬服務(wù)方法的流程示意圖
圖8是根據(jù)本發(fā)明實施方式的一種模擬服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖;
圖9是圖8所示系統(tǒng)中所述第一獲取模塊的結(jié)構(gòu)示意圖;
圖10是圖8所示系統(tǒng)中所述第二獲取模塊的結(jié)構(gòu)示意圖;
圖11是圖8所示系統(tǒng)中所述查找單元的結(jié)構(gòu)示意圖。
具體實施方式
以下結(jié)合附圖和具體實施方式對本發(fā)明的各個方面進行詳細闡述。其中,眾所周知的模塊、單元及其相互之間的連接、鏈接、通信或操作沒有示出或未作詳細說明。并且,所描述的特征、架構(gòu)或功能可在一個或一個以上實施方式中以任何方式組合。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,下述的各種實施方式只用于舉例說明,而非用于限制本發(fā)明的保護范圍。還可以容易理解,本文所述和附圖所示的各實施方式中的模塊或單元或處理方式可以按各種不同配置進行組合和設(shè)計。
術(shù)語解釋:
stub:樁程序,指用來替換一部分功能的程序段。樁程序可以用來模擬已有程序的行為(比如一個遠端機器的過程)或是對將要開發(fā)的代碼的一種臨時替代。因此,打樁技術(shù)在程序移植、分布式計算、通用軟件開發(fā)和測試中用處很大。
mock:模擬,是以可控的方式模擬真實對象行為的假的對象。通常創(chuàng)造模擬對象來測試其他對象的行為。
mock規(guī)則:定義http/httpsapi請求及相應(yīng)模擬響應(yīng)的一份描述。
mock環(huán)境:根據(jù)請求來源ip來區(qū)分的mock規(guī)則分組。mockserver可以定義多套mock環(huán)境,各套環(huán)境間相互隔離。同一個ip只能對應(yīng)一個mock環(huán)境,不同的ip可以對應(yīng)同一個mock環(huán)境。
nginx:一個高性能的http和反向代理服務(wù)器。
圖2是應(yīng)用本發(fā)明所述模擬服務(wù)的方法時被測系統(tǒng)與各依賴服務(wù)的聯(lián)調(diào)關(guān)系圖;參見圖2可知,mockserver是一個模擬的服務(wù)器,能針對不同接口構(gòu)建各種假數(shù)據(jù)(即屬被測系統(tǒng)與依賴服務(wù)的中間層,提供依賴服務(wù)的模擬構(gòu)造),再利用構(gòu)建的假數(shù)據(jù)進行開發(fā),最終幫助開發(fā)工程師實現(xiàn)低成本、高回報的前后端分離開發(fā)工程。mockserver的前端應(yīng)用html/css/js,而后端邏輯主要應(yīng)用java+apachehttpclient實現(xiàn),包含幾個核心組件:協(xié)議(http/https/rpc)、存儲,編譯成war包部署在tomcat運行提供服務(wù)。開發(fā)mockserver,提供基于request(請求)及相應(yīng)response(響應(yīng))的靈活配置方法,豐富的mock規(guī)則,真實的請求延時,不同的mock環(huán)境,實現(xiàn)通用的mock服務(wù),例如:模擬請求、模擬請求延時、模擬請轉(zhuǎn)發(fā)和模擬回調(diào)等。
在實際應(yīng)用中,對于某些不容易構(gòu)造、獲取的對象,創(chuàng)建一個虛擬的對象調(diào)用以便測試的方法。mockserver由admin管理配置web頁面和通用stub組成。admin提供webui配置頁面,增加/刪除請求源ip到mock環(huán)境的映射關(guān)系,對不同環(huán)境中的mock規(guī)則提供增刪改查操作。stub提供通用樁服務(wù),對被測系統(tǒng)的各類httpapi請求調(diào)用,返回預(yù)先定義的模擬響應(yīng)。為了提高樁服務(wù)的通吐能力,讓樁服務(wù)能在被測系統(tǒng)壓力測試中有好的性能表現(xiàn),可開啟多個樁服務(wù),通過nginx做負(fù)載均衡。
實施例1:
圖3是根據(jù)本發(fā)明一種實施方式的模擬服務(wù)方法的流程示意圖;參見圖3,所述方法包括:
步驟s11,接收客戶端發(fā)送的請求;
步驟s12,根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
步驟s13,根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
步驟s14,根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
在本發(fā)明的一些實施方式中,所述模擬環(huán)境為根據(jù)不同請求的源ip區(qū)分的不同的模擬規(guī)則分組。
在本發(fā)明的一些實施方式中,所述模擬規(guī)則定義了請求與相應(yīng)的模擬響應(yīng)的描述。
在本發(fā)明的一些實施方式中,所述請求的源ip到所述模擬環(huán)境的映射存儲于模擬配置文件中。將請求源ip到mock環(huán)境的映射存儲到mockenv.conf中,mockenv.conf的每一行定義了一條映射,如:10.0.0.1測試環(huán)境這條映射表明來源是10.0.0.1的請求,使用mock環(huán)境名為test的測試環(huán)境的mock規(guī)則。將配置的mock規(guī)則存放到<對應(yīng)mock環(huán)境名>.xml中,如:test.xml規(guī)則的存儲的是test環(huán)境的mock規(guī)則。
在實際應(yīng)用中,模擬(mock)規(guī)則包含規(guī)則名稱、請求、響應(yīng)、環(huán)境等,請求需關(guān)聯(lián)url、method。對于請求,如果是符合特定規(guī)則的請求才被mock,則需定義匹配的headers/parameters/body,以正則匹配的形式。對于響應(yīng),如果選擇“返回真實響應(yīng)”,則需要關(guān)注延時(返回請求所需的sleep時間,單位毫秒)。statuscode對應(yīng)返回碼,如200、404。format指數(shù)據(jù)返回格式,如json、html、xml等。mock規(guī)則是自定義且豐富的,即接口數(shù)據(jù)定義的規(guī)則,具體的計算機編譯程序如下:
mock規(guī)則的名稱是test,url匹配路徑是/api/test/.*,請求方法包含get/post/put/delete,paramters參數(shù)的名稱是name,值是test.*,請求header名稱是nb_testid,值是1b[0-9a-za-z]+,reponse請求響應(yīng)時間延遲1000ms,請求響應(yīng)狀態(tài)碼為200,返回數(shù)據(jù)格式為json。定義規(guī)則,生成標(biāo)準(zhǔn)的xml格式文件。規(guī)則適應(yīng)于各種數(shù)據(jù)類型接口,只需在如上圖xml文件定義即可。
實施例2:
圖4是根據(jù)本發(fā)明實施例二的模擬服務(wù)方法的流程示意圖;參見圖4,根據(jù)本實施例,所述模擬服務(wù)方法包括:
步驟s21,接收客戶端發(fā)送的請求;
步驟s221,解析所述接收的請求解析出該請求的源ip;
步驟s222,根據(jù)所述模擬配置文件中源ip到模擬環(huán)境的映射獲取所述解析出的源ip對應(yīng)的模擬環(huán)境的獨立環(huán)境名;
步驟s23,根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
步驟s24,根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
實施例3:
圖5是根據(jù)本發(fā)明實施例三的模擬服務(wù)方法的流程示意圖。根據(jù)本實施例,所述模擬服務(wù)方法包括:
步驟s31,接收客戶端發(fā)送的請求;
步驟s32,根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
步驟s331,獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;
步驟s332,遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則
步驟s34,根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
當(dāng)一個請求發(fā)送到mockstub時,mockstub會根據(jù)請求的源ip找到匹配的獨立環(huán)境名,再根據(jù)獨立環(huán)境名獲取所有預(yù)定義的mock規(guī)則,遍歷這些mock規(guī)則,如果找到一條規(guī)則與接受的請求匹配,那么返回預(yù)定義的模擬響應(yīng)。如果找不到規(guī)則匹配,則返回404錯誤。規(guī)則匹配是根據(jù)請求中的uri/method/headers/parameters/body是否與mock規(guī)則中定義的對應(yīng)字段正則匹配來定的。
實施例4:
圖6是根據(jù)本發(fā)明實施例四的模擬服務(wù)方法的流程示意圖,參見圖6,根據(jù)本實施例,所述模擬服務(wù)方法包括:
步驟s41,接收客戶端發(fā)送的請求;
步驟s42,根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
步驟s431,選擇所有模擬規(guī)則中的一條模擬規(guī)則;
步驟s432,判斷所述接收的請求是否符合所選擇的模擬規(guī)則;
步驟s433,如果所述接收的請求符合所選擇的模擬規(guī)則,則執(zhí)行所述根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)的處理;步驟s44,根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
實施例5:
圖7是根據(jù)本發(fā)明實施例五的模擬服務(wù)方法的流程示意圖,參見圖7,其中,根據(jù)本實施例,所述模擬服務(wù)方法包括:
步驟s51,接收客戶端發(fā)送的請求;
步驟s52,根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
步驟s531,如果所述接收的請求不符合所選擇的模擬規(guī)則,則判斷是否還有其他模擬規(guī)則;
步驟s532,如果還有其他模擬規(guī)則,則選擇另一條模擬規(guī)則,并回到執(zhí)行所述判斷所述接收的請求是否符合所選擇的模擬規(guī)則的處理;
步驟s533,如果沒有其他模擬規(guī)則,則向客戶端返回預(yù)定義錯誤的提示;
步驟s54,根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
在實際應(yīng)用中,客戶端發(fā)送http請求至mockserver,解析請求來源ip,獲取mockserver本地對應(yīng)的獨立環(huán)境。獲取環(huán)境定義的所有mock規(guī)則,默認(rèn)選擇第一條mock規(guī)則。判斷http請求是否符合第一條規(guī)則,符合,則返回預(yù)先定義的模擬響應(yīng)。不符合,則返回預(yù)定義錯誤,如:404。對于mock規(guī)則的創(chuàng)建、刪除,除頁面配置外,mockserver提供sdk方式,用戶可通過編碼方式調(diào)用mockserver。
實施本發(fā)明所述方法的實施方式,可得到如下有益效果:解決前后端分離開發(fā)中接口調(diào)用和數(shù)據(jù)構(gòu)造依賴,將大大提高前后端開發(fā)的效率;化繁為簡,將復(fù)雜繁瑣的樁模塊開發(fā)變得簡單、靈活和配置管理化。
實施例6:
圖8是根據(jù)本發(fā)明實施方式的模擬服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖;參見圖8,所述系統(tǒng)包括:
請求接收模塊100,用于接收客戶端發(fā)送的請求;
第一獲取模塊200,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊300,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊400,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
在本發(fā)明的實施方式中,所述模擬環(huán)境為根據(jù)不同請求的源ip區(qū)分的不同的模擬規(guī)則分組。
在本發(fā)明的實施方式中,所述模擬規(guī)則定義了請求與相應(yīng)的模擬響應(yīng)的描述。
在本發(fā)明的實施方式中,所述請求的源ip到所述模擬環(huán)境的映射存儲于模擬配置文件中。將請求源ip到mock環(huán)境的映射存儲到mockenv.conf中,mockenv.conf的每一行定義了一條映射,如:10.0.0.1測試環(huán)境這條映射表明來源是10.0.0.1的請求,使用mock環(huán)境名為test的測試環(huán)境的mock規(guī)則。將配置的mock規(guī)則存放到<對應(yīng)mock環(huán)境名>.xml中,如:test.xml規(guī)則的存儲的是test環(huán)境的mock規(guī)則。
在實際應(yīng)用中,模擬(mock)規(guī)則包含規(guī)則名稱、請求、響應(yīng)、環(huán)境等,請求需關(guān)聯(lián)url、method。對于請求,如果是符合特定規(guī)則的請求才被mock,則需定義匹配的headers/parameters/body,以正則匹配的形式。
對于響應(yīng),如果選擇“返回真實響應(yīng)”,則需要關(guān)注延時(返回請求所需的sleep時間,單位毫秒)。statuscode對應(yīng)返回碼,如200、404。format指數(shù)據(jù)返回格式,如json、html、xml等。mock規(guī)則是自定義且豐富的,即接口數(shù)據(jù)定義的規(guī)則,如下:
mock規(guī)則的名稱是test,url匹配路徑是/api/test/.*,請求方法包含get/post/put/delete,paramters參數(shù)的名稱是name,值是test.*,請求header名稱是nb_testid,值是1b[0-9a-za-z]+,reponse請求響應(yīng)時間延遲1000ms,請求響應(yīng)狀態(tài)碼為200,返回數(shù)據(jù)格式為json。定義規(guī)則,生成標(biāo)準(zhǔn)的xml格式文件。規(guī)則適應(yīng)于各種數(shù)據(jù)類型接口,只需在如上圖xml文件定義即可。
實施例7:
根據(jù)本實施例,所述模擬服務(wù)系統(tǒng)包括:
請求接收模塊100,用于接收客戶端發(fā)送的請求;
第一獲取模塊200,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊300,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊400,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
圖9是圖8所示系統(tǒng)中所述第一獲取模塊的結(jié)構(gòu)示意圖;其中,如圖9所示,所述第一獲取模塊200包括:
解析單元210,用于解析所述接收的請求解析出該請求的源ip;
第一獲取單元220,用于根據(jù)所述模擬配置文件中源ip到模擬環(huán)境的映射獲取所述解析出的源ip對應(yīng)的模擬環(huán)境的獨立環(huán)境名。
實施例8:
根據(jù)本實施例,所述模擬服務(wù)系統(tǒng)包括:
請求接收模塊100,用于接收客戶端發(fā)送的請求;
第一獲取模塊200,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊300,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊400,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
圖10是圖8所示系統(tǒng)中所述第二獲取模塊的結(jié)構(gòu)示意圖;其中,如圖10所示,所述第二獲取模塊300包括:
第二獲取單元310,用于獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;
查找單元320,用于遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則。
實施例9:
根據(jù)本實施例,所述模擬服務(wù)系統(tǒng)包括:
請求接收模塊100,用于接收客戶端發(fā)送的請求;
第一獲取模塊200,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊300,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊400,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
其中,所述根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則可包括:
獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則。當(dāng)一個請求發(fā)送到mockstub時,mockstub會根據(jù)請求的源ip找到匹配的獨立環(huán)境名,再根據(jù)獨立環(huán)境名獲取所有預(yù)定義的mock規(guī)則,遍歷這些mock規(guī)則,如果找到一條規(guī)則與接受的請求匹配,那么返回預(yù)定義的模擬響應(yīng)。如果找不到規(guī)則匹配,則返回404錯誤。規(guī)則匹配是根據(jù)請求中的uri/method/headers/parameters/body是否與mock規(guī)則中定義的對應(yīng)字段正則匹配來定的。
實施例10:
根據(jù)本實施例,所述模擬服務(wù)系統(tǒng)包括:
請求接收模塊100,用于接收客戶端發(fā)送的請求;
第一獲取模塊200,用于根據(jù)所述接收的請求獲取模擬環(huán)境中對應(yīng)的獨立環(huán)境名;
第二獲取模塊300,用于根據(jù)獲得的獨立環(huán)境名獲取模擬規(guī)則;
響應(yīng)返回模塊400,用于根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)。
其中,所述第二獲取模塊300包括:
第二獲取單元310,用于獲取所述解析出的源ip對應(yīng)的模擬環(huán)境中的所有模擬規(guī)則;
查找單元320,用于遍歷所有模擬規(guī)則以查找出與所述接收的請求匹配的模擬規(guī)則。
圖11是圖5所示系統(tǒng)中所述查找單元320的結(jié)構(gòu)示意圖,其中,如圖11所示,所述查找單元320包括:
第一選擇子單元321,用于選擇所有模擬規(guī)則中的一條模擬規(guī)則;
第一判斷子單元322,用于判斷所述接收的請求是否符合所選擇的模擬規(guī)則;
第一執(zhí)行子單元323,用于如果所述接收的請求符合所選擇的模擬規(guī)則,則執(zhí)行所述根據(jù)獲得的模擬規(guī)則返回預(yù)定義的模擬響應(yīng)的處理。
另外,所述查找單元還可包括:
第二判斷子單元,用于如果所述接收的請求不符合所選擇的模擬規(guī)則,則判斷是否還有其他模擬規(guī)則;
第二執(zhí)行子單元,用于如果還有其他模擬規(guī)則,則選擇另一條模擬規(guī)則,并回到執(zhí)行所述判斷所述接收的請求是否符合所選擇的模擬規(guī)則的處理;
錯誤返回子單元,用于如果沒有其他模擬規(guī)則,則向客戶端返回預(yù)定義錯誤的提示。
需要說明的是,在實際應(yīng)用中,客戶端發(fā)送http請求至mockserver,解析請求來源ip,獲取mockserver本地對應(yīng)的獨立環(huán)境。獲取環(huán)境定義的所有mock規(guī)則,默認(rèn)選擇第一條mock規(guī)則。判斷http請求是否符合第一條規(guī)則,符合,則返回預(yù)先定義的模擬響應(yīng)。不符合,則返回預(yù)定義錯誤,如:404。對于mock規(guī)則的創(chuàng)建、刪除,除頁面配置外,mockserver提供sdk方式,用戶可通過編碼方式調(diào)用mockserver。
實施本發(fā)明所述方法的實施方式,可得到如下有益效果:解決前后端分離開發(fā)中接口調(diào)用和數(shù)據(jù)構(gòu)造依賴,將大大提高前后端開發(fā)的效率;化繁為簡,將復(fù)雜繁瑣的樁模塊開發(fā)變得簡單、靈活和配置管理化。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件結(jié)合硬件平臺的方式來實現(xiàn),當(dāng)然也可以全部通過硬件來實施?;谶@樣的理解,本發(fā)明的技術(shù)方案對背景技術(shù)做出貢獻的全部或者部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,智能手機或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
本發(fā)明說明書中使用的術(shù)語和措辭僅僅為了舉例說明,并不意味構(gòu)成限定。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在不脫離所公開的實施方式的基本原理的前提下,對上述實施方式中的各細節(jié)可進行各種變化。因此,本發(fā)明的范圍只由權(quán)利要求確定,在權(quán)利要求中,除非另有說明,所有的術(shù)語應(yīng)按最寬泛合理的意思進行理解。