14.2.知識包測試
簡介
在URule Pro當中(zhōng)定義好各種類型的規則文(wén)件後,需要将要調用(yòng)的規則文(wén)件通過規則項目的“知識包”節點将文(wén)件打包後才可(kě)以被業務(wù)系統調用(yòng)。 規則包在調用(yòng)前需要對定義好的知識包進行各種測試,在URule Pro中(zhōng)就提供了兩種不同類型的針對知識包的測試方法,分(fēn)别是快速測試和基于場景的批量測試,前者是單條數據測試,後者是多(duō)條數據測試。在目标知識包上點擊右鍵,從彈出的菜單中(zhōng)就可(kě)以看到它們,如下图所示:
快速測試
所謂的快速測試,可(kě)以在彈出的窗口中(zhōng)輸入相關業務(wù)數據後提交到後台即可(kě)對當前知識包進行的測試,選中(zhōng)一個知識包,點擊其操作(zuò)菜單裏的的“快速測試”菜單項,即可(kě)彈出快速測試窗口進行測試。
在這個新(xīn)的快速測試窗口當中(zhōng),工(gōng)具(jù)欄上隻有(yǒu)兩個按鈕,第一個就是在定義好輸入、輸出數據後需要點擊觸發規則的按鈕,另一個就是用(yòng)于查看當前知識包編譯後對應的規則樹(如果當前知識包裏隻有(yǒu)一個規則流文(wén)件或規則中(zhōng)采用(yòng)“順序模式”執行,則不會顯示樹信息), 接下來我們需要添加“輸入”對象,然後添加對象的具(jù)體(tǐ)字段并為(wèi)字段填充合适的值(同種類型的輸入對象可(kě)以添加多(duō)個,引擎會全部提交并觸發執行);再往下是選擇我們在執行規則後期望看到的輸出信息,添加輸出的方法也是先添加對象,再選擇對象的字段即可(kě); 如果不添加輸出,那麽執行規則後則看不到任何信息。
在添加輸入字段時,如果字段類型是List或Object類型,那麽輸入框将是一個文(wén)本域,提示我們要輸入一段集合類型的JSON或對象類型的JSON,當然我們也可(kě)以根據字段名(míng)旁邊的按鈕來快速添加一個對象的集合類型或一個對象的JSON格式,然後隻需要修改JSON值即可(kě)。 關于JSON格式的詳細要求,可(kě)以參照下面要介紹的“仿真測試”中(zhōng)針對複雜對象JSON格式的定義介紹,這裏不再贅述。
一個定義好的輸入、輸出信息并執行完規則後的效果如下图所示:
一旦我們點擊了工(gōng)具(jù)欄上的“開始測試”按鈕,引擎在提交數據進行規則測試的同時還會把當前定義的輸入、輸出信息保存起來,這樣下次再打開這個知識包的快速測試窗口就可(kě)以看到上一次測試的輸入、輸出信息。
快速測試窗口中(zhōng),測試規則與規則流合二為(wèi)一,引擎在執行時會判斷當前知識包中(zhōng)有(yǒu)沒有(yǒu)規則流,如果有(yǒu)就執行這個規則流,如果沒有(yǒu)就執行規則,這樣對于我們使用(yòng)來說要簡單很(hěn)多(duō)。
基于場景的批量測試
基于場景的批量測試是一個基于場景的、複雜的、可(kě)生成測試報告的、批量測試功能(néng)。
選中(zhōng)一個知識包,點擊工(gōng)具(jù)欄上的基于場景的批量測試按鈕,就可(kě)以打開針對當前知識包的基于場景的批量測試窗口,如下图所示:
在這個窗口中(zhōng),可(kě)以通過“添加測試項”按鈕為(wèi)當前知識包添加若幹個仿真測試方案,點擊該按鈕後效果如下图所示:
對于一個測試方案,需要有(yǒu)一個名(míng)稱及描述信息,接下來可(kě)以點擊“Excel模版配置與下載”按鈕,對當前知識包的輸入與輸出數據進行配置,如下图所示:
如上图所示,在這個窗口中(zhōng),有(yǒu)兩大塊内容,分(fēn)别是輸入數據定義和輸出數據定義,這兩塊内容都把當前知識包中(zhōng)采用(yòng)的變量及參數羅列出來,對于我們來說隻需要選擇相關的參數及變量即可(kě)。
在輸出數據定義裏,可(kě)以看到每一項後面都有(yǒu)一個比較操作(zuò)符選擇列表,它的作(zuò)用(yòng)是用(yòng)來将Excel裏輸入的預期結果與知識包裏運行結果進行比較的,從而判斷我們在Excel裏的定義預期結果是否正确,從而達到仿真測試目的。
勾選好輸入和輸入字段後就可(kě)以點擊窗口下面的“下載Excel模版”按鈕,下載後的Excel有(yǒu)兩個Sheet頁(yè),分(fēn)别顯示輸入和輸出數據,我們需要做的就是填寫對應的數據就好,下图向我們展示了下載後的Excel模版的輸入數據頁(yè)與輸出數據頁(yè)。
從截图上可(kě)以看出,生成的Excel嚴格按照我們配置的字段生成。
在“場景”這個sheet頁(yè)中(zhōng),定義了所有(yǒu)的輸入數據信息,對每條輸入數據都需要定義一個“方案标識”與“描述”信息。一般來說“方案标識”我們直接采用(yòng)數字标識即可(kě),要保證每條“方案标識”的唯一性;而“描述”則是一段文(wén)字 描述,可(kě)以根據這條數據定義情況加以描述;這兩個字段後面就是我們定義的輸入數據。
在“預期結果”sheet頁(yè)中(zhōng),定義了知識包計算完成後某些字段的預期結果。可(kě)以看到每條預期結果也有(yǒu)一個“方案标識”字段,這個“方案标識”字段與“場景”這個sheet頁(yè)中(zhōng)“方案标識”字段一一對應,也就是說隻有(yǒu)“場景”sheet頁(yè)裏定義好的“方案标識”這裏才可(kě)以使用(yòng),不能(néng)随意定義。下图中(zhōng)是個定義了三條場景數據的Excel模版:
在上图中(zhōng),要特别注意紅框标記的部分(fēn),在這裏“客戶”對象“擁有(yǒu)的卡”屬性實際上是一個List集合,所有(yǒu)這裏在Excel中(zhōng)對于這種類型的數據定義采用(yòng)的是JSON的格式,對于URule Pro來說,複雜對象的輸入可(kě)以采用(yòng)标準的JSON格式,URule Pro會自動進行解析并填充。上图中(zhōng)List 類型的JSON内容如下所示:
[
{
"name": "卡",
"fields":{
"no": "21412234",
"name": "卡名(míng)稱",
"limit": 2000
}
}
]
我們知道了List類型值通過JSON填充的方式,那如果對應屬性是單個對象又(yòu)該如何處理(lǐ)呢(ne)?其實看看List類型的JSON我們就應該明白了,把List類型JSON外面[]去掉,裏面就是一個個的對象,拿(ná)出其中(zhōng)一個對象,就是我們需要的單個對象的JSON格式,比如上面的“卡”對象:
{
"name": "卡",
"fields":{
"no": "21412234",
"name": "卡名(míng)稱",
"limit": 2000
}
}
如果某屬性對應的是一個普通的對象類型,不是一個List類型,那麽就可(kě)以采用(yòng)上面“卡”對象JSON格式來定義數據就好。 實際使用(yòng)中(zhōng),可(kě)能(néng)我們的數據格式比較複雜,存在較多(duō)層的對象嵌套,對于多(duō)重對象嵌套,這裏同樣也是支持的,我們唯一需要做的就是按照格式要求定義好JSON數據就好,如下面的JSON數據所示:
[
{
"name": "卡",
"fields": {
"no": "21412234",
"name": "卡名(míng)稱",
"limit": 2000,
"cardDetails": [
{
"name": "卡明細",
"fields": {
"id": "101",
"time": "2019"
}
}
]
}
}
]
可(kě)以看到仿真測試中(zhōng),複雜數據的JSON格式與我們通常看到的描述對象的格式不太一樣,每個對象都需要一個name屬性用(yòng)于标識該對象對應的變量庫裏的對象分(fēn)類名(míng),之所以這樣做,是因為(wèi)JSON的數據格式是一種弱類型的數據格式,而規則引擎裏需要的數據 是一種需要指定對象類型及數據類型的強類型格式,所以才要求我們提供上述格式的JSON數據。
在實際使用(yòng)過程中(zhōng),如果我們已經有(yǒu)了一種普通的JSON對象數據,需要将其轉換成仿真測試所需要的JSON格式,還是有(yǒu)一些麻煩的,為(wèi)此,URule Pro内置了一個用(yòng)于轉換普通JSON為(wèi)仿真測試所需要的JSON的工(gōng)具(jù),其URL為(wèi):http://[ip]:[port]/[contextpath]/urule/json,打開後的效果如 下图所示:
輸入一段普通的JSON對象數據,點擊工(gōng)具(jù)欄上的轉換按鈕,就可(kě)以将輸入的普通JSON對象轉換為(wèi)URule Pro仿真測試時所需要的JSON格式,如下图所示:
轉換完成後,餘下的工(gōng)作(zuò)就是把轉換好的JSON中(zhōng)的“待填寫的變量分(fēn)類名(míng)”換成當前待測試的知識包中(zhōng)引用(yòng)的變量庫裏的具(jù)體(tǐ)的變量分(fēn)類名(míng)稱即可(kě)。
“場景”這個sheet頁(yè)定義完後,就可(kě)以來看看“預期結果”sheet頁(yè)定義情況,如下图:
可(kě)以看到,預期結果的數據定義中(zhōng),“方案标識”字段完全與“場景”數據定義的一緻,同時第2個方案“貸款信息”對象的兩個字段都沒有(yǒu)定義值,那麽就表示規則運行完成後對這兩個字段的預期結果為(wèi)null。
Excel模版定義完成後,就可(kě)以在“測試方案配置”窗口中(zhōng)将其上傳并保存,如下图:
配置好測試方案後,就可(kě)以點擊方案記錄上的測試按鈕,對當前方案進行測試,如下图:
運行完成後即可(kě)查看測試報告,如下图所示:
點擊每條報告的“明細”鏈接,可(kě)查看測試結果的詳情,如下图:
從測試報告中(zhōng)可(kě)以看到每條場景的用(yòng)時、與預期結果的匹配情況以及其它明細信息,如果需要我們可(kě)以将這個報告的HTML直接保存到本地随時查看。
需要注意的是:仿真測試是将上傳的Excel數據批量調用(yòng)知識包規則計算的操作(zuò),最終将整個Excel中(zhōng)數據的規則執行結果返回,其中(zhōng)包含輸入數據、輸出數據、預期數據比對結果以及規則計算日志(zhì),整個信息會比較多(duō),如果您的規則比較複雜,建議上傳的Excel中(zhōng)數據為(wèi)100條,保證頁(yè)面的操作(zuò)體(tǐ)驗。