19.知識包測試

簡介

在URule Pro當中(zhōng)定義好各種類型的規則文(wén)件後,需要将要調用(yòng)的規則文(wén)件通過規則項目的“知識包”節點将文(wén)件打包後才可(kě)以被業務(wù)系統調用(yòng)。 規則包在調用(yòng)前需要對定義好的知識包進行各種測試,在URule Pro中(zhōng)就提供了三種不同類型的針對知識包的測試方法,分(fēn)别是“快速測試”、“基于JSON的快速測試”和“仿真測試”,點擊知識包的操作(zuò)菜單就可(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ō)。

基于JSON的快速測試

點擊知識包操作(zuò)菜單裏的基于JSON的快速測試菜單項,就會彈出如下图所示窗口:

與普通的快速測試窗口不同,在基于JSON的快速測試窗口當中(zhōng),針對輸入數據隻有(yǒu)一個文(wén)本框,我們隻能(néng)輸入一段指定格式的JSON作(zuò)為(wèi)輸入數據,同時對于輸出,我們隻能(néng)選擇某個對象作(zuò)為(wèi)輸出,而不能(néng)選擇對象下的屬性。

之所以這麽設計,是因為(wèi)基于JSON的快速測試是為(wèi)了應對某些輸入、輸出數據格式特别複雜且字段較多(duō)的這種類型場景的測試需求,所以輸入要求我們直接輸入JSON,輸出則直接輸出整個對象。

針對輸入的JSON,具(jù)體(tǐ)格式類似下面這樣:

[
    {
        "name": "卡",
        "fields":{
          "no": "21412234",
          "name": "卡名(míng)稱",
          "limit": 2000
        }
    }
]

上面的JSON當中(zhōng),[]表示輸入是由多(duō)個對象構成,所以是個數組,數據裏可(kě)以有(yǒu)一個或多(duō)個元素,比如上面隻有(yǒu)一個對象,這個對象有(yǒu)兩個屬性,分(fēn)别是name和fields,name屬性用(yòng)于指定要輸入的對象是我們定義的變量庫中(zhōng)的哪個對象, fields屬性是一個對象類型用(yòng)于定義對象的具(jù)體(tǐ)屬性,關于JSON的詳細介紹可(kě)以參考仿真測試中(zhōng)JSON格式介紹,二者是完全一緻的,這裏不再贅述。

與快速測試不同,基于JSON的快速測試定義好輸入的JSON與輸出數據後,引擎并不會保存這些數據,這是因為(wèi)這種測試模式下,用(yòng)戶的輸入數據量可(kě)能(néng)是比較大的,所以引擎不會保存這些數據,我們需要每次測試時自行保存相關的輸入JSON格式數據, 以備下次測試時使用(yòng)。

在本小(xiǎo)節當中(zhōng)将重點介紹對知識包的仿真測試功能(néng),仿真測試是一個基于方案的、複雜的、可(kě)生成測試報告的、批量測試功能(néng)。

仿真測試

選中(zhōng)一個知識包,點擊工(gōng)具(jù)欄上的“仿真測試”按鈕,就可(kě)以進入針對當前知識包的仿真測試頁(yè)面,如下图所示:

在這個頁(yè)面中(zhōng),可(kě)以通過工(gōng)具(jù)欄上的“添加新(xīn)的測試方案”按鈕為(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ě)以點擊方案記錄上的測試按鈕,對當前方案進行測試,如下图:

在彈出的窗口中(zhōng)點擊“運行”按鈕,運行完成後即可(kě)查看測試報告,如下图所示:

點擊每條報告的“明細”鏈接,可(kě)查看測試結果的詳情,如下图:

從測試報告中(zhōng)可(kě)以看到每條場景的用(yòng)時、與預期結果的匹配情況以及其它明細信息,如果需要我們可(kě)以将這個報告的HTML直接保存到本地随時查看。

results matching ""

    No results matching ""