19.知識包測試

簡介

在URule Pro當中定義好各種類型的規則文件後,需要将要調用的規則文件通(tōng)過規則項目的“知識包”節點将文件打包後才可(kě)以被業務系統調用。 規則包在調用前需要對定義好的知識包進行(xíng)各種測試,在URule Pro中就提供了三種不同類型的針對知識包的測試方法,分别是“快速測試”、“基于JSON的快速測試”和(hé)“仿真測試”,點擊知識包的操作(zuò)菜單就可(kě)以看到它們,如下圖所示:

快速測試

所謂的快速測試,可(kě)以在彈出的窗口中輸入相關業務數(shù)據後提交到後台即可(kě)對當前知識包進行(xíng)的測試,選中一個(gè)知識包,點擊其操作(zuò)菜單裏的的“快速測試”菜單項,即可(kě)彈出快速測試窗口進行(xíng)測試。

在這個(gè)新的快速測試窗口當中,工具欄上(shàng)隻有(yǒu)兩個(gè)按鈕,第一個(gè)就是在定義好輸入、輸出數(shù)據後需要點擊觸發規則的按鈕,另一個(gè)就是用于查看當前知識包編譯後對應的規則樹(shù)(如果當前知識包裏隻有(yǒu)一個(gè)規則流文件或規則中采用“順序模式”執行(xíng),則不會(huì)顯示樹(shù)信息), 接下來(lái)我們需要添加“輸入”對象,然後添加對象的具體(tǐ)字段并為(wèi)字段填充合适的值(同種類型的輸入對象可(kě)以添加多(duō)個(gè),引擎會(huì)全部提交并觸發執行(xíng));再往下是選擇我們在執行(xíng)規則後期望看到的輸出信息,添加輸出的方法也是先添加對象,再選擇對象的字段即可(kě); 如果不添加輸出,那(nà)麽執行(xíng)規則後則看不到任何信息。

在添加輸入字段時(shí),如果字段類型是List或Object類型,那(nà)麽輸入框将是一個(gè)文本域,提示我們要輸入一段集合類型的JSON或對象類型的JSON,當然我們也可(kě)以根據字段名旁邊的按鈕來(lái)快速添加一個(gè)對象的集合類型或一個(gè)對象的JSON格式,然後隻需要修改JSON值即可(kě)。 關于JSON格式的詳細要求,可(kě)以參照下面要介紹的“仿真測試”中針對複雜對象JSON格式的定義介紹,這裏不再贅述。

一個(gè)定義好的輸入、輸出信息并執行(xíng)完規則後的效果如下圖所示:

一旦我們點擊了工具欄上(shàng)的“開(kāi)始測試”按鈕,引擎在提交數(shù)據進行(xíng)規則測試的同時(shí)還(hái)會(huì)把當前定義的輸入、輸出信息保存起來(lái),這樣下次再打開(kāi)這個(gè)知識包的快速測試窗口就可(kě)以看到上(shàng)一次測試的輸入、輸出信息。

快速測試窗口中,測試規則與規則流合二為(wèi)一,引擎在執行(xíng)時(shí)會(huì)判斷當前知識包中有(yǒu)沒有(yǒu)規則流,如果有(yǒu)就執行(xíng)這個(gè)規則流,如果沒有(yǒu)就執行(xíng)規則,這樣對于我們使用來(lái)說要簡單很(hěn)多(duō)。

基于JSON的快速測試

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

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

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

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

[
    {
        "name": "卡",
        "fields":{
          "no": "21412234",
          "name": "卡名稱",
          "limit": 2000
        }
    }
]

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

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

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

仿真測試

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

在這個(gè)頁面中,可(kě)以通(tōng)過工具欄上(shàng)的“添加新的測試方案”按鈕為(wèi)當前知識包添加若幹個(gè)仿真測試方案,點擊該按鈕後效果如下圖所示:

對于一個(gè)仿真測試方案,需要有(yǒu)一個(gè)名稱及描述信息,接下來(lái)可(kě)以點擊“Excel模版配置與下載”按鈕,對當前知識包的輸入與輸出數(shù)據進行(xíng)配置,如下圖所示:

如上(shàng)圖所示,在這個(gè)窗口中,有(yǒu)兩大(dà)塊內(nèi)容,分别是輸入數(shù)據定義和(hé)輸出數(shù)據定義,這兩塊內(nèi)容都把當前知識包中采用的變量及參數(shù)羅列出來(lái),對于我們來(lái)說隻需要選擇相關的參數(shù)及變量即可(kě)。

在輸出數(shù)據定義裏,可(kě)以看到每一項後面都有(yǒu)一個(gè)比較操作(zuò)符選擇列表,它的作(zuò)用是用來(lái)将Excel裏輸入的預期結果與知識包裏運行(xíng)結果進行(xíng)比較的,從而判斷我們在Excel裏的定義預期結果是否正确,從而達到仿真測試目的。

勾選好輸入和(hé)輸入字段後就可(kě)以點擊窗口下面的“下載Excel模版”按鈕,下載後的Excel有(yǒu)兩個(gè)Sheet頁,分别顯示輸入和(hé)輸出數(shù)據,我們需要做(zuò)的就是填寫對應的數(shù)據就好,下圖向我們展示了下載後的Excel模版的輸入數(shù)據頁與輸出數(shù)據頁。

從截圖上(shàng)可(kě)以看出,生(shēng)成的Excel嚴格按照我們配置的字段生(shēng)成。

