Szabálykészletek tesztelése a Microsoft Rules Composer használatával

A következőkre vonatkozik: Azure Logic Apps (Standard)

Ez az útmutató bemutatja, hogyan tesztelheti a szabálykészleteket a Microsoft Rules Composer használatával, és példákat tartalmaz a szabályteszteléshez.

Miért érdemes a szabálykészleteket növekményesen tesztelni?

Amikor létrehoz egy szabálykészletet, amely integrálja az üzleti logikát a Standard logikai alkalmazás munkafolyamataival, tesztelje a szabálykészletet növekményesen, vagy legalábbis az alkalmazás szabályainak használata előtt. Így ellenőrizheti, hogy az egyes szabályok a várt módon működnek-e, vagy hamarabb megkeresheti és kijavíthatja a problémákat, ha a szabályok kevésbé összetettek és könnyebben elháríthatók.

Ha az összes szabályt egyszerre teszteli, különösen akkor, ha a szabályok hosszúak vagy összetettek, a vártnál több hiba jelenhet meg, ami hosszabb időt vesz igénybe a megoldáshoz, és nehezebbnek bizonyul a hibakeresés.

Előfeltételek

  • Töltse le és telepítse a Microsoft Rules Composert.

  • A használni kívánt szabálykészletet és a tesztelni kívánt tényeket tartalmazó XML-fájl.

    Tények hozzáadásához adja meg a hivatkozott XML-fájlok értékeit a Tények kiválasztása ablakból, amely azután nyílik meg, hogy az alábbi lépésekben a Szabálykészlet tesztelése lehetőséget választja. Érdemes lehet létrehozni egy ténykészítőt a .NET-tények hozzáadásához. További információ: Ténykészítők és lekérdezők létrehozása.

Szabálykészlet verziójának tesztelése

  1. Nyissa meg a Microsoft Rules Composert. A RuleSet Explorer ablakban válassza ki a tesztelni kívánt szabálykészlet-verziót, amely megnyitja a verzióinformációs ablakot.

  2. A szabálykészlet verziójának helyi menüjében válassza a Szabálykészlet tesztelése lehetőséget.

    A megjelenő Tények kijelölése mezőben a legfelső ablak a szabálykészlet szabályai által hivatkozott ténytípusokat mutatja.

  3. Ténypéldány hozzáadásához az XML-dokumentumok vagy a .NET-osztályok területen válassza ki a megfelelő ténytípust, majd válassza a Példány hozzáadása lehetőséget.

    Megjegyzés

    Ha származtatott osztályt állít be egy szabályba, de a szabályok közvetlenül az alaposztály tagjaira vannak írva, a rendszer ehelyett egy alaposztálypéldányt érvényesít, és a feltételek kiértékelése az alaposztálypéldányon történik.

  4. Egy ténypéldány eltávolításához válassza ki a megfelelő ténytípust, majd válassza a Példány eltávolítása lehetőséget.

  5. Az Ön által létrehozott ténykészítő hozzáadásához a Ténykészítők ablakban válassza a Hozzáadás lehetőséget.

  6. Ha elkészült, válassza a Tesztelés lehetőséget.

    A Kimenet ablakban látható a szabálykészlet-teszt nyomkövetési kimenete.

  7. Nyissa meg a tesztkimeneti ablak helyi menüjét, és válasszon egy lehetőséget a kimeneti szöveg mentéséhez, törléséhez, kijelöléséhez vagy másolásához, hogy áttekinthesse az eredményeket.

    Az alábbi táblázat a Kimeneti ablak parancsokat ismerteti, amelyekkel a kimeneti szöveggel dolgozhat:

    Feladatok Billentyűparancs
    Törölje az összes szöveget a Kimenet ablakból. Az összes törlése
    Másolja a kijelölt szöveget a Kimeneti ablakban a vágólapra. Másolás
    Jelölje ki az összes szöveget a Kimenet ablakban. Az összes kijelölése
    Mentse a Kimeneti ablakban található szöveget egy megadott fájlba. Mentés fájlba

Szabálykészlet-teszt nyomkövetési kimenete

Ez a szakasz azokat a nyomkövetési információkat és tevékenységeket ismerteti, amelyek a nyomkövetéshez tartoznak, amikor a Microsoft Rules Composer használatával tesztel egy szabálykészletet. A nyomkövetési kimenet a következő utasítástípusokat tartalmazhatja:

  • Ténytevékenység
  • Feltétel kiértékelése
  • Napirend frissítése
  • Szabály lefutott

Tényalapú tevékenység

Ez a tevékenység a motor munkamemória adatainak változásait jelzi. Az alábbi példa egy ténytevékenység-minta bejegyzést mutat be:

FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872

Az alábbi táblázat a bejegyzésben szereplő információkat ismerteti:

Elem Leírás
Szabálymotor példányazonosítója A RuleEngine-példány egyedi azonosítója, amely a szabályvégrehajtás végrehajtási környezetét biztosítja.
Szabálykészlet neve A szabálykészlet neve.
Művelet Ténytevékenységekben a következő művelettípusok fordulhatnak elő:

- Állítás: Egy tény kerül hozzáadásra a munkamemóriához. Megjegyzés: Ha egy helyesen megadott tény típusa nem egyezik meg a szabálykészletben használt típusokkal, az Assert függvény az "Assert – Fact Unregnized" hibaüzenetet jeleníti meg.

- Frissítés: Egy szabály frissít egy tényt, amelyet aztán újra be kell helyezni a motorba az új adatok és állapot alapján, hogy újraértékelés történjen.

- Visszahúzás: A rendszer eltávolít egy tényt a munkamemóriából.
Objektumtípus Egy adott tevékenység ténytípusa: - TypedXmlDocument

