Run Assertions for Each Item アサーション

Run Assertions for Each Item アサーションは、使用するように設定されているコンテキスト変数に応じて、子アサーションを 2 回以上(ループして)評価することや、1 回も評価しないことがあるという点を除いて、 と同様に動作する複合アサーションです。
gateway90
Run Assertions for Each Item
アサーションは、使用するように設定されているコンテキスト変数に応じて、子アサーションを 2 回以上(ループして)評価することや 1 回も評価しないことがあるという点を除いて、All Assertions Must Evaluate to True アサーションと同様に動作する複合アサーションです。
このアサーションは、指定された複数値コンテキスト変数の各メンバに対して子アサーションを 1 回評価します。 複数値の変数が空か存在しない場合、このアサーションは常に成功し、その子アサーションのいずれも評価されません。
警告:
Run Assertions for Each Item アサーションがポリシー内に存在する場合、特に、このアサーションが別の Run Assertions for Each Item アサーション内にネストされている場合は、デバッグ追跡ポリシーを使用しないようにします。 そうした場合、トレース ポリシーが呼び出される回数が非常に多くなるために、システムのパフォーマンスが低下する可能性があり、極端に大きいトレース ログが生成される可能性があります。
以下の例では、Run Assertions for Each Item アサーションがどのように使用されるかを示します。 下記のサンプル ポリシー フラグメントでは、URL のペアに対して挨拶のリストを送信します。
image2015-1-5 9:39:11.png
以下の表では、ポリシー例の各行について説明します。
1
Set Context Variable アサーションは、「Hi there|How are you doing|Greetings」 という内容を持つ messages という名前の新しい変数を作成します。
2
Split Variable アサーションは、messages 変数の値を分割して、
splitMessages
という名前の新しい複数値コンテキスト変数に入れます。 値は「|」文字で分割されます。
3
Run Assertions for Each Item アサーションは、入力として
splitMessages
を使用し、変数のプレフィックスとして「sample」を使用します。 ユーザがマウス カーソルをこの行に置くと、このアサーションで作成されるコンテキスト変数(入力された変数のプレフィックスを使用)がツールヒントに表示されます。
4
最初の子アサーションです。 これは、Set Context Variable アサーションを使用して、message2 という名前の新しい変数を作成します。 この変数は、繰り返しによって
splitMessages
内の各値に設定されます。 これは、コンテキスト変数
${sample.current}
で指定されます。 このようにして、最初の繰り返しでは message2=Hi there、2 回目の繰り返しでは、message2= How are you doing (以下同様)になります。
5
Route via HTTP(S) アサーションは、リクエスト メッセージ ソースとしてコンテキスト変数
${message2}
を使用するように設定されています。 message2 変数に含まれるメッセージは、繰り返しごとに更新され、2 つの URL に送信されます。 これによって、以下の POST コマンドが送信されます。
firsturl への POST "Hi there"
secondurl への POST "Hi there"
firsturl への POST "How are you doing"
secondurl への POST "How are you doing"
firsturl への POST ""Greetings"
secondurl への POST "Greetings"
POST リクエストのいずれかがターゲット サーバへのアクセスに失敗すると、Run Assertions for Each Item アサーションは失敗し、残りの POST は試行されません。
Run Assertions
for Each Item
アサーションが正常終了した場合、
${sample.iterations}
変数の値は「3」で、
${sample.exceededlimit}
変数の値は「false」になります。
複数値コンテキスト変数およびその動作の詳細については、「複数値のコンテキスト変数」を参照してください。
子アサーションの実行の終了
ループが完了する前に、子アサーションの実行を終了させることができます。 これを行うには、ループの内側または外側で、以下のコンテキスト変数を設定します。
変数名
${
<
prefix
>
.break}
変数の値: true
ループの外側で設定された場合、ループはすぐに終了します。 ループの内側で設定された場合、実行中の繰り返しが完了した後に、ループは終了します。
変数を作成して値を true に設定するには、Set Context Variable アサーションを使用します。
このアサーションによって作成されるコンテキスト変数
Run Assertions for Each Item アサーションでは、以下のコンテキスト変数が設定されます。 <
prefix
> はアサーション プロパティで設定されています。 デフォルト値はありません。
変数
説明
${
<p
refix
>
.current}
複数値の変数の現在のメンバ。 繰り返し中は、
${
<
prefix
>
.current}
変数に、複数値の変数の各メンバの値が入ります。 繰り返しの完了後は、最後に設定された値のままです。 複数値の変数は存在するが、長さがゼロだった場合、繰り返しの完了後は
.current
変数は存在しません。
${
<
prefix
>
.iterations
}
正常に完了した繰り返しの回数。
${
<
prefix
>
.exceededlimit
}
繰り返し制限数に達したためにアサーションが終了した場合、この変数の値は「true」です。そうでない場合は「false」です。 処理が進行中は、この変数の値は常に「false」です。
アサーションの使用
  1. 以下のいずれかを実行します。
    • アサーションをポリシー作成ウィンドウに追加するには、「アサーションの追加」を参照してください。
    • 既存のアサーションの設定を変更するには、下記の手順 2 に進みます。
  2. アサーションを追加すると、[
    Run Assertions for Each Item Properties
    ]ダイアログ ボックスが自動的に表示されます。アサーションを変更する場合は、ポリシー ウィンドウで[
    Run Assertions for Each Item
    ]を右クリックして[
    Run Assertions for Each Item Properties
    ]を選択するか、ポリシー ウィンドウでアサーションをダブルクリックします。 このアサーションのプロパティが表示されます。
  3. 以下のようにプロパティを設定します。
    設定
    説明
    Name of Existing Multivalued Variable
    繰り返しに使用する変数の名前を指定します。
    この変数が空の場合、このアサーションは常に成功し、どの子アサーションも評価されません。
    Variable Prefix
    このアサーションによって作成されるコンテキスト変数に追加するプレフィックスを入力します。 このプレフィックスは、一意性を確保し、このアサーションのインスタンスがポリシー内に複数存在する場合に変数が互いに上書きされることを防ぎます。
    表示される検証メッセージの説明については、「コンテキスト変数」の「コンテキスト変数の検証」を参照してください。
    Limit Maximum Iterations
    必要に応じて、このチェック ボックスをオンにし、対応するフィールドに繰り返し回数の最大値を入力することによって、繰り返しの回数を制限できます。 最大値が指定されていない場合、アサーションは複数値コンテキスト変数内のすべてのメンバを処理しようとします。
    最大値が指定されている場合、複数値の変数内のすべてのメンバに対して子ポリシーが呼び出されたかどうかにかかわらず、この回数だけ子ポリシーが呼び出された後、繰り返しが停止します。
    繰り返しの完了後、この制限に達している場合は、コンテキスト変数
    ${
    <
    prefix
    >
    .exceededlimit}
    は「true」に設定されます。 そうでない場合は、「false」に設定されます。
    スタック トレース エラーの解決:
    反復数を制限しないことを選択し、スタック トレース エラーが発生する場合は、以下を試してください。
    1. 適切なリスン ポートのプロパティにアクセスします。 詳細については、「リスニング ポートのプロパティ」を参照してください。
    2. [Advanced]タブを選択します。
    3. この詳細プロパティを追加します:
    maxHttpHeaderSize =
    <
    value
    >。ここで、「<value>」はバイト単位で表されます。
    指定しないと、
    Layer7 API Gateway
    では値 8192 (8KB)が使用されます。