19.知識包測試

2019-11-01 11:43 更新

19.知識包測試

簡介

我們知道,在URule Pro當中定義好各種類型的規(guī)則文件后,需要將要調(diào)用的規(guī)則文件通過規(guī)則項目的“知識包”節(jié)點將文件打包后才可以被業(yè)務系統(tǒng)調(diào)用。規(guī)則包在調(diào)用前需要對定義好的知識包進行各種測試,在URule Pro中就提供了兩種不同類型的針對知識包的測試方法,分別是“快速測試”和“仿真測試”,如下圖所示:

快速測試

所謂的快速測試,可以在彈出的窗口中輸入相關業(yè)務數(shù)據(jù)后提交到后臺即可對當前知識包進行的測試,選中一個知識包,點擊工具欄上的“快速測試”按鈕,即可彈出快速測試窗口進行測試。

在2.2.2以前的版本中快速測試較為簡單,打開后的窗口是下面的樣子。

在這個快速測試的窗口分左右兩個部分,左邊部分是當前知識包中用到的所有的變量及參數(shù)信息,點擊具體的變量及參數(shù)名后就會在窗口右邊顯示具體的變量值及參數(shù)值。

我們可以在這里把規(guī)則需要的相關輸入數(shù)據(jù)(變量或參數(shù))填入右邊窗口中,然后點擊工具欄上的“測試決策包”或“測試決策流”按鈕即可對當前知識包進行快速測試。知識包運行結(jié)果里有對當前變量或參數(shù)進行賦值的話,那么就可以在測試后通過個這窗口看到值回寫后的效果。

在進行快速測試時,如果當前知識包中沒有規(guī)則流,那么就可以點擊工具欄上的“測試決策包”按鈕來對當前知識包進行測試;如果當前知識包里有規(guī)則流,那么則需要點擊工具欄上的“測試決策流”按鈕,在彈出的窗口里選擇要測試的規(guī)則流即可。

可以看到,這種在2.2.2以前版本中的快速測試非常的簡單,我們之前章節(jié)內(nèi)容中做的例子都是基于這種快速測試頁面完成。

在2.2.2及以后的版本中,我們對快速測試功能進行了升級,打開后的快速測試窗口如下圖所示:

在這個新的快速測試窗口當中,工具欄上只有兩個按鈕,第一個就是在定義好輸入、輸出數(shù)據(jù)后需要點擊觸發(fā)規(guī)則的按鈕,另一個就是用于查看當前知識包編譯后對應的規(guī)則樹(如果當前知識包里只有一個規(guī)則流文件或規(guī)則中采用“順序模式”執(zhí)行,則不會顯示樹信息), 接下來我們需要添加“輸入”對象,然后添加對象的具體字段并為字段填充合適的值(同種類型的輸入對象可以添加多個,引擎會全部提交并觸發(fā)執(zhí)行);再往下是選擇我們在執(zhí)行規(guī)則后期望看到的輸出信息,添加輸出的方法也是先添加對象,再選擇對象的字段即可; 如果不添加輸出,那么執(zhí)行規(guī)則后則看不到任何信息。

在添加輸入字段時,如果字段類型是List或Object類型,那么輸入框?qū)⑹且粋€文本域,提示我們要輸入一段集合類型的JSON或?qū)ο箢愋偷腏SON,當然我們也可以根據(jù)字段名旁邊的按鈕來快速添加一個對象的集合類型或一個對象的JSON格式,然后只需要修改JSON值即可。 關于JSON格式的詳細要求,可以參照下面要介紹的“仿真測試”中針對復雜對象JSON格式的定義介紹,這里不再贅述。

一個定義好的輸入、輸出信息并執(zhí)行完規(guī)則后的效果如下圖所示:

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

新版的快速測試窗口中,我們把老版中的測試規(guī)則與規(guī)則流合二為一,引擎在執(zhí)行時會判斷當前知識包中有沒有規(guī)則流,如果有就執(zhí)行這個規(guī)則流,如果沒有就執(zhí)行規(guī)則,這樣對于我們使用來說要簡單很多。