Az állítások a szülő- és gyermek TypedXmlDocument-példányok esetében is megjelennek.
Objektumpéldány azonosítója A tényhivatkozás egyedi példányazonosítója.

Feltétel kiértékelése

Ez a tevékenység az egyes predikátumok értékelésének eredményét jelzi. Az alábbi példa egy mintafeltétel-kiértékelési bejegyzést mutat be:

CONDITION EVALUATION TEST (MATCH) 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:Root.EmploymentType/TimeInMonths >= 18
Left Operand Value: 31
Right Operand Value: 18
Test Result: True

Az alábbi táblázat a bejegyzésben szereplő információkat ismerteti:

Elem Leírás
Kifejezés tesztelése Egy szabály egyszerű unáris vagy bináris kifejezése.
Bal operandus értéke A kifejezés bal oldalán lévő tag értéke.
Jobb oldali operandus értéke A kifejezés jobb oldalán lévő tag értéke.
Teszteredmény A kiértékelés eredménye, amely igaz vagy hamis.

Napirend frissítése

Ez a tevékenység azokat a szabályokat jelzi, amelyeket a szabálymotor ütemtervéhez adnak hozzá a későbbi végrehajtás érdekében. Az alábbi példa egy napirendfrissítési minta bejegyzést mutat be:

AGENDA UPDATE 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: Employment Status Rule
Conflict Resolution Criteria: 0

Az alábbi táblázat a bejegyzésben szereplő információkat ismerteti:

Elem Leírás
Művelet Az a művelet, amely szabályokat ad hozzá vagy távolít el a napirendből.
Szabály neve A napirendhez hozzáadott vagy eltávolított szabály neve.
Ütközésfeloldási feltételek Egy szabály prioritása, amely meghatározza a műveletek végrehajtásának relatív sorrendjét, és azt, hogy hol hajtják végre először a magasabb prioritású műveleteket.

Szabály lefutott

Ez a tevékenység egy szabály műveleteinek végrehajtását jelzi. Az alábbi példa egy szabály által aktivált bejegyzést mutat be:

RULE FIRED 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Rule Name: Residency Status Rule
Conflict Resolution Criteria: 10

Frissítési függvény

Ez a példa egy "InventoryCheck" mintaszabályt és egy "Szállítási" szabályt mutat be egy "Order" nevű mintaszabályzatban. A szabály első ellenőrzésekor a "Szállítási" szabályhoz társított feltétel hamis értéket ad vissza. Amikor azonban az "InventoryCheck" szabály kigyullad, a rendelés InventoryAvailable mezője megváltozik, és a Rendszer kiadja a Frissítés parancsot a motornak a "Rendelés objektum" számára, ami a "Szállítási" szabály újraértékelését okozza. Ezúttal a feltétel „Igaz” értékű lesz, és a "Ship" szabály aktiválódik.

Megjegyzés

Ha a szabályok helytelenül vannak megírva, a frissítési függvénnyel való továbbítás végtelen hurkot okozhat. Ebben az esetben, amikor teszteli a szabálykészletet a Microsoft Rules Composerben, hibaüzenet jelenik meg a következő szöveggel : "A szabálymotor végrehajtási ciklust észlelt".

InventoryCheck-szabály

IF Inventory.AllocateInventory == True
THEN Order.InventoryAvailable == True
Update(Order)

Szállítási szabály

IF Order.InventoryAvailable == True
THEN Shipment.ShipOrder

Kimenet

RULE ENGINE TRACE for RULESET: Order 3/17/2023 10:31:17 AM
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: null
Right Operand Value: True
Test Result: False
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Inventory
Object Instance Identifier: 446
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Inventory.AllocateInventory == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Update
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: Ship
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: Ship
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Order
Object Instance Identifier: 448
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Inventory
Object Instance Identifier: 446

Szabálykészlet-teszt nyomkövetési kimeneti példái

Ez a szakasz olyan példákat tartalmaz, amelyek különböző típusú tények szabálykészlettesztjének kimenetét mutatják be.

.NET-osztály ténytípusa

Ez a példa egy "LoanProcessing" nevű szabálykészlet "TestRule1" nevű mintaszabálya:

IF test.get_ID > 0
THEN <do something>

Kimenet

RULE ENGINE TRACE for RULESET: LoanProcessing 3/16/2023 9:50:28 AM
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872
CONDITION EVALUATION TEST (MATCH) 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Test Expression: MyTest.test.get_ID > 0
Left Operand Value: 100
Right Operand Value: 0
Test Result: True
AGENDA UPDATE 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: MyTest.test
Object Instance Identifier: 872

TypedXmlDocument ténytípus

Ez a példa egy Microsoft.Samples.BizTalk.LoansProcessor.Case nevű dokumentumtípusú TypedXmlDocument entitást állít be a szabálymotorba. A szabályban meghatározott XPath Selector érték alapján a motor létrehoz és érvényesít egy gyermek TypedXmlDocument entitást a Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType típusával, a dokumentumtípus és a választó string alapján. Ez a child TypedXmlDocument entitás igaz értéket ad a feltételben, ami programfrissítést és szabályvégrehajtást okoz. Ezután a rendszer visszavonja a szülő- és gyermek TypedXmlDocument entitásokat.

Ez a példa a "TestRule1" nevű mintaszabályt mutatja be egy "LoanProcessing" nevű szabálykészletben:

IF Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
THEN <do something>

Kimenet

RULE ENGINE TRACE for RULESET: LoanProcessing 3/17/2023 9:23:05 AM
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853
CONDITION EVALUATION TEST (MATCH) 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
Left Operand Value: 6
Right Operand Value: 4
Test Result: True
AGENDA UPDATE 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853