本發(fā)明涉及計算機軟件測試技術領域,特別地涉及一種WebService的Mock測試的方法及裝置。
背景技術:
軟件測試是指在規(guī)定的條件下對程序進行操作,以發(fā)現(xiàn)程序錯誤,衡量軟件質(zhì)量,并對其是否能滿足設計要求進行評估的過程。在做測試的時候,經(jīng)常會遇到很多被測程序依賴于外部的WebService接口以提供測試環(huán)境及參數(shù)等,依賴的WebService接口不在被測程序的測試范疇內(nèi),只是被測試程序的某個執(zhí)行步驟需要調(diào)用外部的WebService接口獲取數(shù)據(jù)。然而,很多時候外部WebService接口所屬的程序是不可用或不穩(wěn)定的,需要測試很多次,才會得到明確結(jié)果。而且由于WebService服務器的性能問題,會導致測試時間很長。這時需要利用WebService接口的Mock模擬(虛擬某些特定對象以便測試),來達到獲取WebService接口的同樣的效果。
現(xiàn)有的WebService的Mock測試方法是根據(jù)接口的需求和功能實現(xiàn),編寫一個假的WebService接口,并在該接口中實現(xiàn)Mock測試需要的參數(shù)和返回值,然后在被測程序中調(diào)用生成的假的WebService接口實現(xiàn)Mock測試。
但是,現(xiàn)有的技術方案實現(xiàn)起來較為不便,主要表現(xiàn)在:
1、需要實現(xiàn)整個WebService的接口功能,編寫假的WebService接口時需要大量的代碼,同時需要發(fā)布webservice到web服務器上;
2、對Mock測試的人員需要較強的編碼技能和大量的時間,需要了解不同開發(fā)平臺下的webservice服務端實現(xiàn)機制等;
3、當接口發(fā)生變化時需要修改現(xiàn)有的代碼,維護工作量大,易出錯。
因此,需要一種實現(xiàn)簡單、程序輕量的WebService的Mock測試的方法及系統(tǒng)。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種WebService的Mock測試的方法及裝置,能夠簡單、精準、高性能地對WebService進行Mock測試。Mock測試人員無需掌握任何編碼技能,測試內(nèi)容也與WebService的路徑無關,根據(jù)獲得的WebService接口的參數(shù)信息即可實現(xiàn)Mock測試,方法靈活、實現(xiàn)方便,做到了真正的黑盒Mock測試。
為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種WebService的Mock測試的方法。
一種WebService的Mock測試的方法包括:生成待Mock測試的輸入?yún)?shù)和輸出參數(shù);將所述輸入?yún)?shù)和輸出參數(shù)的集合以參數(shù)組的形式保存到數(shù)據(jù)庫中;解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容并生成文本文檔;將所述文本文檔與所述數(shù)據(jù)庫中存儲的各參數(shù)組中的輸入?yún)?shù)依次進行比較匹配;如果匹配成功,輸出所述參數(shù)組中的輸出參數(shù),否則,輸出錯誤信息。
可選地,生成待Mock測試的輸入?yún)?shù)和輸出參數(shù)的步驟進一步包括:分析真實的Webservice接口,以獲得參數(shù)信息;以及將所獲得的參數(shù)信息替換成待Mock測試的輸入?yún)?shù)和輸出參數(shù)。
可選地,每個參數(shù)組包含一個或多個輸入?yún)?shù)和一個輸出參數(shù)。
可選地,將所述待Mock測試的輸入?yún)?shù)和輸出參數(shù)的集合以參 數(shù)組的形式保存到數(shù)據(jù)庫中的步驟包括:將所述輸入?yún)?shù)在文檔中的位置作為鍵名,在文檔中的值作為鍵值,和參數(shù)組序號一起保存到數(shù)據(jù)庫中;將與所述輸入?yún)?shù)對應的輸出參數(shù)與參數(shù)組序號一起保存到數(shù)據(jù)庫中。
可選地,解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容的步驟之前,還包括:修改所述調(diào)用系統(tǒng)發(fā)送Mock測試請求的地址為所述WebService的Mock測試系統(tǒng)。
可選地,將所述文本文檔與所述數(shù)據(jù)庫中存儲的各參數(shù)組中的輸入?yún)?shù)依次進行比較匹配的步驟包括:按數(shù)據(jù)庫中的參數(shù)組排序依次獲得各參數(shù)組的輸入?yún)?shù);將所述文本文檔與每個參數(shù)組的所有輸入?yún)?shù)的鍵名和鍵值分別進行比較匹配。
根據(jù)本發(fā)明的另一方面,提供了一種WebService的Mock測試的裝置。
一種WebService的Mock測試的裝置包括:參數(shù)生成模塊,用于生成待Mock測試的輸入?yún)?shù)和輸出參數(shù);參數(shù)保存模塊,用于將所述輸入?yún)?shù)和輸出參數(shù)的集合以參數(shù)組的形式保存到數(shù)據(jù)庫中;請求解析模塊,用于解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容并生成文本文檔;比較匹配模塊,用于將所述文本文檔與所述數(shù)據(jù)庫中存儲的各參數(shù)組中的輸入?yún)?shù)依次進行比較匹配;結(jié)果輸出模塊,用于如果匹配成功,輸出所述參數(shù)組中的輸出參數(shù),否則,輸出錯誤信息。
可選地,所述參數(shù)生成模塊還用于:分析真實的Webservice接口,以獲得參數(shù)信息;以及將所獲得的參數(shù)信息替換成待Mock測試的輸入?yún)?shù)和輸出參數(shù)。
可選地,每個參數(shù)組包含一個或多個輸入?yún)?shù)和一個輸出參數(shù)。
可選地,所述參數(shù)保存模塊還用于:將所述輸入?yún)?shù)在文檔中的位置作為鍵名,在文檔中的值作為鍵值,和參數(shù)組序號一起保存到數(shù)據(jù)庫中;將與所述輸入?yún)?shù)對應的輸出參數(shù)與參數(shù)組序號一起保存到數(shù)據(jù)庫中。
可選地,所述請求解析模塊在解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容之前,還用于:修改所述調(diào)用系統(tǒng)發(fā)送Mock測試請求的地址為所述WebService的Mock測試系統(tǒng)。
可選地,所述比較匹配模塊還用于:按數(shù)據(jù)庫中的參數(shù)組排序依次獲得各參數(shù)組的輸入?yún)?shù);將所述文本文檔與每個參數(shù)組的所有輸入?yún)?shù)的鍵名和鍵值分別進行比較匹配。
根據(jù)本發(fā)明的技術方案,通過將分析真實的WebService接口得到的參數(shù)替換成待Mock測試的參數(shù)并保存,再與Mock測試請求的輸入內(nèi)容進行比較匹配,即可實現(xiàn)簡單、精準、高性能地對WebService進行Mock測試。Mock測試人員無需掌握任何編碼技能,測試內(nèi)容也與WebService的路徑無關,根據(jù)獲得的WebService接口的參數(shù)信息即可實現(xiàn)Mock測試,方法靈活、實現(xiàn)方便,做到了真正的黑盒Mock測試。
附圖說明
附圖用于更好地理解本發(fā)明,不構(gòu)成對本發(fā)明的不當限定。其中:
圖1是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的方法的主要步驟示意圖;
圖2是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的方法實現(xiàn)流程圖;
圖3是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的裝置的主要模塊示意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。
圖1是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的方法的主要步驟示意圖。如圖1所示,本發(fā)明的一種WebService的Mock測試的方法主要包括如下的步驟S11至步驟S15。
步驟S11:生成待Mock測試的輸入?yún)?shù)和輸出參數(shù)。該步驟S11可以按照如下的順序執(zhí)行:
步驟S111:分析真實的Webservice接口,以獲得參數(shù)信息;以及
步驟S112:將所獲得的參數(shù)信息替換成待Mock測試的輸入?yún)?shù)和輸出參數(shù)。
通過對真實的WebService接口的需求和功能進行分析,得到輸入?yún)?shù)和輸出參數(shù)等參數(shù)信息,然后,根據(jù)需要將得到的參數(shù)信息進行按規(guī)則替換,以生成可控、可操作的數(shù)據(jù)。例如,對于電商網(wǎng)站的訂單系統(tǒng)進行測試時,無法選用獲得的真實用戶的賬號及密碼等來進行下單行為,則此時就需要將真實用戶的參數(shù)信息替換成測試參數(shù);又如,當需要進行行為驗證測試時,會將驗證碼發(fā)送到用戶的手機上,此時就需要將用戶的手機號碼替換成測試人員的手機號碼以便測試。
步驟S12:將所述輸入?yún)?shù)和輸出參數(shù)的集合以參數(shù)組的形式保存到數(shù)據(jù)庫中。如步驟S11中所述,生成待Mock的輸入?yún)?shù)和輸出參數(shù)后,需要將生成的待測試參數(shù)以參數(shù)組的形式進行保存。此時,每個參數(shù)組中可包含一個或者多個輸入?yún)?shù)和一個輸出參數(shù)。例如,在進行登錄驗證測試時,輸入的參數(shù)可以是“用戶名”和“密碼”兩個 參數(shù),輸出參數(shù)是“登錄成功”或者“登錄失敗”一個參數(shù)。
在將所述待Mock測試的輸入?yún)?shù)和輸出參數(shù)的集合以參數(shù)組的形式保存到數(shù)據(jù)庫中時,可以按照如下的步驟進行。
步驟S121:將所述輸入?yún)?shù)在文檔中的位置作為鍵名,在文檔中的值作為鍵值,和參數(shù)組序號一起保存到數(shù)據(jù)庫中。在本發(fā)明的實施例中,將生成的待Mock測試的輸入?yún)?shù)和輸出參數(shù)保存在XML文檔中以便進行修改及存儲。將XML文檔中每個參數(shù)組的待Mock測試輸入?yún)?shù)集合,以每個參數(shù)在XML文檔中的位置(利用Xpath來表述位置)作為鍵名Key,每個參數(shù)在XML文檔中的值作為鍵值value,依次存入數(shù)據(jù)庫中。同時,將該輸入?yún)?shù)集合的參數(shù)組ID也對應存入數(shù)據(jù)庫中。本發(fā)明實施例通過使用XML文檔的xpath解析的方法,即可實現(xiàn)輸入?yún)?shù)的精準匹配。
步驟S122:將與所述輸入?yún)?shù)對應的輸出參數(shù)與參數(shù)組序號一起保存到數(shù)據(jù)庫中。如此,每個參數(shù)組序號就對應著一組輸入?yún)?shù)和一組輸出參數(shù)。
步驟S13:解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容并生成文本文檔。當執(zhí)行完步驟S11及步驟S12后,即可開始進行Mock測試。首先,是由調(diào)用系統(tǒng)發(fā)送Mock測試請求,然后,由Mock測試系統(tǒng)解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求。在Mock測試系統(tǒng)解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容之前,還需要修改所述調(diào)用系統(tǒng)發(fā)送Mock測試請求的地址為所述WebService的Mock測試系統(tǒng)。之后,Mock測試系統(tǒng)將解析的結(jié)果生成文本文檔進行顯示。在本發(fā)明的實施例中以XML文檔為例進行說明。
步驟S14:將所述文本文檔與所述數(shù)據(jù)庫中存儲的各參數(shù)組中的輸入?yún)?shù)依次進行比較匹配。在進行比較匹配時,可以按照如下的步 驟進行:
步驟S141:按數(shù)據(jù)庫中的參數(shù)組排序依次獲得各參數(shù)組的輸入?yún)?shù);
步驟S142:將所述文本文檔與每個參數(shù)組的所有輸入?yún)?shù)的鍵名和鍵值分別進行比較匹配。
步驟S15:如果匹配成功,輸出所述參數(shù)組中的輸出參數(shù),否則,輸出錯誤信息。如果所述文本文檔與其中某個參數(shù)組的所有輸入?yún)?shù)的鍵名和鍵值都相等,則認為該文本文檔與該參數(shù)組的輸入?yún)?shù)匹配成功,輸出該參數(shù)組中保存的輸出參數(shù),否則,認為未匹配成功,輸出錯誤信息。
圖2是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的方法實現(xiàn)流程圖。以下將參照圖2對本發(fā)明的詳細實施過程進行介紹。如圖2所示,首先是分析WebService接口,獲取參數(shù)信息(步驟S201),根據(jù)真實的WebService接口的需求及功能實現(xiàn),獲得輸入?yún)?shù)和輸出參數(shù)等參數(shù)信息,并生成XML文檔。之后,根據(jù)數(shù)據(jù)可控、可操作原則對獲取的參數(shù)信息進行處理,替換成待Mock測試的參數(shù)(步驟S202)。然后將XML文檔中的待Mock測試輸入?yún)?shù)集合,以每個參數(shù)在文檔中的位置Xpath作為鍵名key,每個參數(shù)在文檔中的值作為鍵值value,依次將待Mock測試的參數(shù)保存在數(shù)據(jù)庫中(步驟S203),同時,將該組參數(shù)的參數(shù)組序號也保存在數(shù)據(jù)庫中。
開始進行Mock測試時,先修改設置調(diào)用系統(tǒng)發(fā)出測試請求的地址指向Mock測試系統(tǒng),然后由調(diào)用系統(tǒng)發(fā)出Mock測試請求,此時,Mock測試系統(tǒng)會解析Mock測試請求,并獲得輸入內(nèi)容(步驟S204),以XML文檔的形式進行保存。之后,將輸入內(nèi)容與數(shù)據(jù)庫中的輸入?yún)?shù)進行比較(步驟S205)以測試程序是否運行正確。
在進行輸入內(nèi)容與數(shù)據(jù)庫中的輸入?yún)?shù)比較匹配時,將按照數(shù)據(jù) 庫中的參數(shù)組排序,依次獲取每個參數(shù)組中的所有輸入?yún)?shù)以進行比較,最后輸出結(jié)果。具體的執(zhí)行過程如下:
步驟S206:依次獲取當前參數(shù)組中的輸入?yún)?shù);
步驟S207:判斷key是否相同,若key相同,則執(zhí)行步驟S208,否則執(zhí)行步驟S211;
步驟S208:判斷對應的value是否相同,若value相同,則執(zhí)行步驟S209,否則執(zhí)行步驟S211;
步驟S209:判斷是否已獲取當前參數(shù)組的所有輸入?yún)?shù),如果已獲取,則執(zhí)行步驟S210,否則執(zhí)行步驟S206;
步驟S210:匹配成功,輸出該參數(shù)組的輸出參數(shù);
步驟S211:判斷是否已獲取全部參數(shù)組的輸入?yún)?shù),如果是,則執(zhí)行步驟S213,否則執(zhí)行步驟S212,并從步驟S206開始重新循環(huán)執(zhí)行;
步驟S212:獲取下一參數(shù)組的輸入?yún)?shù);
步驟S213:輸出錯誤信息。
經(jīng)過上述的步驟S206至步驟S213,即可實現(xiàn)將調(diào)用系統(tǒng)發(fā)出的Mock測試請求與數(shù)據(jù)庫中的輸入?yún)?shù)進行比較匹配,并輸出相應的結(jié)果。
圖3是根據(jù)本發(fā)明實施例的一種WebService的Mock測試的裝置的主要模塊示意圖。如圖3所示,本發(fā)明的WebService的Mock測試的裝置30主要包括參數(shù)生成模塊31、參數(shù)保存模塊32、請求解析模塊33、比較匹配模塊34及結(jié)果輸出模塊35。
參數(shù)生成模塊31用于生成待Mock測試的輸入?yún)?shù)和輸出參數(shù);參數(shù)保存模塊32用于將所述輸入?yún)?shù)和輸出參數(shù)的集合以參數(shù)組的形式保存到數(shù)據(jù)庫中;請求解析模塊33用于解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容并生成文本文檔;比較匹配模塊34用于將所述文本文檔與所述數(shù)據(jù)庫中存儲的各參數(shù)組中的輸入?yún)?shù)依次進行比較匹 配;結(jié)果輸出模塊35用于如果匹配成功,輸出所述參數(shù)組中的輸出參數(shù),否則,輸出錯誤信息。
參數(shù)生成模塊31還可以用于分析真實的Webservice接口,以獲得參數(shù)信息;以及將所獲得的參數(shù)信息替換成待Mock測試的輸入?yún)?shù)和輸出參數(shù)。
根據(jù)使用的具體情況,本發(fā)明實施例中的每個參數(shù)組可以包含一個或多個輸入?yún)?shù)和一個輸出參數(shù)。
參數(shù)保存模塊32還可以用于將所述輸入?yún)?shù)在文檔中的位置作為鍵名,在文檔中的值作為鍵值,和參數(shù)組序號一起保存到數(shù)據(jù)庫中;將與所述輸入?yún)?shù)對應的輸出參數(shù)與參數(shù)組序號一起保存到數(shù)據(jù)庫中。
請求解析模塊33在解析調(diào)用系統(tǒng)所發(fā)送的Mock測試請求的輸入內(nèi)容之前,還可以用于修改所述調(diào)用系統(tǒng)發(fā)送Mock測試請求的地址為所述WebService的Mock測試系統(tǒng)。
比較匹配模塊34還可以用于按數(shù)據(jù)庫中的參數(shù)組排序依次獲得各參數(shù)組的輸入?yún)?shù);將所述文本文檔與每個參數(shù)組的所有輸入?yún)?shù)的鍵名和鍵值分別進行比較匹配。
根據(jù)本發(fā)明實施例的技術方案,通過將分析真實的WebService接口得到的參數(shù)替換成待Mock測試參數(shù)并保存,再與Mock測試請求的輸入內(nèi)容進行比較匹配,即可實現(xiàn)簡單、精準、高性能地對WebService進行Mock測試。
采用本發(fā)明的技術方案,Mock測試人員不需要掌握任何編碼技能,也無需了解Mock測試接口的實現(xiàn)方法,只需要拿到正確的 webservice接口的請求post數(shù)據(jù)即可實現(xiàn)Mock測試。且在Mock測試執(zhí)行時不需要考慮不同項目webservice post提交的地址,即與url地址與關,只與post內(nèi)容有關,可以做到更靈活的配置。由于基于XML解析實現(xiàn)數(shù)據(jù)項和數(shù)據(jù)內(nèi)容的匹配,可以做到精準Mock測試,不同項目調(diào)用同一接口時只要數(shù)據(jù)不同,結(jié)果即不同,故而不會相互影響。
本發(fā)明的基于純HTTP的Mock測試實現(xiàn),其性能遠高于編寫傳統(tǒng)的webservice接口的Mock測試性能,甚至遠高于正常的非Mock調(diào)用測試的性能。而且基于純HTTP的XML匹配方式不需要考慮后臺的webservice服務端實現(xiàn)方式,因此做到了真正的黑盒Mock測試。
另外,本發(fā)明實施例中所述的以key-value形式進行數(shù)據(jù)的保存,也可以選用其他的形式,例如map,json等,均可以用于保存響應結(jié)果與參數(shù)輸入的一對多關系。當使用Map保存輸入?yún)?shù)/參數(shù)組和輸出參數(shù)時,輸入?yún)?shù)為Map的Key,輸出參數(shù)為Value,將整個map保存在數(shù)據(jù)庫的一個字段中;Map與Json可以自由轉(zhuǎn)換,也可以將JSON字符串整體保存在數(shù)據(jù)庫的一個字段中。
同樣地,在對Mock測試請求的輸入內(nèi)容進行比較匹配時,也可選擇不限于本發(fā)明實施例的其他的方式,例如,可利用文本字符串匹配等,將全部Mock測試請求的輸入?yún)?shù)做為一個字符串整體進行完整或部分匹配等。
上述具體實施方式,并不構(gòu)成對本發(fā)明保護范圍的限制。本領域技術人員應該明白的是,取決于設計要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進等,均應包含在本發(fā)明保護范圍之內(nèi)。