可以看到,2.2.2及以后版本中的快速測試功能要比老版中的清晰、直觀很多。如果我們需要批量測試功能,那么可以采用仿真測試實現(xiàn)。 在本小節(jié)當中將重點介紹對知識包的仿真測試功能,仿真測試是一個基于方案的、復雜的、可生成測試報告的、批量測試功能。

仿真測試

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

在這個頁面中,可以通過工具欄上的“添加新的測試方案”按鈕為當前知識包添加若干個仿真測試方案,點擊該按鈕后效果如下圖所示:

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

如上圖所示,在這個窗口中,有兩大塊內(nèi)容,分別是輸入數(shù)據(jù)定義和輸出數(shù)據(jù)定義,這兩塊內(nèi)容都把當前知識包中采用的變量及參數(shù)羅列出來,對于我們來說只需要選擇相關的參數(shù)及變量即可。

在輸出數(shù)據(jù)定義里,可以看到每一項后面都有一個比較操作符選擇列表,它的作用是用來將Excel里輸入的預期結(jié)果與知識包里運行結(jié)果進行比較的,從而判斷我們在Excel里的定義預期結(jié)果是否正確,從而達到仿真測試目的。

勾選好輸入和輸入字段后就可以點擊窗口下面的“下載Excel模版”按鈕,下載后的Excel有兩個Sheet頁,分別顯示輸入和輸出數(shù)據(jù),我們需要做的就是填寫對應的數(shù)據(jù)就好,下圖向我們展示了下載后的Excel模版的輸入數(shù)據(jù)頁與輸出數(shù)據(jù)頁。

從截圖上可以看出,生成的Excel嚴格按照我們配置的字段生成。

在“場景”這個sheet頁中,定義了所有的輸入數(shù)據(jù)信息,對每條輸入數(shù)據(jù)都需要定義一個“方案標識”與“描述”信息。一般來說“方案標識”我們直接采用數(shù)字標識即可,要保證每條“方案標識”的唯一性;而“描述”則是一段文字 描述,可以根據(jù)這條數(shù)據(jù)定義情況加以描述;這兩個字段后面就是我們定義的輸入數(shù)據(jù)。

在“預期結(jié)果”sheet頁中,定義了知識包計算完成后某些字段的預期結(jié)果??梢钥吹矫織l預期結(jié)果也有一個“方案標識”字段,這個“方案標識”字段與“場景”這個sheet頁 中“方案標識”字段一一對應,也就是說只有“場景”sheet頁里定義好的“方案標識”這里才可以使用,不能隨意定義。下圖中是個定義了三條場景數(shù)據(jù)的Excel模版:

在上圖中,要特別注意紅框標記的部分,在這里“客戶”對象“擁有的卡”屬性實際上是一個List集合,所有這里在Excel中對于這種類型的數(shù)據(jù)定義采用的是JSON的格式,對于URule Pro來說,復雜對象的輸入可以采用標準的JSON格式,URule Pro會自動進行解析并填充。上圖中List 類型的JSON內(nèi)容如下所示:

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

在這段List類型的JSON表達式中,因為要表達的是一個List集合類型的數(shù)據(jù),所以需要用[]將內(nèi)容包裹,然后里面的每個對象都必須要有一個名為“name”的屬性,比如這里的name屬性值為“卡”,需要注意的是“卡”這個對象必須要在當前知識包引用的變量庫里已定義好,否則會產(chǎn)生錯誤;然后對于“卡”對象的屬性要通過名為“fields”的 屬性名指定;每個屬性名必須要有"name"和"value"兩個屬性,分別用于標識屬性名和該屬性的值。

JSON的每個屬性名都需要有雙引號包裹,這是JSON格式規(guī)范,這點很關鍵,否則系統(tǒng)將無法解析。

從2.1.7版本開始,對上述的JSON格式做了改進,改進后的JSON格式更為簡潔,如下所示:

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

可以看到相比改進之后,改進后的JSON更為簡潔明了,無論采用哪種JSON格式,URule Pro皆支持。