在“場(chǎng)景”這個(gè)sheet頁中,定義了所有(yǒu)的輸入數(shù)據信息,對每條輸入數(shù)據都需要定義一個(gè)“方案标識”與“描述”信息。一般來(lái)說“方案标識”我們直接采用數(shù)字标識即可(kě),要保證每條“方案标識”的唯一性;而“描述”則是一段文字 描述,可(kě)以根據這條數(shù)據定義情況加以描述;這兩個(gè)字段後面就是我們定義的輸入數(shù)據。

在“預期結果”sheet頁中,定義了知識包計(jì)算(suàn)完成後某些(xiē)字段的預期結果。可(kě)以看到每條預期結果也有(yǒu)一個(gè)“方案标識”字段,這個(gè)“方案标識”字段與“場(chǎng)景”這個(gè)sheet頁 中“方案标識”字段一一對應,也就是說隻有(yǒu)“場(chǎng)景”sheet頁裏定義好的“方案标識”這裏才可(kě)以使用,不能随意定義。下圖中是個(gè)定義了三條場(chǎng)景數(shù)據的Excel模版:

在上(shàng)圖中,要特别注意紅框标記的部分,在這裏“客戶”對象“擁有(yǒu)的卡”屬性實際上(shàng)是一個(gè)List集合,所有(yǒu)這裏在Excel中對于這種類型的數(shù)據定義采用的是JSON的格式,對于URule Pro來(lái)說,複雜對象的輸入可(kě)以采用标準的JSON格式,URule Pro會(huì)自動進行(xíng)解析并填充。上(shàng)圖中List 類型的JSON內(nèi)容如下所示:

[
    {
        "name": "卡",
        "fields":{
          "no": "21412234",
          "name": "卡名稱",
          "limit": 2000
        }
    }
]

我們知道(dào)了List類型值通(tōng)過JSON填充的方式,那(nà)如果對應屬性是單個(gè)對象又該如何處理(lǐ)呢?其實看看List類型的JSON我們就應該明(míng)白了,把List類型JSON外面[]去掉,裏面就是一個(gè)個(gè)的對象, 拿(ná)出其中一個(gè)對象,就是我們需要的單個(gè)對象的JSON格式,比如上(shàng)面的“卡”對象:

{
    "name": "卡",
    "fields":{
      "no": "21412234",
      "name": "卡名稱",
      "limit": 2000
    }
}

如果某屬性對應的是一個(gè)普通(tōng)的對象類型,不是一個(gè)List類型,那(nà)麽就可(kě)以采用上(shàng)面“卡”對象JSON格式來(lái)定義數(shù)據就好。 實際使用中,可(kě)能我們的數(shù)據格式比較複雜,存在較多(duō)層的對象嵌套,對于多(duō)重對象嵌套,這裏同樣也是支持的,我們唯一需要做(zuò)的就是按照格式要求定義好JSON數(shù)據就好,如下面的JSON數(shù)據所示:

[
    {
        "name": "卡",
        "fields": {
          "no": "21412234",
          "name": "卡名稱",
          "limit": 2000,
          "cardDetails": [
            {
              "name": "卡明(míng)細",
              "fields": {
                "id": "101",
                "time": "2019"

              }
            }
          ]
        }
    }
]

可(kě)以看到仿真測試中,複雜數(shù)據的JSON格式與我們通(tōng)常看到的描述對象的格式不太一樣,每個(gè)對象都需要一個(gè)name屬性用于标識該對象對應的變量庫裏的對象分類名,之所以這樣做(zuò),是因為(wèi)JSON的數(shù)據格式是一種弱類型的數(shù)據格式,而規則引擎裏需要的數(shù)據 是一種需要指定對象類型及數(shù)據類型的強類型格式,所以才要求我們提供上(shàng)述格式的JSON數(shù)據。

在實際使用過程中,如果我們已經有(yǒu)了一種普通(tōng)的JSON對象數(shù)據,需要将其轉換成仿真測試所需要的JSON格式,還(hái)是有(yǒu)一些(xiē)麻煩的,為(wèi)此,URule Pro內(nèi)置了一個(gè)用于轉換普通(tōng)JSON為(wèi)仿真測試所需要的JSON的工具,其URL為(wèi):http://[ip]:[port]/[contextpath]/urule/json,打開(kāi)後的效果如 下圖所示:

輸入一段普通(tōng)的JSON對象數(shù)據,點擊工具欄上(shàng)的轉換按鈕,就可(kě)以将輸入的普通(tōng)JSON對象轉換為(wèi)URule Pro仿真測試時(shí)所需要的JSON格式,如下圖所示:

轉換完成後,餘下的工作(zuò)就是把轉換好的JSON中的“待填寫的變量分類名”換成當前待測試的知識包中引用的變量庫裏的具體(tǐ)的變量分類名稱即可(kě)。

“場(chǎng)景”這個(gè)sheet頁定義完後,就可(kě)以來(lái)看看“預期結果”sheet頁定義情況,如下圖:

可(kě)以看到,預期結果的數(shù)據定義中,“方案标識”字段完全與“場(chǎng)景”數(shù)據定義的一緻,同時(shí)第2個(gè)方案“貸款信息”對象的兩個(gè)字段都沒有(yǒu)定義值,那(nà)麽就表示規則運行(xíng)完成後對這兩個(gè)字段的預期結果為(wèi)null。

Excel模版定義完成後,就可(kě)以在“測試方案配置”窗口中将其上(shàng)傳并保存,如下圖:

配置好測試方案後,就可(kě)以點擊方案記錄上(shàng)的測試按鈕,對當前方案進行(xíng)測試,如下圖:

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

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

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

results matching ""

    No results matching ""