19.知識(shí)包測(cè)試

2019-11-01 11:43 更新

19.知識(shí)包測(cè)試

簡(jiǎn)介

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

快速測(cè)試

所謂的快速測(cè)試,可以在彈出的窗口中輸入相關(guān)業(yè)務(wù)數(shù)據(jù)后提交到后臺(tái)即可對(duì)當(dāng)前知識(shí)包進(jìn)行的測(cè)試,選中一個(gè)知識(shí)包,點(diǎn)擊工具欄上的“快速測(cè)試”按鈕,即可彈出快速測(cè)試窗口進(jìn)行測(cè)試。

在2.2.2以前的版本中快速測(cè)試較為簡(jiǎn)單,打開(kāi)后的窗口是下面的樣子。

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

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

在進(jìn)行快速測(cè)試時(shí),如果當(dāng)前知識(shí)包中沒(méi)有規(guī)則流,那么就可以點(diǎn)擊工具欄上的“測(cè)試決策包”按鈕來(lái)對(duì)當(dāng)前知識(shí)包進(jìn)行測(cè)試;如果當(dāng)前知識(shí)包里有規(guī)則流,那么則需要點(diǎn)擊工具欄上的“測(cè)試決策流”按鈕,在彈出的窗口里選擇要測(cè)試的規(guī)則流即可。

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

在2.2.2及以后的版本中,我們對(duì)快速測(cè)試功能進(jìn)行了升級(jí),打開(kāi)后的快速測(cè)試窗口如下圖所示:

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

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

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

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

新版的快速測(cè)試窗口中,我們把老版中的測(cè)試規(guī)則與規(guī)則流合二為一,引擎在執(zhí)行時(shí)會(huì)判斷當(dāng)前知識(shí)包中有沒(méi)有規(guī)則流,如果有就執(zhí)行這個(gè)規(guī)則流,如果沒(méi)有就執(zhí)行規(guī)則,這樣對(duì)于我們使用來(lái)說(shuō)要簡(jiǎn)單很多。

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

仿真測(cè)試

選中一個(gè)知識(shí)包,點(diǎn)擊工具欄上的“仿真測(cè)試”按鈕,就可以進(jìn)入針對(duì)當(dāng)前知識(shí)包的仿真測(cè)試頁(yè)面,如下圖所示:

在這個(gè)頁(yè)面中,可以通過(guò)工具欄上的“添加新的測(cè)試方案”按鈕為當(dāng)前知識(shí)包添加若干個(gè)仿真測(cè)試方案,點(diǎn)擊該按鈕后效果如下圖所示:

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

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

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

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

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

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

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

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

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

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

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

從2.1.7版本開(kāi)始,對(duì)上述的JSON格式做了改進(jìn),改進(jìn)后的JSON格式更為簡(jiǎn)潔,如下所示:

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

可以看到相比改進(jìn)之后,改進(jìn)后的JSON更為簡(jiǎn)潔明了,無(wú)論采用哪種JSON格式,URule Pro皆支持。

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

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

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

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

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

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

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

              
              }
            }
          ]
        }
    }
]

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

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

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

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

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

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

配置好測(cè)試方案后,就可以點(diǎn)擊方案記錄上的測(cè)試按鈕,對(duì)當(dāng)前方案進(jìn)行測(cè)試,如下圖:

在彈出的窗口中點(diǎn)擊“運(yùn)行”按鈕,運(yùn)行完成后即可查看測(cè)試報(bào)告,如下圖所示:

點(diǎn)擊每條報(bào)告的“明細(xì)”鏈接,可查看測(cè)試結(jié)果的詳情,如下圖:

從測(cè)試報(bào)告中可以看到每條場(chǎng)景的用時(shí)、與預(yù)期結(jié)果的匹配情況以及其它明細(xì)信息,如果需要我們可以將這個(gè)報(bào)告的HTML直接保存到本地隨時(shí)查看。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)