我們知道了List類型值通過JSON填充的方式,那如果對應屬性是單個對象又該如何處理呢?其實看看List類型的JSON我們就應該明白了,把List類型JSON外面[]去掉,里面就是一個個的對象, 拿出其中一個對象,就是我們需要的單個對象的JSON格式,比如上面的“卡”對象:

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

如果某屬性對應的是一個普通的對象類型,不是一個List類型,那么就可以采用上面“卡”對象JSON格式來定義數(shù)據(jù)就好。實際使用中,可能我們的數(shù)據(jù)格式比較復雜,存在較多層的對象嵌套,對于多重對象嵌套,這里同樣也是支持的,我們唯一需要做的就是按照格式要求定義好JSON數(shù)據(jù)就好,如下面的JSON數(shù)據(jù)所示:

[
    {
        "name": "卡",
        "fields": [
            {
                "name": "no",
                "value": "21412234"
            },
            {
                "name": "name",
                "value": "卡名稱"
            },
            {
                "name": "limit",
                "value": 20000
            },
            {
                "name": "cardDetails",
                "value": [
                    {
                        "name": "卡明細",
                        "fields": [
                            {
                                "name": "id",
                                "value": "101"
                            },
                            {
                                "name": "time",
                                "value": "2019"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

在上面這段JSON當中,它定義了一個List類型的集合對象,里面的元素是一個“卡”對象,其中“卡”對象的“cardDetails”屬性也是一個List集合類型的對象,里面是若干個“卡明細”對象。在實際使用過程中,這種定義方式可以最大化實現(xiàn)規(guī)則運行時對輸入數(shù)據(jù)的要求。

上述的JSON內(nèi)容在2.1.7及以上版本中則可以寫成下面的樣子:

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

              
              }
            }
          ]
        }
    }
]

可以看到仿真測試中,復雜數(shù)據(jù)的JSON格式與我們通常看到的描述對象的格式不太一樣,每個對象都需要一個name屬性用于標識該對象對應的變量庫里的對象分類名,同時,對象的屬性名與屬性值分別用name和value兩個屬性來標明,之所以這樣做,是因為JSON的數(shù)據(jù)格式是一種弱類型的數(shù)據(jù)格式,而規(guī)則引擎里需要的數(shù)據(jù) 是一種需要指定對象類型及數(shù)據(jù)類型的強類型格式,所以才要求我們提供上述格式的JSON數(shù)據(jù)。 在實際使用過程中,如果我們已經(jīng)有了一種普通的JSON對象數(shù)據(jù),需要將其轉(zhuǎn)換成仿真測試所需要的JSON格式,還是有一些麻煩的,為此,從2.1.5版本開始,URule Pro內(nèi)置了一個用于轉(zhuǎn)換普通JSON為仿真測試所需要的JSON的工具,其URL為:http://[ip]:[port]/[contextpath]/urule/json,打開后的效果如 下圖所示:

輸入一段普通的JSON對象數(shù)據(jù),點擊工具欄上的轉(zhuǎn)換按鈕,就可以將輸入的普通JSON對象轉(zhuǎn)換為URule Pro仿真測試時所需要的JSON格式,如下圖所示:

轉(zhuǎn)換完成后,余下的工作就是把轉(zhuǎn)換好的JSON中的“待填寫的變量分類名”換成當前待測試的知識包中引用的變量庫里的具體的變量分類名稱即可。

“場景”這個sheet頁定義完后,就可以來看看“預期結(jié)果”sheet頁定義情況,如下圖:

可以看到,預期結(jié)果的數(shù)據(jù)定義中,“方案標識”字段完全與“場景”數(shù)據(jù)定義的一致,同時第2個方案“貸款信息”對象的兩個字段都沒有定義值,那么就表示規(guī)則運行完成后對這兩個字段的預期結(jié)果為null。

Excel模版定義完成后,就可以在“測試方案配置”窗口中將其上傳并保存,如下圖:

配置好測試方案后,就可以點擊方案記錄上的測試按鈕,對當前方案進行測試,如下圖:

在彈出的窗口中點擊“運行”按鈕,運行完成后即可查看測試報告,如下圖所示:

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

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

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號