本發(fā)明涉及測(cè)試領(lǐng)域,特別涉及一種模擬服務(wù)的方法、裝置及集中管理平臺(tái)。
背景技術(shù):
隨著社會(huì)科學(xué)技術(shù)的發(fā)展,企業(yè)的管理內(nèi)部服務(wù)的系統(tǒng)涉及到的業(yè)務(wù)場(chǎng)景和聯(lián)調(diào)測(cè)試數(shù)據(jù)非常復(fù)雜,企業(yè)應(yīng)用的系統(tǒng)很少孤立存在,大部分系統(tǒng)都是依賴于不同軟件供應(yīng)商提供的服務(wù)拼裝到一起。而現(xiàn)有多種服務(wù)模擬框架或者系統(tǒng)基本都是需要編寫代碼而且主要是研發(fā)僅限于單元測(cè)試或者集成測(cè)試,且只支持HTTP、SOCKS等通用協(xié)議的模擬。而對(duì)于測(cè)試人員主要做是是黑盒測(cè)試,但編碼能力有限制和業(yè)務(wù)壓力,其要編寫一個(gè)mock去模擬外部服務(wù)困難重重,非常影響工作效率。特別是,一些大型互聯(lián)網(wǎng)公司,一個(gè)系統(tǒng)往往是依賴多個(gè)外部系統(tǒng),涉及到的業(yè)務(wù)場(chǎng)景和聯(lián)調(diào)測(cè)試數(shù)據(jù)非常復(fù)雜,常常會(huì)遇到以下幾種情況:1、A服務(wù)調(diào)B服務(wù),B服務(wù)由于某些原因不可用或不穩(wěn)定(例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,但是passport.api連不上導(dǎo)致無(wú)法登陸);2、A服務(wù)調(diào)B服務(wù),B服務(wù)的數(shù)據(jù)或場(chǎng)景難以構(gòu)造(例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,passport.api會(huì)在某些極端情況下返回一些錯(cuò)誤碼;3、自動(dòng)化測(cè)試時(shí),A服務(wù)調(diào)B服務(wù),由于B服務(wù)不可控,數(shù)據(jù)經(jīng)常變動(dòng)導(dǎo)致測(cè)試數(shù)據(jù)經(jīng)常變化。
因?yàn)橐陨显?,?dǎo)致因依賴外部服務(wù)而無(wú)法進(jìn)行服務(wù)操作,影響工作效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的是提出一種模擬服務(wù)的方法、裝置及集中管理平臺(tái),旨在提高模擬服務(wù)的工作效率。
為實(shí)現(xiàn)上述目的,本發(fā)明提出的一種模擬服務(wù)的方法,包括步驟:
模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng);
模擬器啟動(dòng)的與被測(cè)服務(wù)同一IP的監(jiān)聽(tīng)鏈路攔截由被測(cè)服務(wù)發(fā)出的請(qǐng)求;
解析所攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器;
模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令。
優(yōu)選地,所述模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)的步驟包括:
根據(jù)被測(cè)服務(wù)的請(qǐng)求選擇模擬測(cè)試架構(gòu),且在所選擇的模擬測(cè)試架構(gòu)中,模擬外部服務(wù)行為啟動(dòng)一個(gè)或多個(gè)不同協(xié)議服務(wù)的模擬器;
根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置,將被測(cè)服務(wù)請(qǐng)求的IP修改為模擬器的IP,以將被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;
根據(jù)模擬外部服務(wù)行為的意圖,在模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)為樁,參數(shù)化樁生成樁參數(shù)。
優(yōu)選地,所述根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置的步驟包括:若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為通用協(xié)議服務(wù),則修改DNS配置,把被測(cè)服務(wù)請(qǐng)求的IP指向模擬器的IP,配置Nginx,利用Nginx的端口映射,把被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為自定義協(xié)議服務(wù),通過(guò)OSP的靜態(tài)路由的IP和端口,把被測(cè)服務(wù)請(qǐng)求的IP直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
優(yōu)選地,所述解析攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器的步驟包括:解析所攔截的請(qǐng)求生成請(qǐng)求參數(shù);將請(qǐng)求參數(shù)轉(zhuǎn)換為統(tǒng)一的封裝不同協(xié)議的請(qǐng)求對(duì)象;傳送請(qǐng)求對(duì)象至模擬器的樁匹配器。
優(yōu)選地,所述模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令的步驟包括:樁匹配器接收解析后的請(qǐng)求;調(diào)用樁參數(shù);解析樁參數(shù),以釋放模擬匹配條件和預(yù)設(shè)響應(yīng);調(diào)用模擬匹配條件,執(zhí)行匹配命令。
優(yōu)選地,所述模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令的步驟之后包括:若匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);若匹配失敗,模擬器的樁匹配器轉(zhuǎn)發(fā)解析后的請(qǐng)求至外部服務(wù),并接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù)。
優(yōu)選地,在所述模擬器的監(jiān)聽(tīng)鏈路攔截由同一IP的被測(cè)服務(wù)發(fā)出的請(qǐng)求的步驟和所述解析攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器的步驟之間還包括:模擬器的監(jiān)聽(tīng)鏈路監(jiān)測(cè)所攔截的請(qǐng)求;若監(jiān)測(cè)所攔截的請(qǐng)求不需要返回預(yù)設(shè)響應(yīng)時(shí),暫停所述監(jiān)聽(tīng)鏈路,直接轉(zhuǎn)發(fā)被測(cè)服務(wù)發(fā)出的請(qǐng)求至外部服務(wù),并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng)返回至被測(cè)服務(wù);若監(jiān)測(cè)所攔截的請(qǐng)求不需要使用模擬器時(shí),停止所述監(jiān)聽(tīng)鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,返回報(bào)錯(cuò)信息。
優(yōu)選地,所述模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)的步驟之前包括:呈現(xiàn)解耦依賴的執(zhí)行情況時(shí),執(zhí)行解耦依賴。
本申請(qǐng)還提供了一種模擬服務(wù)的裝置,包括:初始化模塊,用于模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng);監(jiān)聽(tīng)模塊,用于與被測(cè)服務(wù)同一IP的模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路攔截由被測(cè)服務(wù)發(fā)出的請(qǐng)求;報(bào)文解析模塊,用于解析所攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器;執(zhí)行模塊,用于模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令。
優(yōu)選地,還包括響應(yīng)模塊,用于若匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);還用于若匹配失敗,接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù);轉(zhuǎn)發(fā)模塊,用于若匹配失敗,模擬器的樁匹配器轉(zhuǎn)發(fā)解析后的請(qǐng)求至外部服務(wù);解耦依賴模塊,用于呈現(xiàn)解耦依賴的執(zhí)行情況時(shí),執(zhí)行解耦依賴;監(jiān)測(cè)模塊,用于模擬器的監(jiān)聽(tīng)鏈路監(jiān)測(cè)所攔截的請(qǐng)求;監(jiān)測(cè)執(zhí)行模塊,用于若監(jiān)測(cè)所攔截的請(qǐng)求不需要返回預(yù)設(shè)響應(yīng)時(shí),暫停模擬器的鏈路,直接轉(zhuǎn)發(fā)被測(cè)服務(wù)發(fā)出的請(qǐng)求至外部服務(wù),并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng)返回至被測(cè)服務(wù);還用于若監(jiān)測(cè)所攔截的請(qǐng)求不需要使用模擬器時(shí),停止模擬器的鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,返回報(bào)錯(cuò)信息。
優(yōu)選地,所述初始化模塊包括:模擬測(cè)試架構(gòu)單元,用于根據(jù)被測(cè)服務(wù)的請(qǐng)求選擇模擬測(cè)試架構(gòu),且在在所選擇的模擬測(cè)試架構(gòu)中,模擬外部服務(wù)行為啟動(dòng)一個(gè)或多個(gè)不同協(xié)議服務(wù)的模擬器;模擬多種協(xié)議服務(wù)單元,用于模擬外部服務(wù)行為啟動(dòng)一個(gè)或多個(gè)不同協(xié)議服務(wù)的模擬器;服務(wù)端口配置單元,用于根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置,以修改被測(cè)服務(wù)請(qǐng)求的IP為模擬器的IP,將被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;樁單元,用于根據(jù)模擬外部服務(wù)行為的意圖,在模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)為樁,參數(shù)化樁生成樁參數(shù)。
優(yōu)選地,所述服務(wù)端口配置單元包括:通用協(xié)議配置子單元,用于若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為通用協(xié)議服務(wù),則修改DNS配置,把被測(cè)服務(wù)請(qǐng)求的IP指向模擬器的IP,配置Nginx,利用Nginx的端口映射,把被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;自定義協(xié)議配置子單元,用于若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為自定義協(xié)議服務(wù),通過(guò)OSP的靜態(tài)路由的IP和端口,把被測(cè)服務(wù)請(qǐng)求的IP直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
優(yōu)選地,所述報(bào)文解析模塊包括:解析單元,用于解析所攔截的請(qǐng)求生成請(qǐng)求參數(shù);封裝單元,用于將請(qǐng)求參數(shù)轉(zhuǎn)換為統(tǒng)一的封裝不同協(xié)議的請(qǐng)求對(duì)象;傳送單元,用于傳送請(qǐng)求對(duì)象至模擬器的樁匹配器。
優(yōu)選地,所述執(zhí)行模塊包括:接收單元,用于樁匹配器接收解析后的請(qǐng)求;調(diào)用單元,用于調(diào)用樁參數(shù);釋放單元,用于解析樁參數(shù),以釋放模擬匹配條件和預(yù)設(shè)響應(yīng);執(zhí)行單元,用于調(diào)用模擬匹配條件,執(zhí)行匹配命令。
本發(fā)明還公開(kāi)了一種模擬服務(wù)的集中管理平臺(tái),包括:一個(gè)或多個(gè)不同協(xié)議的如上所述的模擬服務(wù)的裝置;及UI交互模塊,用于建立UI交互測(cè)試模型及交互規(guī)范,編輯靜態(tài)HTML,以負(fù)責(zé)所有模擬服務(wù)的交互對(duì)接;及日志管理模塊,用于提供日志管理功能,可對(duì)模擬測(cè)試的結(jié)果進(jìn)行日志的記錄、查看、下載及清理;及模擬數(shù)據(jù)庫(kù),用于存儲(chǔ)模擬服務(wù)的所有數(shù)據(jù)。
在本發(fā)明中,通過(guò)采用簡(jiǎn)單的配置操作,如NGINX配置、模擬器的多種協(xié)議鏈路配置及樁配置,和豐富智能匹配規(guī)則,如包含、相等、正則表達(dá)式匹配和外部傳參等完成模擬服務(wù)的自動(dòng)化配置,實(shí)現(xiàn)了一種智能化匹配,簡(jiǎn)化工作程序,提高模擬服務(wù)的工作效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)配置,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖示出的結(jié)構(gòu)獲得其他的附圖。
圖1為本發(fā)明模擬服務(wù)的方法第一實(shí)施例的流程示意圖;
圖2為本發(fā)明一實(shí)施例中模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)的流程示意圖;
圖3為本發(fā)明一實(shí)施例中根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置的流程示意圖;
圖4為本發(fā)明一實(shí)施例中解析攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器的步流程示意圖;
圖5為本發(fā)明一實(shí)施例中模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令的流程示意圖;
圖6為本發(fā)明模擬服務(wù)的方法第二實(shí)施例的流程示意圖;
圖7為本發(fā)明模擬服務(wù)的方法第三實(shí)施例的流程示意圖;
圖8為本發(fā)明模擬服務(wù)的裝置的第一實(shí)施例的功能模塊示意圖;
圖9為本發(fā)明模擬服務(wù)的裝置的第二實(shí)施例的功能模塊示意圖
圖10為本發(fā)明一實(shí)施例中初始化模塊的細(xì)化功能模塊示意圖;
圖11為本發(fā)明一實(shí)施例中服務(wù)端口配置單元的細(xì)化功能模塊示意圖;
圖12為本發(fā)明一實(shí)施例中報(bào)文解析模塊的細(xì)化功能模塊示意圖;
圖13為本發(fā)明一實(shí)施例中執(zhí)行模塊的細(xì)化功能模塊示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)配置進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
需要說(shuō)明,若本發(fā)明實(shí)施例中有涉及方向性指示(諸如上、下、左、右、前、后……),則該方向性指示僅用于解釋在某一特定姿態(tài)(如附圖所示)下各部件之間的相對(duì)位置關(guān)系、運(yùn)動(dòng)情況等,如果該特定姿態(tài)發(fā)生改變時(shí),則該方向性指示也相應(yīng)地隨之改變。
參照?qǐng)D1,圖1為本申請(qǐng)實(shí)施例提供的一種模擬服務(wù)的方法的流程示意圖,本發(fā)明提供了一種模擬服務(wù)的方法,步驟如下:
步驟S10,模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng);
在步驟S10中,模擬器初始化操作需要完成兩個(gè)方面的預(yù)備,第一,需要部署測(cè)試環(huán)境(主要指硬件環(huán)境),以為模擬器的模擬服務(wù)提供穩(wěn)定而可控的環(huán)境,提高模擬器的工作質(zhì)量和效率。預(yù)先運(yùn)行構(gòu)建或部署與被測(cè)服務(wù)和外部服務(wù)之間網(wǎng)絡(luò)通信服務(wù)接口的對(duì)接、建立WEB UI交互測(cè)試模型、構(gòu)建多種測(cè)試類型框架、封裝有不同協(xié)議的鏈路配置,根據(jù)被測(cè)服務(wù)的協(xié)議服務(wù)部署被測(cè)服務(wù)的服務(wù)端口配置及呈現(xiàn)解耦依賴情況時(shí),執(zhí)行解耦依賴,以繞開(kāi)所依賴的外部服務(wù)的端口。而這些測(cè)試環(huán)境的部署均有一個(gè)集中管理數(shù)個(gè)模擬器的模擬服務(wù)平臺(tái)來(lái)完成,首先建立模擬器與被測(cè)服務(wù)和外部服務(wù)之間的網(wǎng)絡(luò)通信;接著建立WEB UI界面交互測(cè)試模型及交互規(guī)范,以下的步驟均在界面操作,而無(wú)需編碼;再針對(duì)被測(cè)服務(wù)的需求構(gòu)建多種測(cè)試類型的框架,比如:?jiǎn)卧獪y(cè)試、集成測(cè)試、自動(dòng)化測(cè)試、功能測(cè)試及壓力測(cè)試,每種測(cè)試類型的框架內(nèi)存儲(chǔ)有模擬外部服務(wù)行為的測(cè)試用例的測(cè)試模塊;根據(jù)不同協(xié)議服務(wù)給每個(gè)模擬器封裝不同協(xié)議的鏈路配置;根據(jù)被測(cè)服務(wù)的協(xié)議服務(wù)修改被測(cè)服務(wù)的目標(biāo)服務(wù)端口配置,被測(cè)的A服務(wù)(即被測(cè)服務(wù))原來(lái)是依賴外部的B服務(wù)(即外部服務(wù)),現(xiàn)在A服務(wù)的目標(biāo)服務(wù)不指向B服務(wù)而改為指向模擬器。第二,需要部署測(cè)試服務(wù)(主要指軟件環(huán)境),以為本發(fā)明的測(cè)試方法提供測(cè)試對(duì)象。測(cè)試服務(wù)包括測(cè)試管理單元和測(cè)試執(zhí)行單元,模擬器等同于測(cè)試管理單元,所述模擬器管理單次模擬測(cè)試的運(yùn)行,而模擬器中虛擬一個(gè)樁匹配器(Stub Matcher)等同于測(cè)試執(zhí)行單元,所述樁匹配器實(shí)行模擬測(cè)試執(zhí)行控制,具體來(lái)說(shuō)是,模擬器中的測(cè)試模塊存儲(chǔ)模擬外部服務(wù)行為的測(cè)試用例,樁匹配器用于模擬測(cè)試模塊的調(diào)用條件的元件,以代替測(cè)試模塊的接口,接受或傳遞測(cè)試模塊的數(shù)據(jù),其中,所述測(cè)試模塊的調(diào)用條件即為在樁匹配器中編輯的模擬匹配條件,或者是,通過(guò)注冊(cè)自定義服務(wù)事件的API函數(shù)編輯自定義服務(wù)的模擬測(cè)試匹配條件。樁匹配器根據(jù)模擬測(cè)試匹配條件實(shí)行測(cè)試控制。
特別說(shuō)明地是,構(gòu)建功能測(cè)試框架時(shí),是單獨(dú)啟動(dòng)的平臺(tái)提供的壓測(cè)包,所述的壓測(cè)包支持通用協(xié)議和自定義協(xié)議,通用協(xié)議如HTTP協(xié)議(超文本傳輸協(xié)議)和自定義協(xié)議如OSP協(xié)議(一種網(wǎng)域間授權(quán)、路由和計(jì)費(fèi)的國(guó)際標(biāo)準(zhǔn)協(xié)議),場(chǎng)景事例:OSP協(xié)議的壓測(cè)服務(wù)模擬,而且壓測(cè)包也是使用Web界面指定鏈路的樁設(shè)置,無(wú)需重復(fù)配置。步驟為:首先一鍵下載平臺(tái)提供的壓測(cè)包,啟動(dòng)壓測(cè)模擬器,進(jìn)行壓力模擬測(cè)試,通過(guò)界面直接查看測(cè)試結(jié)果。
本申請(qǐng)模擬器的初始化還包括創(chuàng)建模擬器,所述模擬器用于模擬與被測(cè)的A服務(wù)進(jìn)行真實(shí)交互的外部B服務(wù)。所述模擬器可以采用JETTY服務(wù)器,該JETTY服務(wù)器為一個(gè)開(kāi)源的servelet容器(servelet是用JAVA編寫的服務(wù)器端程序,主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)WEB內(nèi)容),是基于JAVA的WEB容器。JETTY服務(wù)器可以作為嵌入式服務(wù)器使用,JETTY服務(wù)器的運(yùn)行速度較快,而且是輕量級(jí)的,JETTY服務(wù)器是使用Java語(yǔ)言編寫的,它的API以一組JAR包的形式發(fā)布。JAR包(JAVA的封裝包)管理用于RPC協(xié)議模擬(Remote Procedure Call Protocol--遠(yuǎn)程過(guò)程調(diào)用協(xié)議,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議),統(tǒng)一管理客戶端的JAR包,可以理解地,JAR包可用于解析不同協(xié)議服務(wù)。則測(cè)試中當(dāng)被測(cè)的A服務(wù)通過(guò)接口調(diào)用外部的B服務(wù)進(jìn)行交互時(shí),改為調(diào)用模擬器模擬該交互,即把原本被測(cè)的A服務(wù)請(qǐng)求修改指向,不再指向B服務(wù)而改為指向模擬器。
步驟S20,模擬器啟動(dòng)的與被測(cè)服務(wù)同一IP的監(jiān)聽(tīng)鏈路攔截由被測(cè)服務(wù)發(fā)出的請(qǐng)求;
在步驟S20中,模擬器的初始化完成后會(huì)啟動(dòng)所有的鏈路監(jiān)聽(tīng),當(dāng)模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路監(jiān)聽(tīng)到與被測(cè)服務(wù)同一IP的請(qǐng)求,才會(huì)攔截該所監(jiān)聽(tīng)到的請(qǐng)求,即裭測(cè)服務(wù)的發(fā)出的請(qǐng)求。本申請(qǐng)中的“IP”即為IP地址(Internet Protocol Address,又譯為網(wǎng)際協(xié)議地址)。
步驟S30,解析所攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器;
在步驟S30中,對(duì)所攔截的請(qǐng)求進(jìn)行報(bào)文解析,將請(qǐng)求的報(bào)文數(shù)據(jù)按照系統(tǒng)內(nèi)定義規(guī)則解析,解析后的請(qǐng)求生成請(qǐng)求的相關(guān)數(shù)據(jù),再將請(qǐng)求的相關(guān)數(shù)據(jù)傳送至模擬器的樁匹配器。所述步驟S30實(shí)際是模擬器普通模擬匹配執(zhí)行之前被測(cè)服務(wù)請(qǐng)求接收的過(guò)程
步驟S40,模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令。
在步驟S40中,所述模擬器的樁匹配器接收解析后的請(qǐng)求的步驟應(yīng)該理解地是模擬器的樁匹配一旦接收請(qǐng)求就意味著模擬匹配的啟動(dòng)執(zhí)行,所述樁匹配器開(kāi)始實(shí)行模擬測(cè)試執(zhí)行控制。所述模擬測(cè)試執(zhí)行控制包括模擬匹配條件的調(diào)用、模擬匹配的運(yùn)行判斷及判斷后的響應(yīng)執(zhí)行等。所述的步驟S40實(shí)際是模擬器普通模擬匹配執(zhí)行之前的樁參數(shù)化相呼應(yīng)的解參過(guò)程,
參照?qǐng)D2,具體地,在本實(shí)施例中,步驟S10包括:
步驟S101,根據(jù)被測(cè)服務(wù)的請(qǐng)求選擇模擬測(cè)試架構(gòu),且在所選擇的模擬測(cè)試架構(gòu)中,模擬外部服務(wù)行為啟動(dòng)一個(gè)或多個(gè)不同協(xié)議服務(wù)的模擬器;
在步驟S101中,外部服務(wù)行為可能是一種協(xié)議服務(wù)的測(cè)試用例,也可能是多種協(xié)議服務(wù)的測(cè)試用例,而一個(gè)被測(cè)服務(wù)可能同時(shí)依賴多個(gè)不同的外部服務(wù),預(yù)先存儲(chǔ)模擬所述外部服務(wù)行為的測(cè)試用例于測(cè)試管理單元——模擬器,所以模擬器的初始化操作的啟動(dòng)時(shí),需要啟動(dòng)一個(gè)或多個(gè)與外部服務(wù)相對(duì)應(yīng)的模擬器。
所述模擬測(cè)試架構(gòu)是提供模擬測(cè)試用例的模擬測(cè)試分析工具,它包括模擬測(cè)試的測(cè)試模塊、管理模塊和統(tǒng)計(jì)分析模塊,所述測(cè)試模塊用于執(zhí)行不同測(cè)試類型的模擬匹配命令時(shí),提供所調(diào)用的模擬測(cè)試用例,且所述的模擬測(cè)試用例是可反復(fù)使用的;所述管理模塊用于管理不同模擬測(cè)試類型的模擬測(cè)試用例的調(diào)用;所述統(tǒng)計(jì)分析模塊用于統(tǒng)計(jì)且分析所述模擬測(cè)試的結(jié)果。所述模擬測(cè)試架構(gòu)根據(jù)模擬測(cè)試預(yù)期的不同區(qū)分為不同的測(cè)試類型,再模擬不同的測(cè)試類型建立的模擬測(cè)試架構(gòu),所述模擬測(cè)試架構(gòu)包括單元測(cè)試架構(gòu)、集成測(cè)試架構(gòu)、功能測(cè)試架構(gòu)和壓力測(cè)試架構(gòu),每種所述模擬測(cè)試架構(gòu)是提取每種測(cè)試類型的共性部分組成的獨(dú)立的體系結(jié)構(gòu)。
步驟S102,根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置,以修改被測(cè)服務(wù)請(qǐng)求的IP為模擬器的IP,將被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;
在步驟S102中,模擬服務(wù)的集中管理平臺(tái)接收請(qǐng)求后,獲取請(qǐng)求URL(Uniform Resource Locator,統(tǒng)一資源定位符)地址上的協(xié)議類型,轉(zhuǎn)交給適配協(xié)議類型的模擬器進(jìn)行處理,應(yīng)該理解地是,模擬服務(wù)的集中管理平臺(tái)有模擬通用協(xié)議服務(wù)和模擬自定義協(xié)議服務(wù)之分,所以服務(wù)端口配置單元根據(jù)不同協(xié)議服務(wù)修改被測(cè)服務(wù)、外部服務(wù)和模擬器的端口配置,以便模擬器進(jìn)入代理服務(wù)器的角色。
步驟S103,根據(jù)模擬外部服務(wù)行為的意圖,在模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)為樁,參數(shù)化樁生成樁參數(shù)。
在步驟S103中,所述根據(jù)模擬外部服務(wù)行為的意圖,即為模擬外部服務(wù)行為的測(cè)試用例的調(diào)用條件,也就是說(shuō),所述調(diào)用條件與所述外部服務(wù)行為的意圖是相對(duì)應(yīng)。而在計(jì)算機(jī)系統(tǒng)中,將所述調(diào)用條件函數(shù)化生成為模擬匹配條件。所述函數(shù)化即把模擬匹配條件由系統(tǒng)內(nèi)定規(guī)則定義為函數(shù)式,而預(yù)設(shè)響定義為函數(shù)式的返回值,而由模擬匹配條件及預(yù)設(shè)響應(yīng)編輯成的樁即為由兩者組成的計(jì)算式。所述參數(shù)化樁生成樁參數(shù),又是計(jì)算機(jī)運(yùn)行中另一技巧,所述參數(shù)化樁就是在函數(shù)定義時(shí)候傳入形參,而相對(duì)地,解析參數(shù)就是調(diào)用函數(shù)時(shí)傳入實(shí)參。樁參數(shù)化的過(guò)程是:配置樁的參數(shù)的格式,添加樁參數(shù),完成參數(shù)化,生成樁參數(shù)。樁的參數(shù)化用以適配多種協(xié)議的不同外部服務(wù)。應(yīng)該理解地是,樁函數(shù)可以自動(dòng)生成,也可自定義,但自動(dòng)生成的樁函數(shù)與自定義的樁函數(shù)其主要差別在于:自定義的樁函數(shù)調(diào)用優(yōu)先級(jí)別高于原函數(shù),原函數(shù)的優(yōu)先級(jí)別高于自動(dòng)生成的樁函數(shù)。舉個(gè)例子,假定在代碼中能夠找到某個(gè)函數(shù)的原本定義,此時(shí)自動(dòng)生成的樁函數(shù)是無(wú)效的,因?yàn)樵瘮?shù)優(yōu)先級(jí)別高于自動(dòng)生成的樁函數(shù)。而自定義樁函數(shù)可以帶來(lái)的好處在于:調(diào)用原函數(shù)可能其返回值為一個(gè)固定值,不能返回一個(gè)期望值,以使得測(cè)試不同的代碼分支。而樁函數(shù)的返回值,可由用戶自由控制,因而具備更大的靈活性。
所述的模擬匹配具有豐富的匹配規(guī)則,樁的匹配條件邏輯上支持多個(gè)樁之間的AND,OR和NOT關(guān)系;匹配的操作符支持equals(值相等),contains(值包含),regex(值正則表達(dá)式匹配)。而所述的預(yù)設(shè)響應(yīng)根據(jù)不同的模擬匹配條件,通過(guò)beanshel(一種JAVA源碼解釋器)動(dòng)態(tài)生成。
需要說(shuō)明的是,樁根據(jù)測(cè)試用例數(shù)據(jù)中的特定數(shù)據(jù)的不同,而區(qū)分為公共樁和私有樁,所述公共樁即可在該鏈路里新建并被調(diào)用,也可以是抓取redis(redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API)的數(shù)據(jù)自動(dòng)生成,可被與公共樁關(guān)聯(lián)于同一個(gè)IP下的鏈路調(diào)用,所述私有樁只能在該鏈路里新建,并只為該鏈路私有。這里所說(shuō)的新建樁包括自定義樁函數(shù)和原函數(shù)。
特別需要說(shuō)明地是,公共樁還具有錄制規(guī)則,所述公共樁的錄制途徑有兩種:1、從外部服務(wù)系統(tǒng)抓取流量進(jìn)行錄制,場(chǎng)景:平臺(tái)與ApiTester(接口測(cè)試平臺(tái))和DCT(造數(shù)據(jù)平臺(tái))對(duì)接時(shí),因?yàn)锳piTester和DCT的測(cè)試時(shí),所有正常的接口請(qǐng)求和響應(yīng)會(huì)發(fā)送一個(gè)公共的redis做緩存,平臺(tái)會(huì)定時(shí)從redis提取這些數(shù)據(jù)自動(dòng)生成公共樁;2、當(dāng)模擬器不匹配請(qǐng)求時(shí),通過(guò)樁錄制器(Stub Recorder)錄制模擬器攔截且不匹配直接轉(zhuǎn)發(fā)的請(qǐng)求和響應(yīng)生成為公共樁。所述公共樁錄制規(guī)則可以由內(nèi)部代碼預(yù)先建立默認(rèn)規(guī)則后自動(dòng)生成錄制規(guī)則,也可以在頁(yè)面人為設(shè)置。
而本發(fā)明的參數(shù)化樁也是智能匹配功能的一種體現(xiàn)。樁的匹配條件和模擬響應(yīng)也都隨之參數(shù)化,應(yīng)該理解地是,如果樁配置的參數(shù)格式是${參數(shù)名},當(dāng)設(shè)置了參數(shù)格式后,樁參數(shù)也必須設(shè)置,否則被測(cè)服務(wù)請(qǐng)求均會(huì)匹配不成功,只有重新設(shè)置了樁參數(shù),讓樁參數(shù)替換掉匹配條件和模擬響應(yīng)的格式化參數(shù),這時(shí)再請(qǐng)求一次,才可以看到應(yīng)該得到的響應(yīng)。
參照?qǐng)D3,在本實(shí)施例中,所述步驟S102具體來(lái)說(shuō)包括以下步驟:
步驟S1021,若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為通用協(xié)議服務(wù),則修改DNS配置,把被測(cè)服務(wù)請(qǐng)求的IP指向模擬器的IP,配置Nginx,利用Nginx的端口映射,把被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;
步驟S1022,若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為自定義協(xié)議服務(wù),通過(guò)OSP的靜態(tài)路由的IP和端口,把被測(cè)服務(wù)請(qǐng)求的IP直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
應(yīng)該理解地是,本實(shí)施例中,把協(xié)議服務(wù)分為通用協(xié)議服務(wù)和自定義協(xié)議服務(wù),具體地,服務(wù)模擬平臺(tái)針對(duì)不同協(xié)議服務(wù)有以下幾種模擬的方案:
1)HTTP/Thrift協(xié)議模擬:
用戶通過(guò)修改DNS配置(全名Domain Name System,域名系統(tǒng),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串),把B服務(wù)的IP指向平臺(tái)模擬器的IP,通過(guò)平臺(tái)內(nèi)置的Nginx把A服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口。
2)OSP協(xié)議模擬:
用戶把B服務(wù)的IP通過(guò)OSP的靜態(tài)路由的IP和端口直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
需要補(bǔ)充說(shuō)明的是,Nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器,本發(fā)明只是用了Nginx的端口映射功能,用于HTTP協(xié)議或Thrift協(xié)議模擬(Thrift是一個(gè)服務(wù)端和客戶端的架構(gòu)體系,使不同語(yǔ)言開(kāi)發(fā)的系統(tǒng)可以通過(guò)該框架進(jìn)行通信),平臺(tái)內(nèi)置Nginx,用戶無(wú)需再使用服務(wù)器操作Nginx,只需在頁(yè)面上配置。如在Nginx配置頁(yè)面配置是:Server Name:cart.api.vip.com listen Port:80默認(rèn)監(jiān)聽(tīng)端口:1234,實(shí)際會(huì)在Nginx生成一個(gè)配置文件內(nèi)容如下:
表示cart.api.vip.com域的請(qǐng)求并且端口是80的,統(tǒng)一轉(zhuǎn)發(fā)到監(jiān)聽(tīng)端口是1234的鏈路。例如請(qǐng)求是http://cart.api.vip.com:80/xxx,通過(guò)Nginx轉(zhuǎn)發(fā)后變?yōu)閔ttp://127.0.0.1:1234。
Nginx反向代理的原理是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。
具體地,參照?qǐng)D4,步驟S30包括:
步驟S301,解析所攔截的請(qǐng)求生成請(qǐng)求參數(shù);
在步驟S301中,所述鏈路啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè)InboundChannel(InboundChannel專門用于A服務(wù)和模擬器間通信的通道),用于監(jiān)聽(tīng)收到的來(lái)自A服務(wù)的請(qǐng)求。
步驟S302,將請(qǐng)求參數(shù)轉(zhuǎn)換為統(tǒng)一的封裝不同協(xié)議的請(qǐng)求對(duì)象;
在步驟S302中,收到請(qǐng)求后,通過(guò)Request Extrator(請(qǐng)求出口)對(duì)請(qǐng)求的參數(shù)進(jìn)行提取(如uri,body的參數(shù)),轉(zhuǎn)為一個(gè)RequestElement(請(qǐng)求對(duì)象),如:HTTP,OSP等不同協(xié)議的請(qǐng)求內(nèi)容統(tǒng)一轉(zhuǎn)換為RequestElement(請(qǐng)求對(duì)象),即封裝有不同協(xié)議的請(qǐng)求參數(shù))。
步驟S303,傳送請(qǐng)求對(duì)象至模擬器的樁匹配器。
在步驟S303中,模擬器再把RequestElement傳入樁匹配器(Stub Matcher)與用戶預(yù)設(shè)的樁進(jìn)行匹配。應(yīng)該理解地是,整個(gè)把請(qǐng)求解析為RequestElement的操作均是由模擬器的內(nèi)部代碼實(shí)現(xiàn)。
具體地,參照?qǐng)D5,步驟S40包括:
步驟S401,樁匹配器接收解析后的請(qǐng)求;
步驟S402,調(diào)用樁參數(shù);
步驟S403,解析樁參數(shù),以釋放模擬匹配條件和預(yù)設(shè)響應(yīng);
步驟S404,調(diào)用模擬匹配條件,執(zhí)行匹配命令。
樁可以是一個(gè)常量,也可以是一個(gè)變量,這樣,把樁定義為一個(gè)函數(shù),函數(shù)定義時(shí)候傳入的參數(shù)叫形參,而調(diào)用函數(shù)時(shí)傳入的參數(shù)叫實(shí)參,模擬器先替換掉樁里區(qū)配條件和預(yù)設(shè)響應(yīng)的參數(shù),釋放出模擬匹配條件和預(yù)設(shè)響應(yīng)的原函數(shù),然后再調(diào)用模擬匹配條件,執(zhí)行匹配命令。
參照?qǐng)D6,在第二實(shí)施例中,在步驟S40之后還包括:
步驟S50,若匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);
步驟S60,若匹配失敗,模擬器的樁匹配器轉(zhuǎn)發(fā)解析后的請(qǐng)求至外部服務(wù),并接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù)。
在第二實(shí)施例中,步驟S50和步驟S60是步驟S40之后還包括響應(yīng)措施,即當(dāng)匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);當(dāng)匹配失敗時(shí),模擬器轉(zhuǎn)發(fā)請(qǐng)求至外部服務(wù),并接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù)。此時(shí),所述的樁匹配器僅做為一個(gè)中轉(zhuǎn)站,轉(zhuǎn)發(fā)請(qǐng)求并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng),再轉(zhuǎn)發(fā)至被測(cè)服務(wù)。
參照?qǐng)D7,在第三實(shí)施例中,在步驟S20與步驟S30之間還包括:
步驟S70,模擬器的監(jiān)聽(tīng)鏈路監(jiān)測(cè)所攔截的請(qǐng)求;
步驟S80,若監(jiān)測(cè)所攔截的請(qǐng)求不需要返回預(yù)設(shè)響應(yīng)時(shí),暫停模擬器的鏈路,直接轉(zhuǎn)發(fā)被測(cè)服務(wù)發(fā)出的請(qǐng)求至外部服務(wù),并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng)返回至被測(cè)服務(wù);
步驟S90,若監(jiān)測(cè)所攔截的請(qǐng)求不需要使用模擬器時(shí),停止模擬器的鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,返回報(bào)錯(cuò)信息。
在本實(shí)施例中,考慮到企業(yè)用戶業(yè)務(wù)的復(fù)雜性,為了滿足用戶各種業(yè)務(wù)的需求不同,所述模擬器通過(guò)鏈路狀態(tài)的控制來(lái)完成監(jiān)測(cè)請(qǐng)求的功能,應(yīng)該理解地是,監(jiān)測(cè)請(qǐng)求的同時(shí)是結(jié)合業(yè)務(wù)的需求,如果業(yè)務(wù)不需要匹配直接轉(zhuǎn)發(fā)的時(shí)候可以暫停模擬器的鏈路,如果業(yè)務(wù)不使用模擬器,可以停止模擬器的鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,被測(cè)服務(wù)再發(fā)起請(qǐng)求到模擬器,會(huì)收到連接失敗的報(bào)錯(cuò)信息。
在第四實(shí)施例中,步驟S10之前還包括:
呈現(xiàn)解耦依賴的情況時(shí),執(zhí)行解耦依賴,以繞開(kāi)所依賴外部服務(wù)的接口。
在本實(shí)施例中,被測(cè)的A服務(wù)原來(lái)是依賴外部的B服務(wù),現(xiàn)在在被測(cè)的A服務(wù)和外部的B服務(wù)之間建立一個(gè)開(kāi)放式的集中管理諸多所述模擬器的平臺(tái),而平臺(tái)通過(guò)接口與不同的外部服務(wù)器協(xié)同交互來(lái)處理被測(cè)服務(wù)的業(yè)務(wù)。應(yīng)當(dāng)理解地是,計(jì)算中的耦合偏向于兩者或多者的彼此影響,解耦就是要解除這種影響,增強(qiáng)各自的獨(dú)立存在能力,可以無(wú)限降低存在的耦合度,但不能根除,否則就失去了彼此的關(guān)聯(lián),失去了存在意義。
服務(wù)模擬平臺(tái)的作用是服務(wù)解耦,可用于研發(fā)或測(cè)試人員繞開(kāi)外部服務(wù)單獨(dú)測(cè)試自己負(fù)責(zé)的服務(wù)。服務(wù)解耦場(chǎng)景:1)A服務(wù)調(diào)B服務(wù),B服務(wù)由于某些原因不可用或不穩(wěn)定,例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,但是passport.api連不上導(dǎo)致無(wú)法登陸;2)A服務(wù)調(diào)B服務(wù),B服務(wù)的數(shù)據(jù)或場(chǎng)景難以構(gòu)造,例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,passport.api會(huì)在某些極端情況下返回一些錯(cuò)誤碼;3)自動(dòng)化測(cè)試時(shí),A服務(wù)調(diào)B服務(wù),由于B服務(wù)不可控,數(shù)據(jù)經(jīng)常變動(dòng)導(dǎo)致測(cè)試數(shù)據(jù)經(jīng)常變化。比如:Jetty可以從test case中控制其運(yùn)行,從而可以使自動(dòng)化測(cè)試不再依賴外部環(huán)境,順利實(shí)現(xiàn)自動(dòng)化測(cè)試。
參照?qǐng)D8,本發(fā)明還公開(kāi)了一種模擬服務(wù)的裝置,該裝置包括:
初始化模塊10,用于模擬外部服務(wù)行為啟動(dòng)模擬器初始化操作,在初始化后的模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng);
監(jiān)聽(tīng)模塊20,用于與被測(cè)服務(wù)同一IP的模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路攔截由被測(cè)服務(wù)發(fā)出的請(qǐng)求;
報(bào)文解析模塊30,用于解析所攔截的請(qǐng)求并將解析后的請(qǐng)求傳送至模擬器的樁匹配器;
執(zhí)行模塊40,用于模擬器的樁匹配器接收解析后的請(qǐng)求,根據(jù)模擬匹配條件執(zhí)行匹配命令。
在本實(shí)施例中,模擬器初始化操作需要完成兩個(gè)方面的預(yù)備,第一,需要部署測(cè)試環(huán)境(主要指硬件環(huán)境),以為模擬器的模擬服務(wù)提供穩(wěn)定而可控的環(huán)境,提高模擬器的工作質(zhì)量和效率。預(yù)先運(yùn)行構(gòu)建或部署與被測(cè)服務(wù)和外部服務(wù)之間網(wǎng)絡(luò)通信服務(wù)接口的對(duì)接、建立WEB UI交互測(cè)試模型、構(gòu)建多種測(cè)試類型框架、封裝有不同協(xié)議的鏈路配置,根據(jù)被測(cè)服務(wù)的協(xié)議服務(wù)部署被測(cè)服務(wù)的服務(wù)端口配置及呈現(xiàn)解耦依賴情況時(shí),執(zhí)行解耦依賴,以繞開(kāi)所依賴的外部服務(wù)的端口。而這些測(cè)試環(huán)境的部署均有一個(gè)集中管理數(shù)個(gè)模擬器的模擬服務(wù)平臺(tái)來(lái)完成,首先建立模擬器與被測(cè)服務(wù)和外部服務(wù)之間的網(wǎng)絡(luò)通信;接著建立WEB UI界面交互測(cè)試模型及交互規(guī)范,以下的步驟均在界面操作,而無(wú)需編碼;再針對(duì)被測(cè)服務(wù)的需求構(gòu)建多種測(cè)試類型的框架,比如:?jiǎn)卧獪y(cè)試、集成測(cè)試、自動(dòng)化測(cè)試、功能測(cè)試及壓力測(cè)試;根據(jù)不同協(xié)議服務(wù)給每個(gè)模擬器封裝不同協(xié)議的鏈路配置;根據(jù)被測(cè)服務(wù)的協(xié)議服務(wù)修改被測(cè)服務(wù)的目標(biāo)服務(wù)端口配置,被測(cè)的A服務(wù)(即被測(cè)服務(wù))原來(lái)是依賴外部的B服務(wù)(即外部服務(wù)),現(xiàn)在A服務(wù)的目標(biāo)服務(wù)不指向B服務(wù)而改為指向模擬器。第二,需要部署測(cè)試服務(wù)(主要指軟件環(huán)境),以為本發(fā)明的測(cè)試方法提供測(cè)試對(duì)象。測(cè)試服務(wù)包括測(cè)試管理單元和測(cè)試執(zhí)行單元,模擬器等同于測(cè)試管理單元,而模擬器中虛擬一個(gè)樁匹配器等同于測(cè)試執(zhí)行單元,具體來(lái)說(shuō)是,在模擬器中預(yù)先存儲(chǔ)模擬外部服務(wù)行為的測(cè)試用例,在模擬器的樁匹配器中編輯模擬測(cè)試的匹配條件及預(yù)設(shè)響應(yīng),或者是,通過(guò)注冊(cè)自定義服務(wù)事件的API函數(shù)編輯自定義服務(wù)的模擬測(cè)試匹配條件及預(yù)設(shè)響應(yīng),在模擬器中的樁匹配器里將模擬測(cè)試匹配條件及預(yù)設(shè)響應(yīng)編輯為樁,且將樁參數(shù)化生成樁參數(shù),樁匹配器根據(jù)模擬測(cè)試匹配條件實(shí)行測(cè)試控制。
特別說(shuō)明地是,構(gòu)建功能測(cè)試框架時(shí),是單獨(dú)啟動(dòng)的平臺(tái)提供的壓測(cè)包,所述的壓測(cè)包支持通用協(xié)議,比如HTTP協(xié)議和自定義協(xié)議,比如OSP協(xié)議的壓測(cè)時(shí)的服務(wù)模擬,而且壓測(cè)包也是使用Web界面指定鏈路的樁設(shè)置,無(wú)需重復(fù)配置。步驟為:首先一鍵下載平臺(tái)提供的壓測(cè)包,啟動(dòng)壓測(cè)模擬器,進(jìn)行壓力模擬測(cè)試,通過(guò)界面直接查看測(cè)試結(jié)果。
本發(fā)明所述的方法完全采用WEB UI的可視化操作界面,配置共享,用戶使用時(shí)無(wú)需任何技能,也不需了解技術(shù)細(xì)節(jié)也就是說(shuō)無(wú)需自己編碼,就能實(shí)現(xiàn)服務(wù)的摸擬,大大地提高了聯(lián)調(diào)測(cè)試的效率。
本申請(qǐng)模擬器的初始化還包括創(chuàng)建模擬器,所述模擬器用于模擬與被測(cè)的A服務(wù)進(jìn)行真實(shí)交互的外部B服務(wù)。所述模擬器可以采用JETTY服務(wù)器,該JETTY服務(wù)器為一個(gè)開(kāi)源的servelet容器,是基于JAVA的WEB容器。Jetty可以作為嵌入式服務(wù)器使用,Jetty的運(yùn)行速度較快,而且是輕量級(jí)的,Jetty是使用Java語(yǔ)言編寫的,它的API以一組JAR包的形式發(fā)布。JAR包管理用于RPC協(xié)議模擬,統(tǒng)一管理客戶端的JAR包,可以理解地,JAR包可用于解析不同協(xié)議服務(wù)。則測(cè)試中當(dāng)被測(cè)的A服務(wù)通過(guò)接口調(diào)用外部的B服務(wù)進(jìn)行交互時(shí),改為調(diào)用模擬器模擬該交互,即把原本被測(cè)的A服務(wù)請(qǐng)求修改指向,不再指向B服務(wù)而改為指向模擬器。
本申請(qǐng)模擬器啟動(dòng)后,模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口開(kāi)始監(jiān)聽(tīng),當(dāng)監(jiān)聽(tīng)到具有與模擬器相同IP的請(qǐng)求時(shí),攔截該請(qǐng)求,報(bào)文解析請(qǐng)求,并將解析后的請(qǐng)求發(fā)送至樁匹配器。樁匹配器接收請(qǐng)求后,根據(jù)模擬匹配條件執(zhí)行匹配命令,樁匹配器開(kāi)始測(cè)試控制,若匹配成功,樁匹配器推出模擬測(cè)試的預(yù)設(shè)響應(yīng)返回至被測(cè)服務(wù)。
參照?qǐng)D8,本發(fā)明提供的一種模擬服務(wù)的裝置的第二實(shí)施例,所述的模擬服務(wù)的裝置還包括:
響應(yīng)模塊50,用于若匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);還用于接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù);
轉(zhuǎn)發(fā)模塊60,用于若匹配失敗,模擬器的樁匹配器轉(zhuǎn)發(fā)解析后的請(qǐng)求至外部服務(wù);
解耦依賴模塊70,用于呈現(xiàn)解耦依賴的執(zhí)行情況時(shí),執(zhí)行解耦依賴;
監(jiān)測(cè)模塊80,用于模擬器的監(jiān)聽(tīng)鏈路監(jiān)測(cè)所攔截的請(qǐng)求;
監(jiān)測(cè)執(zhí)行模塊90,用于若監(jiān)測(cè)所攔截的請(qǐng)求不需要返回預(yù)設(shè)響應(yīng)時(shí),暫停模擬器的鏈路,直接轉(zhuǎn)發(fā)被測(cè)服務(wù)發(fā)出的請(qǐng)求至外部服務(wù),并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng)返回至被測(cè)服務(wù);還用于若監(jiān)測(cè)所攔截的請(qǐng)求不需要使用模擬器時(shí),停止模擬器的鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,返回報(bào)錯(cuò)信息。
在第二實(shí)施例中,還包括響應(yīng)模塊50,即當(dāng)匹配成功,模擬器的樁匹配器發(fā)送預(yù)設(shè)響應(yīng)至被測(cè)服務(wù);當(dāng)匹配失敗時(shí),模擬器轉(zhuǎn)發(fā)請(qǐng)求至外部服務(wù),并接收外部服務(wù)發(fā)出的對(duì)請(qǐng)求的真實(shí)響應(yīng),傳送至被測(cè)服務(wù)。匹配失敗時(shí),所述的樁匹配器僅做為一個(gè)中轉(zhuǎn)站,轉(zhuǎn)發(fā)請(qǐng)求并接收外部服務(wù)對(duì)請(qǐng)求的真實(shí)響應(yīng),再轉(zhuǎn)發(fā)至被測(cè)服務(wù)。
在第三實(shí)施例中,還包括監(jiān)測(cè)模塊80和監(jiān)測(cè)執(zhí)行模塊90,考慮到企業(yè)用戶業(yè)務(wù)的復(fù)雜性,為了滿足用戶各種業(yè)務(wù)的需求不同,所述模擬器通過(guò)鏈路狀態(tài)的控制來(lái)完成監(jiān)測(cè)請(qǐng)求的功能,應(yīng)該理解地是,監(jiān)測(cè)請(qǐng)求的同時(shí)是結(jié)合業(yè)務(wù)的需求,如果業(yè)務(wù)不需要匹配直接轉(zhuǎn)發(fā)的時(shí)候可以暫停模擬器的鏈路,如果業(yè)務(wù)不使用模擬器,可以停止模擬器的鏈路,模擬服務(wù)關(guān)閉監(jiān)聽(tīng)端口,被測(cè)服務(wù)再發(fā)起請(qǐng)求到模擬器,會(huì)收到連接失敗的報(bào)錯(cuò)信息。
在第四實(shí)施例中,還包括解耦依賴模塊70,被測(cè)的A服務(wù)原來(lái)是依賴外部的B服務(wù),現(xiàn)在在被測(cè)的A服務(wù)和外部的B服務(wù)之間建立一個(gè)開(kāi)放式的集中管理諸多所述模擬器的平臺(tái),而平臺(tái)通過(guò)接口與不同的外部服務(wù)器協(xié)同交互來(lái)處理被測(cè)服務(wù)的業(yè)務(wù)。應(yīng)當(dāng)理解地是,計(jì)算中的耦合偏向于兩者或多者的彼此影響,解耦就是要解除這種影響,增強(qiáng)各自的獨(dú)立存在能力,可以無(wú)限降低存在的耦合度,但不能根除,否則就失去了彼此的關(guān)聯(lián),失去了存在意義。
服務(wù)模擬平臺(tái)的作用是服務(wù)解耦,可用于研發(fā)或測(cè)試人員繞開(kāi)外部服務(wù)單獨(dú)測(cè)試自己負(fù)責(zé)的服務(wù)。服務(wù)解耦場(chǎng)景:1)A服務(wù)調(diào)B服務(wù),B服務(wù)由于某些原因不可用或不穩(wěn)定,例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,但是passport.api連不上導(dǎo)致無(wú)法登陸;2)A服務(wù)調(diào)B服務(wù),B服務(wù)的數(shù)據(jù)或場(chǎng)景難以構(gòu)造,例如登陸頁(yè)面調(diào)一個(gè)登陸的passport.api,passport.api會(huì)在某些極端情況下返回一些錯(cuò)誤碼;3)自動(dòng)化測(cè)試時(shí),A服務(wù)調(diào)B服務(wù),由于B服務(wù)不可控,數(shù)據(jù)經(jīng)常變動(dòng)導(dǎo)致測(cè)試數(shù)據(jù)經(jīng)常變化。比如:Jetty可以從test case中控制其運(yùn)行,從而可以使自動(dòng)化測(cè)試不再依賴外部環(huán)境,順利實(shí)現(xiàn)自動(dòng)化測(cè)試。
參照?qǐng)D9,所述初始化模塊10包括:
模擬測(cè)試架構(gòu)單元101,用于根據(jù)被測(cè)服務(wù)的請(qǐng)求選擇模擬測(cè)試架構(gòu),且在所選擇的模擬測(cè)試架構(gòu)中,模擬外部服務(wù)行為啟動(dòng)一個(gè)或多個(gè)不同協(xié)議服務(wù)的模擬器;
模擬多種協(xié)議服務(wù)單元102,用于接收請(qǐng)求后,獲取請(qǐng)求URL地址上的協(xié)議類型,轉(zhuǎn)交給適配協(xié)議類型的模擬服務(wù)的裝置進(jìn)行處理,以根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置;
服務(wù)端口配置單元103,用于根據(jù)被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)請(qǐng)求選擇模擬器當(dāng)前協(xié)議鏈路的配置,以修改被測(cè)服務(wù)請(qǐng)求的IP為模擬器的IP,將被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;
樁單元104,用于根據(jù)模擬外部服務(wù)行為的意圖,在模擬器的樁匹配器中編輯模擬匹配條件及預(yù)設(shè)響應(yīng)為樁,參數(shù)化樁生成樁參數(shù)。
具體地,所述模擬測(cè)試架構(gòu)101是提供模擬測(cè)試用例的模擬測(cè)試分析工具,它包括模擬測(cè)試的測(cè)試模塊、管理模塊和統(tǒng)計(jì)分析模塊,所述測(cè)試模塊用于執(zhí)行不同測(cè)試類型的模擬匹配命令時(shí),提供所調(diào)用的模擬測(cè)試用例,且所述的模擬測(cè)試用例是可反復(fù)使用的;所述管理模塊用于管理不同模擬測(cè)試類型的模擬測(cè)試用例的調(diào)用;所述統(tǒng)計(jì)分析模塊用于統(tǒng)計(jì)且分析所述模擬測(cè)試的結(jié)果。所述模擬測(cè)試架構(gòu)根據(jù)模擬測(cè)試預(yù)期的不同區(qū)分為不同的測(cè)試類型,再模擬不同的測(cè)試類型建立的模擬測(cè)試架構(gòu),所述模擬測(cè)試架構(gòu)包括單元測(cè)試架構(gòu)、集成測(cè)試架構(gòu)、功能測(cè)試架構(gòu)和壓力測(cè)試架構(gòu),每種所述模擬測(cè)試架構(gòu)是提取每種測(cè)試類型的共性部分組成的獨(dú)立的體系結(jié)構(gòu)。
所述模擬多種協(xié)議服務(wù)單元102用于接收請(qǐng)求后,獲取請(qǐng)求URL地址上的協(xié)議類型,轉(zhuǎn)交給適配協(xié)議類型的模擬器進(jìn)行處理,它又包括模擬通用協(xié)議服務(wù)和模擬自定義協(xié)議服務(wù)。
所述服務(wù)端口配置單元103用于根據(jù)不同協(xié)議服務(wù)修改被測(cè)服務(wù)、外部服務(wù)和模擬器的端口配置,以便模擬器進(jìn)入代理服務(wù)器的角色。
所述的樁單元104用于模擬測(cè)試用例的調(diào)用條件的單元,以代替測(cè)試用例的接口,接受或者傳遞測(cè)試用例的數(shù)據(jù),其中,所述測(cè)試模塊的調(diào)用條件,即為模擬匹配條件。
外部服務(wù)行為可能是一種協(xié)議服務(wù)的測(cè)試用例,也可能是多種協(xié)議服務(wù)的測(cè)試用例,而一個(gè)被測(cè)服務(wù)可能同時(shí)依賴多個(gè)不同的外部服務(wù),預(yù)先存儲(chǔ)模擬所述外部服務(wù)行為的測(cè)試用例于測(cè)試管理單元——模擬器,所以模擬器的初始化操作的啟動(dòng)時(shí),需要啟動(dòng)一個(gè)或多個(gè)與外部服務(wù)相對(duì)應(yīng)的模擬器。
在模擬器初始化的過(guò)程中,模擬器中的樁匹配器用于模擬測(cè)試用例的調(diào)用條件的元件,以代替測(cè)試用例的接口,接受或者傳遞測(cè)試用例的數(shù)據(jù),其中,所述測(cè)試模塊的調(diào)用條件,即為模擬匹配條件。判斷所調(diào)用的測(cè)試用例數(shù)據(jù)的意圖,并依據(jù)該測(cè)試用例數(shù)據(jù)中的特定數(shù)據(jù)編輯模擬的匹配條件及預(yù)設(shè)響應(yīng)生成為樁;進(jìn)一步地,為了提高匹配的智能化,所述參數(shù)化樁,應(yīng)該理解的是,外部服務(wù)的多變性決定了模擬匹配條件及預(yù)設(shè)響應(yīng)的多變,即樁可以是一個(gè)常量,也可以是一個(gè)變量,這樣,把樁理解為一個(gè)樁函數(shù),模擬的匹配條件為計(jì)算式,預(yù)設(shè)響應(yīng)為返回值,而參數(shù)化樁就是在函數(shù)定義時(shí)候傳入形參,而相對(duì)地,解析參數(shù)就是調(diào)用函數(shù)時(shí)傳入實(shí)參。樁參數(shù)化的過(guò)程是:配置樁的參數(shù)的格式,添加樁參數(shù),完成參數(shù)化,生成樁參數(shù)。樁的參數(shù)化用以適配多種協(xié)議的不同外部服務(wù),故樁函數(shù)可以自動(dòng)生成,也可自定義,但自動(dòng)生的樁函數(shù)與自定義的樁函數(shù)其主要差別在于:自定義的樁函數(shù)調(diào)用優(yōu)先級(jí)別高于原函數(shù),原函數(shù)的優(yōu)先級(jí)別高于自動(dòng)生成的樁函數(shù)。舉個(gè)例子,假定在代碼中能夠找到某個(gè)函數(shù)的原本定義,此時(shí)自動(dòng)生成的樁函數(shù)是無(wú)效的,因?yàn)樵瘮?shù)優(yōu)先級(jí)別高于自動(dòng)生成的樁函數(shù)。而自定義樁函數(shù)可以帶來(lái)的好處在于:調(diào)用原函數(shù)可能其返回值為一個(gè)固定值,不能返回一個(gè)期望值,以使得測(cè)試不同的代碼分支。而樁函數(shù)的返回值,可由用戶自由控制,因而具備更大的靈活性。故在本實(shí)施例中,這個(gè)樁函數(shù)的返回值即預(yù)設(shè)響應(yīng),采用beanshell動(dòng)態(tài)生成。
而本發(fā)明的參數(shù)化樁也是智能匹配功能的一種體現(xiàn)。樁的匹配條件和模擬響應(yīng)也都隨之參數(shù)化,應(yīng)該理解地是,如果樁配置的參數(shù)格式是${參數(shù)名},當(dāng)設(shè)置了參數(shù)格式后,樁參數(shù)也必須設(shè)置,否則被測(cè)服務(wù)請(qǐng)求均會(huì)匹配不成功,只有重新設(shè)置了樁參數(shù),讓樁參數(shù)替換掉匹配條件和模擬響應(yīng)的格式化參數(shù),這時(shí)再請(qǐng)求一次,才可以看到應(yīng)該得到的響應(yīng)。
在本實(shí)施例中,需要說(shuō)明的是樁包括公共樁和私有樁,它們根據(jù)測(cè)試用例數(shù)據(jù)中的特定數(shù)據(jù)的不同而不同,所述公共樁即可在該鏈路里新建并被調(diào)用,也可以是抓取redis的數(shù)據(jù)自動(dòng)生成,可被與公共樁關(guān)聯(lián)于同一個(gè)IP下的鏈路調(diào)用,所述私有樁只能在該鏈路里新建,并只為該鏈路私有。這里所說(shuō)的新建樁包括自定義樁函數(shù)和原函數(shù)。
特別需要說(shuō)明地是,公共樁還具有錄制規(guī)則,所述公共樁的錄制途徑有兩種:1、從外部服務(wù)系統(tǒng)抓取流量進(jìn)行錄制,場(chǎng)景:平臺(tái)與ApiTester(接口測(cè)試平臺(tái))和DCT(造數(shù)據(jù)平臺(tái))對(duì)接時(shí),因?yàn)锳piTester和DCT的測(cè)試時(shí),所有正常的接口請(qǐng)求和響應(yīng)會(huì)發(fā)送一個(gè)公共的redis做緩存,平臺(tái)會(huì)定時(shí)從redis提取這些數(shù)據(jù)自動(dòng)生成公共樁;2、當(dāng)模擬器不匹配請(qǐng)求時(shí),通過(guò)樁錄制器(Stub Recorder)錄制模擬器攔截且不匹配直接轉(zhuǎn)發(fā)的請(qǐng)求和響應(yīng)生成為公共樁。所述公共樁錄制規(guī)則可以由內(nèi)部代碼預(yù)先建立默認(rèn)規(guī)則后自動(dòng)生成錄制規(guī)則,也可以在頁(yè)面人為設(shè)置。
所述的模擬匹配具有豐富的匹配規(guī)則,樁的匹配條件邏輯上支持多個(gè)樁之間的AND,OR和NOT關(guān)系;匹配的操作符支持equals(值相等),contains(值包含),regex(值正則表達(dá)式匹配)。而所述的預(yù)設(shè)響應(yīng)根據(jù)不同的模擬匹配條件,通過(guò)beanshell動(dòng)態(tài)生成。
參照?qǐng)D10,所述服務(wù)端口配置單元103包括:
通用協(xié)議配置子單元1031,用于若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為通用協(xié)議服務(wù),則修改DNS配置,把被測(cè)服務(wù)請(qǐng)求的IP指向模擬器的IP,配置Nginx,利用Nginx的端口映射,把被測(cè)服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口;
自定義協(xié)議配置子單元1032,用于若被測(cè)服務(wù)的當(dāng)前協(xié)議服務(wù)為自定義協(xié)議服務(wù),通過(guò)OSP的靜態(tài)路由的IP和端口,把被測(cè)服務(wù)請(qǐng)求的IP直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
應(yīng)該理解地是,本實(shí)施例中,把協(xié)議服務(wù)分為通用協(xié)議服務(wù)和自定義協(xié)議服務(wù),具體地,服務(wù)模擬平臺(tái)針對(duì)不同協(xié)議服務(wù)有以下幾種模擬的方案:
1)HTTP/Thrift協(xié)議模擬(通用協(xié)議模擬):
用戶把B服務(wù)的IP(通過(guò)修改DNS配置)地址指向平臺(tái)模擬器,通過(guò)平臺(tái)內(nèi)置的Nginx把A服務(wù)的請(qǐng)求指向模擬器啟動(dòng)的監(jiān)聽(tīng)鏈路的端口。
2)OSP協(xié)議模擬(自定義協(xié)議模擬):
用戶把B服務(wù)的IP通過(guò)OSP的靜態(tài)路由的IP和端口直接指向模擬器的IP和對(duì)應(yīng)OSP鏈路的監(jiān)聽(tīng)鏈路的端口。
需要補(bǔ)充說(shuō)明的是,Nginx是一個(gè)開(kāi)源的反向代理服務(wù)器,平臺(tái)只是用了Nginx的端口映射功能,用于HTTP協(xié)議或Thrift協(xié)議模擬,平臺(tái)內(nèi)置Nginx,用戶無(wú)需再使用服務(wù)器操作Nginx,只需在頁(yè)面上配置。如在Nginx配置頁(yè)面配置是:Server Name:cart.api.vip.com listen Port:80默認(rèn)監(jiān)聽(tīng)端口:1234,實(shí)際會(huì)在Nginx生成一個(gè)配置文件內(nèi)容如下:
表示cart.api.vip.com域的請(qǐng)求并且端口是80的,統(tǒng)一轉(zhuǎn)發(fā)到監(jiān)聽(tīng)端口是1234的鏈路。例如請(qǐng)求是http://cart.api.vip.com:80/xxx,通過(guò)Nginx轉(zhuǎn)發(fā)后變?yōu)閔ttp://127.0.0.1:1234。
Nginx反向代理的原理是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。
參照?qǐng)D11,所述報(bào)文解析模塊30包括:
解析單元301,用于解析所攔截的請(qǐng)求生成請(qǐng)求參數(shù);
封裝單元302,用于將請(qǐng)求參數(shù)轉(zhuǎn)換為統(tǒng)一的封裝不同協(xié)議的請(qǐng)求對(duì)象;
傳送單元303,用于傳送請(qǐng)求對(duì)象至模擬器的樁匹配器。
在本實(shí)施例中,所述報(bào)文解析模塊實(shí)際上完成的是模擬器普通模擬匹配執(zhí)行之前被測(cè)服務(wù)請(qǐng)求接收的過(guò)程,鏈路啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè)InboundChannel(InboundChannel專門用于A服務(wù)和模擬器間通信的通道),用于監(jiān)聽(tīng)收到的來(lái)自A服務(wù)的請(qǐng)求,收到請(qǐng)求后,通過(guò)Request Extrator對(duì)請(qǐng)求的參數(shù)進(jìn)行提取(如uri,body的參數(shù)),轉(zhuǎn)為一個(gè)RequestElement請(qǐng)求對(duì)象(HTTP,OSP等不同協(xié)議的請(qǐng)求內(nèi)容統(tǒng)一轉(zhuǎn)換為RequestElement請(qǐng)求對(duì)象即封裝有不同協(xié)議的請(qǐng)求參數(shù))。模擬器再把RequestElement傳入Stub Matcher(樁匹配器)與用戶預(yù)設(shè)的樁進(jìn)行匹配。整個(gè)把請(qǐng)求解析為RequestElement的操作均是由模擬器的內(nèi)部代碼實(shí)現(xiàn)。
參照?qǐng)D12,所述執(zhí)行模塊40包括:
接收單元401,用于樁匹配器接收解析后的請(qǐng)求;
調(diào)用單元402,用于調(diào)用樁參數(shù);
釋放單元403,用于解析樁參數(shù),以釋放模擬匹配條件和預(yù)設(shè)響應(yīng);
執(zhí)行單元404,用于調(diào)用模擬匹配條件,執(zhí)行匹配命令。
在本實(shí)施例中,所述執(zhí)行模塊實(shí)際上完成的是模擬器普通模擬匹配執(zhí)行之前的樁參數(shù)化相呼應(yīng)的解參過(guò)程,樁可以是一個(gè)常量,也可以是一個(gè)變量,這樣,把樁定義為一個(gè)函數(shù),函數(shù)定義時(shí)候傳入的參數(shù)叫形參,而調(diào)用函數(shù)時(shí)傳入的參數(shù)叫實(shí)參,模擬器先替換掉樁里區(qū)配條件和預(yù)設(shè)響應(yīng)的參數(shù),釋放出模擬匹配條件和預(yù)設(shè)響應(yīng)的原函數(shù),然后再調(diào)用模擬匹配條件,執(zhí)行匹配命令。
本發(fā)明還公開(kāi)了一種模擬服務(wù)的集中管理平臺(tái),包括:
一個(gè)或多個(gè)不同協(xié)議的如上所述的模擬服務(wù)的裝置;及
UI交互模塊,用于建立UI交互測(cè)試模型及交互規(guī)范,編輯靜態(tài)HTML,以負(fù)責(zé)所有模擬服務(wù)的交互對(duì)接;及
日志管理模塊,用于提供日志管理功能,可對(duì)模擬測(cè)試的結(jié)果進(jìn)行日志的記錄、查看、下載及清理;及
模擬數(shù)據(jù)庫(kù),用于存儲(chǔ)模擬服務(wù)的所有數(shù)據(jù)。
在本發(fā)明中,所述的模擬服務(wù)的集中管理平臺(tái)完全采用WEB UI的可視化操作界面,配置共享,用戶使用時(shí)無(wú)需任何技能,也不需了解技術(shù)細(xì)節(jié)也就是說(shuō)無(wú)需自己編碼,就能實(shí)現(xiàn)服務(wù)的摸擬,大大地提高了聯(lián)調(diào)測(cè)試的效率。
在實(shí)際應(yīng)用中,模擬服務(wù)的集中管理平臺(tái)就是對(duì)上述一個(gè)或多個(gè)不同協(xié)議服務(wù)的所述模擬器進(jìn)行集中管理的平臺(tái),模擬服務(wù)平臺(tái)的核心原理是一個(gè)代理服務(wù)平臺(tái),為進(jìn)行模擬服務(wù)的模擬器構(gòu)建適配的測(cè)試環(huán)境;根據(jù)被測(cè)服務(wù)的請(qǐng)求類型尋找合適的模擬器及不同協(xié)議的鏈路配置,以提供相對(duì)應(yīng)的服務(wù);對(duì)多個(gè)模擬器的集中管理,配置共享,提高聯(lián)調(diào)測(cè)試工作效率;日志記錄及數(shù)據(jù)庫(kù)提供集中管理的常規(guī)服務(wù);呈現(xiàn)解耦依賴情況時(shí),執(zhí)行解耦依賴,以繞開(kāi)所依賴外部服務(wù)的接口,方便測(cè)試人員進(jìn)行自己負(fù)責(zé)的測(cè)試服務(wù)。
所述的模擬服務(wù)的集中管理平臺(tái)使得測(cè)試人員的聯(lián)調(diào)測(cè)試、開(kāi)發(fā)聯(lián)調(diào)、異常場(chǎng)景及復(fù)雜測(cè)試場(chǎng)景的測(cè)試更趨簡(jiǎn)化,還使得壓測(cè)數(shù)據(jù)及環(huán)境的簡(jiǎn)化
在實(shí)際應(yīng)用中,本發(fā)明提供的一種模擬服務(wù)的方法及裝置的實(shí)際操作過(guò)程如下:
一、模擬服務(wù)的方法
以HTTP協(xié)議模擬為例:
1.模擬器自帶一個(gè)Nginx接收請(qǐng)求,Nginx根據(jù)用戶的配置的轉(zhuǎn)發(fā)端口,Nginx收到請(qǐng)求后,把轉(zhuǎn)發(fā)到對(duì)應(yīng)鏈路啟動(dòng)的監(jiān)聽(tīng)端口。
2.鏈路啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè)InboundChannel(InboundChannel專門用于A服務(wù)和模擬器間通信的通道),用于監(jiān)聽(tīng)收到的來(lái)自A服務(wù)的請(qǐng)求。收到請(qǐng)求后,通過(guò)Request Extrator對(duì)請(qǐng)求的參數(shù)進(jìn)行提取(如uri,body的參數(shù)),轉(zhuǎn)為一個(gè)RequestElement請(qǐng)求對(duì)象(HTTP,OSP等不同協(xié)議的請(qǐng)求內(nèi)容統(tǒng)一轉(zhuǎn)換為RequestElement請(qǐng)求對(duì)象)。
3.模擬器再把RequestElement傳入Stub Matcher(樁匹配器)與用戶預(yù)設(shè)的樁進(jìn)行匹配。
4.匹配失敗就會(huì)通過(guò)OutboundChannel(OutboundChannel是專門用于模擬器和B服務(wù)通信的通道,只在轉(zhuǎn)發(fā)時(shí)才建立)轉(zhuǎn)發(fā)到真實(shí)服務(wù)并接收響應(yīng),并且通過(guò)Stub Recorder(樁錄制器,專門用于把錄制模擬器攔截且轉(zhuǎn)發(fā)的響應(yīng)錄制為公共樁)錄制響應(yīng),然后把真實(shí)響應(yīng)通過(guò)InBoundChannel返回給請(qǐng)求方(A服務(wù))。
5.匹配成功后,會(huì)把預(yù)設(shè)響應(yīng)通過(guò)InBoundChannel直接返回給請(qǐng)求方(A服務(wù))。
所述的模擬器實(shí)現(xiàn)模擬服務(wù)的普通匹配過(guò)程實(shí)際操作流程:
1、模擬器的鏈路配置,包括:鏈路ID、鏈路IP、鏈路名稱、鏈路監(jiān)聽(tīng)端口、是否使用匹配、目標(biāo)服務(wù)目標(biāo)IP、目標(biāo)服務(wù)Host/URL、目標(biāo)服務(wù)端口及協(xié)議類型,其中,第一個(gè)鏈路都會(huì)起一個(gè)監(jiān)聽(tīng)端口,目標(biāo)服務(wù)設(shè)置用戶匹配失敗后的轉(zhuǎn)發(fā),支持協(xié)議類型包括:HTTP、DSP、Thrift等;
2、鏈路列表及狀態(tài)控制,鏈路狀態(tài)包括:?jiǎn)?dòng)、暫停(只轉(zhuǎn)發(fā)不匹配使用)和停止;
3、Nginx配置,用于HTTP協(xié)議或Thrift協(xié)議模擬,平臺(tái)內(nèi)置Nginx,用戶無(wú)需再在服務(wù)器上操作Nginx,只需在頁(yè)面上配置;
4、JAR包管理,用于RPC協(xié)議模擬,統(tǒng)一管理客戶端的JAR包,便于解析不同協(xié)議服務(wù)。
5、樁配置,指定模擬匹配規(guī)則、預(yù)設(shè)響應(yīng)、樁參數(shù)等設(shè)置,每個(gè)鏈路可設(shè)置多個(gè)樁;
6、公共樁錄制規(guī)則設(shè)置,公共樁的錄制途徑有兩種:1、從外部服務(wù)系統(tǒng)抓取流量進(jìn)行錄制;2、當(dāng)模擬器不匹配請(qǐng)求時(shí),通過(guò)樁錄制器(Stub Recorder)錄制模擬器攔截且不匹配直接轉(zhuǎn)發(fā)的請(qǐng)求和響應(yīng)生成為公共樁。所述公共樁錄制規(guī)則可以手工設(shè)置,如果有不存在的條件,還可以自動(dòng)生成錄制規(guī)則;
7、日志記錄,模擬匹配失敗時(shí)記錄轉(zhuǎn)發(fā)的日志,模擬匹配成功時(shí)記錄反回預(yù)設(shè)響應(yīng)的日志;
8、單獨(dú)啟動(dòng)的服務(wù)壓測(cè)包進(jìn)行壓力測(cè)試,支持HTTP和DSP協(xié)議的壓測(cè)時(shí)服務(wù)模擬,一鍵下載壓測(cè)包,啟動(dòng)壓測(cè)模擬器,壓測(cè)模擬器自身進(jìn)行壓力測(cè)試,查看測(cè)試結(jié)果。
二、模擬服務(wù)的集中管理平臺(tái)
所述的模擬服務(wù)的集中管理平臺(tái)就是對(duì)所述模擬器進(jìn)行集中管理的平臺(tái),模擬服務(wù)平臺(tái)的核心原理是一個(gè)代理服務(wù)平臺(tái),所述平臺(tái)的工作內(nèi)容包括為進(jìn)行模擬服務(wù)的模擬器構(gòu)建適配的測(cè)試環(huán)境;根據(jù)被測(cè)服務(wù)的請(qǐng)求類型尋找合適的模擬器及鏈路配置,以提供相對(duì)應(yīng)的服務(wù);對(duì)多個(gè)模擬器的集中管理,配置共享,提高聯(lián)調(diào)測(cè)試工作效率;日志記錄及存儲(chǔ)模擬服務(wù)的數(shù)據(jù)等等,平臺(tái)的操作步驟:
步驟一,建立UI交互測(cè)試模型,以使用戶所有的操作基本都是從平臺(tái)的WEB界面進(jìn)行,無(wú)需編碼;
步驟二,利用測(cè)試模型,生成測(cè)試框架,包括:?jiǎn)卧獪y(cè)試框架、集成測(cè)試框架、功能測(cè)試框架及壓力測(cè)試框架;
步驟三,呈現(xiàn)解耦依賴的情況時(shí)執(zhí)行解耦依賴,以繞開(kāi)所依賴外部服務(wù)的接口;
步驟四,編寫測(cè)試事件,通過(guò)模擬外部服務(wù)的測(cè)試用例或注冊(cè)自定義服務(wù)事件的API函數(shù),將已編寫好的腳本編輯到測(cè)試框架中相應(yīng)的模擬器中;
步驟五,在模擬器中,實(shí)施模擬測(cè)試匹配,返回相對(duì)應(yīng)的響應(yīng);
步驟六,日志記錄,可進(jìn)行日志的記錄、查看、下載及清理,若匹配成功,返回預(yù)設(shè)響應(yīng)的日志;若匹配失敗,返回轉(zhuǎn)發(fā)的日志;
步驟七,模擬數(shù)據(jù)庫(kù)收集測(cè)試數(shù)據(jù),存儲(chǔ)并管理,
所述測(cè)試框架是提供模擬測(cè)試用例的模擬測(cè)試分析工具,它包括模擬測(cè)試的基礎(chǔ)模塊、管理模塊和統(tǒng)計(jì)分析模塊,所述基礎(chǔ)模塊用于執(zhí)行不同測(cè)試類型的模擬匹配命令時(shí),提供所調(diào)用的模擬測(cè)試用例,且所述的模擬測(cè)試用例是可重用的;所述管理模塊用于管理不同模擬測(cè)試類型的模擬測(cè)試用例的調(diào)用;所述統(tǒng)計(jì)分析模塊用于統(tǒng)計(jì)且分析所述模擬測(cè)試的結(jié)果。所述測(cè)試架構(gòu)根據(jù)模擬測(cè)試預(yù)期的不同區(qū)分為不同的測(cè)試類型,再模擬不同的測(cè)試類型建立的模擬測(cè)試架構(gòu),所述模擬測(cè)試架構(gòu)包括單元測(cè)試架構(gòu)、集成測(cè)試架構(gòu)、功能測(cè)試架構(gòu)和壓力測(cè)試架構(gòu),每種所述模擬測(cè)試架構(gòu)是提取每種測(cè)試類型的共性部分組成的獨(dú)立的體系結(jié)構(gòu)。適用場(chǎng)景:
1)功能測(cè)試、集成測(cè)試和單元測(cè)試
測(cè)試或研發(fā)人員在做功能測(cè)試、集成測(cè)試、單元測(cè)試甚至功能開(kāi)發(fā)的時(shí)候,通過(guò)把自身服務(wù)對(duì)接到平臺(tái)模擬器,可以簡(jiǎn)單的繞開(kāi)外部不穩(wěn)定、不可用、復(fù)雜的外部服務(wù)服務(wù)繞開(kāi)掉并可以模擬外部服務(wù)的任意返回。用戶只需要關(guān)注自身服務(wù)的功能和邏輯從而實(shí)現(xiàn)對(duì)外部服務(wù)的解耦依賴。
2)性能測(cè)試
測(cè)試人員做壓測(cè)的時(shí)候,把平臺(tái)提供的壓測(cè)包下載到壓測(cè)機(jī)上并啟動(dòng)。壓測(cè)包是可獨(dú)立啟動(dòng)的高性能模擬服務(wù),和平臺(tái)本身通過(guò)接口對(duì)接并在啟動(dòng)時(shí)獲取樁和鏈路相關(guān)數(shù)據(jù)。用戶壓測(cè)的時(shí)候無(wú)需部署外部依賴服務(wù)和造大批量外部壓測(cè)數(shù)據(jù),只要簡(jiǎn)單的把外部依賴改為連接模擬器并關(guān)注被測(cè)服務(wù)本身的性能和壓測(cè)數(shù)據(jù)。所述平臺(tái)提供的壓測(cè)包,支持通用協(xié)議和自定義協(xié)議的壓測(cè)時(shí)服務(wù)模擬,而且壓測(cè)包也是使用Web界面指定鏈路的樁設(shè)置,無(wú)需重復(fù)配置。步驟為:首先一鍵下載平臺(tái)提供的壓測(cè)包,啟動(dòng)壓測(cè)模擬器,進(jìn)行壓力模擬測(cè)試,通過(guò)界面直接查看測(cè)試結(jié)果。
需要說(shuō)明的是,在本文中,術(shù)語(yǔ)“包括”、“包含”或者其任何其它變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者裝置不僅包括那些要素,而且還包括沒(méi)有明確列出的其它要素,或者是還包括為這種過(guò)程、方法、物品或者裝置所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括該要素的過(guò)程、方法、物品或者裝置中還存在另外的相同要素。上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件系統(tǒng)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)配置本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器或者網(wǎng)絡(luò)設(shè)備等電子設(shè)備)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是在本發(fā)明的發(fā)明構(gòu)思下,利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)變換,或直接/間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域均包括在本發(fā)明的專利保護(hù)范圍內(nèi)。