プロパティの値を指定する
シミュレーションにおいて、ステッププロパティは、ヘッダー、ペイロード、名前などの関連するメッセージ要素を表します。これらのステッププロパティを定義するには、ルールと値を使用します。これらの値は、静的または動的のいずれかです。
値はどのように使用できますか?
このトピックでは、シミュレーションでの値の使用方法を実例で説明します。どのステッププロパティをどの値に使用できるかについても、例を挙げて説明しています。
複数行の値を使用する
YAMLは、指標の代わりにインデントを使用して構造をマークします。これは、複数行の値を使用する場合に不可欠です。これらの値がプロパティの下でインデントされていることを確認してください。
この例では、複数行の「ペイロード」値がインデントされているのを確認できます。
schema: SimV1
connections:
- name: http
services:
- name: Welcome
steps:
- name: Request
- name: Response
message:
payload:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<wsse:Security soapenv:mustUnderstand="false" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>acs_devel_111</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<wsa:To>http://sensetrunkcn1:1080/STS/services/SecurityTokenService</wsa:To>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:MessageID>urn:uuid:9667500f-4751-46c3-bb2a-5a2c27f757c6</wsa:MessageID>
<wsa:Action>http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue</wsa:Action>
</soapenv:Header>
動的な日付と時刻の値を使用する
動的式を使用して日付と時刻の値を指定することができます。これにより、例えば、現在の日付をメッセージの識別子として定義できます。
-
基準日には協定世界時(UTC)を使用し、ISO 8601形式で表示。
-
日付と時刻の値は、「Insert」、「Verify」、または「Trigger」のいずれかのステッププロパティで定義。
現在の日付と時刻の値を使用する
The dynamic expressions DATE and TIME use the current date or the current time as base values.
テーブルの例では、January 13, 2022と2:18 PM(14:18:00)を基準値として使用しています。
|
式 |
説明 |
例 |
|---|---|---|
|
{DATE} |
完全な日付 |
2022-01-13 |
|
{TIME} |
現在の日付と時刻 |
2022-01-13T14:18:00Z |
基準日から日付を計算する
基準日を偏差とともに定義することにより、動的な日付と時刻の値を計算することができます。
Syntax: {<EXPRESSION>[<Base date>][<Offset>][<Format>]}
|
パラメータ |
説明 |
|---|---|
|
Base date |
日付の値を指定する。If you leave the value empty, APIシミュレーション uses the current date as the base date.バッファの値を基準日として使用することもできます。 |
|
Offset |
基準日から何を加算または減算するかを定義する。オフセットは、符号付き整数と単位で構成されています。使用可能な値は以下のとおりです。
|
|
Format |
テストオブジェクトの日付形式がISO 8601形式と異なる場合は、日付形式を定義してください。デフォルト値は「yyyy-MM-dd」です。 |
To apply the standard behavior to one of the parameters, leave the parameter value empty [].For instance, {DATE} and {DATE[][][]} have the same meaning.APIシミュレーション uses the current date without deviations.
With the expression +3M-1d, you add three months to the base date and deduct one day.
The expression {DATE[2022-05-23][+3M-1d][]} returns 2022-08-22.
以下の例では、バッファの値を基準日として使用しています。
-
If the buffer date is 2022-11-10, the expression {DATE[{B[Variable]}][+1M+1d][]} returns 2022-12-11.
-
If the buffer date is 2022-12-20, the expression {DATE[{B[Variable]}][-1M][01.MM.yyyy]} returns 01.11.2022.
-
If the buffer date is 2022-12-24T12:34:56Z, the expression {TIME[{B[Variable]}][+2d+1h][]} returns 2022-12-26T13:34:56Z.
特殊文字をエスケープする
シミュレーションにおいて特殊文字(}、]、{、[、")をテキストとして使用したい場合は、まず、エスケープさせる必要があります。個々の文字または文字列全体をエスケープすることができます。
これを行うには、個々の文字または文字列の前後に二重引用符(")を使用してください。
Syntax: "<special characters>"
この例では、{[Hi]}という値をプレーンテキストとして使用します。そのため、"{[Hi]}"と入力します。
特殊文字の「"」の場合、後続の「"」が実際の文字列の一部であってエスケープした文字列の末尾ではないことを示すには、追加の引用符が必要です。
この例では、値{"Text"}をプレーンテキストとして使用します。そのため、"{""Text""}"と入力します。
バッファ値を使用する
仮想サービス内のメッセージ要素の値を複数回必要とする場合は、プロパティ「Buffer」を使用してそれらを一時的に保存します。仮想サービス内でこれらのバッファ値を読み出し、別のメッセージ要素に挿入することができます。
バッファ値を作成する
値をバッファするには、以下の2つが必要です。
-
バッファ値をもう一度見つけるためのバッファ名。バッファ名は大文字と小文字を区別しません。
-
ステッププロパティ「buffer」を持つバッファ。
バッファされた値を読み出す
バッファされた値をメッセージ要素向けに指定するには、以下の構文を使用してください。
Syntax: {B[<buffer name>]}
-
バッファされた値をステッププロパティ「Insert」と一緒に使用する。
この例では、「Service02」という名前のサービスを実行します。
-
インバウンドステップには、以下の2つのプロパティが含まれています。
-
「Path」プロパティの値として任意の値を含むメッセージを待つトリガープロパティ。
-
「Path」プロパティの値を格納する「myBuffer」という名前のバッファを作成する「buffer」プロパティ。プロパティ「range」は、「Path」プロパティの1文字目から5文字目のみを格納することを指定しています。
-
-
アウトバウンドステップのプロパティ「insert」は、「myBuffer」という名前のバッファの値をペイロードに書き込みます。
schema: SimV1
name: buffer
description: set buffer and readout bufferd value
connections:
- name: myConnection
port: 8080
services:
- name: Service02
steps:
- direction: In
trigger:
- uri: '*'
buffer:
- type: Path
name: myBuffer
range: 1..5
- direction: Out
insert:
- value: '{B[myBuffer]}'
バッファされた値をメッセージのペイロードに読み出す
通常、バッファされた値は、読み取りたいメッセージのセクションを特定するための明確なパスを必要とします。これは、複雑なペイロード(特に多くの特殊文字を含む場合)で課題となることがあります。以下の構文を使用してバッファされた値を読み取り、それをメッセージのペイロードに直接挿入することができます。
Syntax: %{<buffer name>}
-
メッセージの「payload」プロパティ内でバッファされた値を使用する。
この例では、「Service02」という名前のサービスを実行します。
-
インバウンドステップには、以下の2つのプロパティが含まれています。
-
「Path」プロパティの値として任意の値を含むメッセージを待つトリガープロパティ。
-
現在の日付の値を格納する「myDate」という名前のバッファを作成するバッファプロパティ。
-
-
アウトバウンドステップは、「myDate」という名前のバッファの値を直接ペイロードに書き込みます。
schema: SimV1
name: buffer
description: set buffer and readout bufferd value
connections:
- name: myConnection
port: 8080
services:
- name: Service02
steps:
- direction: In
trigger:
- uri: '*'
buffer:
- name: myDate
value: "{DATE}"
- direction: Out
message:
payload: |-
"{
"a": {
"c:" %{myDate}
}
}"
スプリットバッファを使用する
メッセージ要素の値を区切り記号に基づいて分割するには、スプリットバッファを定義します。
スプリットバッファの値を作成する
値を分割してバッファとして格納するには、以下の3つが必要です。
-
バッファの値をもう一度見つけるためのバッファ名。
-
値の個々の部分を識別するための区切り記号。
-
ステッププロパティ「buffer」を持つバッファ。
Syntax: {SPLITBUFFER[<Separator>]}
When buffering, APIシミュレーション creates a separate buffer with consecutive numbers for each partial value.
バッファされた値を読み出す
メッセージ要素に対してバッファされた値を指定するには、バッファ名を対応するバッファ値の番号と一緒に使用してください。
Syntax: {B[<Buffer name><number>]}
-
バッファされた値をステッププロパティ「Insert」と一緒に使用する。
この例では、「Service04」という名前のサービスを実行します。
-
インバウンドステップには、以下の2つのプロパティが含まれています。
-
「Path」プロパティの値として任意の値を含むメッセージを待つトリガープロパティ。
-
メッセージペイロードの値を格納する「myBuffer」という名前のスプリットバッファを作成するバッファプロパティ。For each value separated by a semicolon, APIシミュレーション creates a separate buffer with consecutive numbers.例えば、ペイロードが123;456;789;ABCの場合、以下のバッファが得られます:値「123」が振られた「MyBuffer1」、「456」が振られた「MyBuffer2」、「789」が振られた「MyBuffer3」、そして「ABC」を持つ「MyBuffer4」です。
-
-
アウトバウンドステッププロパティ「insert」は、「myBuffer1」という名前のバッファの値をペイロード:123に書き込みます。
schema: SimV1
- name: Service04
steps:
- direction: In
trigger:
- uri: '*'
buffer:
- name: myBuffer
value: '{SPLITBUFFER[;]}'
- direction: Out
insert:
- value: '{B[myBuffer1]}'
XBuffersを使用する
XBufferを使用することで、バッファの静的な文字列内に動的な値を保存することができます。
XBufferの値を作成する
文字列内の値をバッファするには、以下の2つが必要です。
-
バッファの値をもう一度見つけるためのバッファ名。
-
ステッププロパティ「buffer」を持つバッファ。
Syntax: <string>{XB[<Buffer name>]}<string>
バッファされた値を読み出す
バッファ値と同じようにXBufferの値を指定します。
この例では、「Service03」という名前のサービスを実行します。
-
インバウンドステップには、以下の2つのプロパティが含まれています。
-
「Path」プロパティの値として任意の値を含むメッセージを待つトリガープロパティ。
-
メッセージペイロードの値を格納するために「OrderID」および「CustomerID」という2つのXBufferを作成するバッファプロパティ。APIシミュレーション buffers the OrderID, which is located between Transfer order and has been created.また、「for customer」の後に置かれた「CustomerID」もバッファします。
-
-
アウトバウンドステップのプロパティ「insert」は、「OrderID」という名前のバッファの値をペイロードに書き込みます。
schema: SimV1
- name: Service03
steps:
- direction: In
trigger:
- uri: '*'
buffer:
- value: Transfer order {XB[OrderID]} has been created for customer {XB[CustomerID]}
- direction: Out
insert:
- value: '{B[OrderID]}'
ランダムテキストを生成する
メッセージ要素の値として、大文字のランダムテキストを作成することができます。テキストの長さをパラメータで指定してください。
Syntax: {RANDOMTEXT[<Length of random text>]}
-
ステッププロパティ「Insert」を持つランダムテキストを定義する。
ランダムな数を生成する
メッセージ要素の値としてランダムな数字を作成することができます。
-
以下のパラメーターのいずれかを使用して、ランダムな数字を指定することができます。
To define the length of a random number, enter {RND[<Length of random number>]}.最大で19桁まで入力できます。
To define an upper and lower limit of a random number, enter {RND[<Lower limit>][<Upper limit>]}.下限値は上限値より小さくなければなりません。負の値は問題ありません。生成された整数は上限と下限の間の値で、境界の値も含みます。
-
ステッププロパティ「Insert」を持つランダムな数で定義する。
この例では、7桁の数字を作成します。
schema: SimV1
- name: Service05
steps:
- direction: In
trigger:
- uri: '*'
- direction: Out
insert:
- value: '{RND[7]}'
この例では「-789」と「123」の間の整数を作成しています。
schema: SimV1
- name: Service06
steps:
- direction: In
trigger:
- uri: '*'
- direction: Out
insert:
- value: '{RND[-789][123]}'
ユニークIDを生成する
メッセージ要素の値として、ユニークIDを作成することができます。ユニークIDは連続して生成され、各々のIDは一度だけ割り当てられます。ユニークIDの長さをパラメータで指定してください。
Syntax: {UNIQUEID[<length of uniqueID>]}
-
ステッププロパティ「Insert」を使用してユニークIDを定義する。
利用できる十分な数のIDがなく、システムが新しいIDを生成できない場合、エラーが発生します。環境を再起動してユニークIDをリセットするか、ユニークIDの長さを増やしてください。
この例では、「0」から「9」までの範囲のユニークIDを生成します。
schema: SimV1
- name: Service07
steps:
- direction: In
trigger:
- uri: '*'
- direction: Out
insert:
- value: '{UNIQUEID[1]}'
正規表現を使用する
正規表現は、検索した値に正規表現に一致する文字列が含まれているかどうかを比較するために使用します。
APIシミュレーション uses the .NET Framework syntax for regular expressions.
Syntax: {REGEX["<regular expression>"]}
-
ステッププロパティの「Verify」または「Trigger」を使用して正規表現を定義する。
この例では、「Service03」という名前のサービスを実行します。
-
このサービスは、インバウンドステップのプロパティ「trigger」を使用して、プロパティ「Path」の値としてさまざまな形式の電話番号を含むメッセージを待ちます。
以下のパターンがあります。
-
(((00|\+)(420|43))|0):00420、0043、+420、+43、または0を探します
-
\s?: 可能なスペース
-
\d+:1桁以上
-
/?: 可能なフォワードスラッシュ
-
(\s?\d)+:間に空白が入る可能性がある数字の文字列
あり得る検索結果には、+43664 1234567、0699 1234 5678 9、または00420669/1 23 456 7が含まれます。
-
-
電話番号が一致する場合、アウトバウンドステップのプロパティ「insert」は、値「valid phone number」をペイロードに書き込みます。
schema: SimV1
- name: Service08
steps:
- direction: In
trigger:
- type: Path
value: '{REGEX["(((00|\+)(420|43))|0)\s?\d+/?(\s?\d)+"]}'
- direction: Out
insert:
- value: 'valid phone number'
The expression {REGEX["^\d{1,2}[ /.-]\d{1,2}[ /.-](\d{4}|\d{2})$"]} searches for dates in various possible formats.
以下のパターンがあります。
-
^:行頭
-
\d{1,2}:日(1桁または2桁の長さ)
-
[ /.-]:区切り記号(スペース、フォワードスラッシュ、ドット、またはハイフン)
-
\d{1,2}:月(1桁または2桁)
-
[ /.-]:区切り記号(スペース、フォワードスラッシュ、ドット、またはハイフン)
-
(\d{4}|\d{2}):年(2桁または4桁)
-
$:行末
あり得る検索結果は、9/3、12.12.87、1-1-1999、11.1986、04/23/2007、01.03.2000, 4.8です。
Use the expression {REGEX["^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$"]} to search for combined date and time in Coordinated Universal Time (UTC) in ISO 8601 format.
以下のパターンがあります。
-
^:行頭
-
\d{4}:年(4桁)
-
-:区切り記号(ハイフン)
-
\d{2}:月(2桁)
-
-:区切り記号(ハイフン)
-
\d{2}:日(2桁)
-
T:日付と時刻の間の区切り文字
-
\d{2}:ちょうど2桁
-
::区切り記号(コロン)
-
\d{2}:時間(2桁)
-
::区切り記号(コロン)
-
\d{2}:秒(2桁)
-
Z:タイムゾーン指定子(UTC)
-
$:行末
あり得る検索結果は、2013-10-03T12:00:00Z、1776-07-04T13:37:11Z、または1993-01-01T00:00:00Zです。
正規表現でランダムな文字列を生成する
正規表現で制限されたランダムな文字列を生成できます。正規表現は二重引用符で囲んで指定する必要があります。
Syntax: {RANDOMREGEX["<Regular expression>"]}
-
ステッププロパティ「Insert」を使用して、正規表現でランダムな文字列を生成する。
In this example, {RANDOMREGEX["^[A-Z][a-z]+[0-9]{4}$"]} creates a value that starts with an uppercase letter between A and Z, followed by any number of lowercase letters, and exactly four ciphers between 0 and 9.「^」の文字は行頭を表し、「$」は行末を表します。
この式は、例えば「Ecqwp1989」を生成します。
計算を実行する
You can perform calculations with the MATH expression.
Syntax: {MATH[<Operand 1><Operator><Operand 2>..<Operator><Operand n>]}
-
またはステップのプロパティの「Insert」または「Verify」を使用して計算を実行する。
-
数値と科学的記数法をオペランドとして使用する。
-
オペレータをPEMDASルールに従って処理する。ただし、括弧を使用することでこの動作を変更することができます。
小数点以下の桁は小数点で区切らなければなりません。
APIシミュレーション supports the following operators:
|
オペレータ |
説明 |
|---|---|
|
+, -, *, / |
四則演算 |
|
% |
剰余演算 |
|
^ |
冪乗 |
|
== |
等しい |
|
!= |
等しくない |
|
< |
より小さい |
|
> |
より大きい |
|
<= |
以下 |
|
>= |
以上 |
この例では、バッファの値「A」を「1」増やす方法を示しています。
{MATH[{B[A]}+1]}
機密データを使用する
シミュレーションで機密データを使用するには、それらを変数に格納してください。
この操作により、お客様はシミュレーションファイル内でこのデータを簡単に参照することができ、これらのファイルにアクセスできる他のユーザーが機密情報を閲覧するのを防ぐことができます。
変数を設定する
If you set environment variables in your system, it's important that you use the prefix Simulator__Variables__ with the variable name, for example Simulator__Variables__My Secret Password.
If you set the variables in the appsettings.yml file, make sure you have administrator rights and follow these steps:
-
Open the appsettings.yml file.
-
Enter your variables in the Simulator settings under Variables with the following syntax: <Variable name>: <Value>.
Appsettings.yml example entry.
変数からデータをフェッチする
To fetch data from variables use the dynamic expression VAR .
Syntax: '{VAR[<Variable name>]}'
-
変数をステッププロパティの「Insert」または「Verify」と一緒に使用する。
この例では、ステッププロパティ「Insert」が、「my_password」という名前の変数の値をヘッダーに書き込んでいます。
schema: SimV1
connections:
- name: token provider
endpoint: www.my-token-provider.com
listen: false
services:
- name: get valid token
steps:
- to: token provider
insert:
- type: Header
name: authentication
value: '{VAR[my_password]}'
- buffer:
- name: token
リソースからデータを読み取る
リソースを活用して、実行中の異なるシミュレーション間で、実行時にデータを共有することが可能です。The FROM expression is a way to use data from a resource.
Syntax: {FROM[resource name][column][condition]}
|
パラメータ |
説明 |
|---|---|
|
Resource name |
使用するデータが入っているリソースの名前を指定する。 |
|
Column |
検索する列を指定する。 |
|
Condition |
SQLのWHERE句を定義して、使用する値を限定する。 |
-
ステッププロパティの「Insert」、「Verify」、または「Trigger」を持つ式を使用する。
この例では、「movies」という名前のリソースからデータを読み込んでいます。これは映画のCSVテーブルです。
-
ステップ「trigger」は、値「movies」を含むプロパティ「uri」を持つメッセージを待ちます。If an incoming message meets this condition, APIシミュレーション uses an XBuffer to save the value of the property id.
-
次のステップでは、リソース「movies」から値を挿入します。具体的には、バッファされたidと一致するidが含まれる行から「タイトル」列の値を読み込みます。
schema: SimV1
name: Test01
resources:
- name: movies
file: movies.csv
services:
- name: movies
steps:
- trigger:
- uri: /movies/*
buffer:
- type: Path
value: '/movies/{xb[id]}'
- insert:
- value: '{FROM[movies][title][id = "{B[id]}"]}'
置換値を使用する
You can use the TRY dynamic expression to enter a replacement value for a property if a specific dynamic value can't be found.例えば、バッファされた値を読み込みたいがそれが存在せず、例外も発生させたくないという場合は、置換値を使用します。
Syntax: {TRY[<dynamic expression>][<replacement>]}
-
Specify a TRY expression with the Insert step property.
In this example, we want to read data from a resource named movies using the FROM expression.
挿入のステップは、リソース「movies」から値を挿入しようとします。具体的には、バッファされたidと一致するidが含まれる行から「タイトル」列の値を読み込みます。値が見つからない場合は、置換値「movie not found」が使用されます。
schema: SimV1
name: Test01
resources:
- name: movies
file: movies.csv
services:
- name: movies
steps:
- trigger:
- uri: /movies/*
buffer:
- type: Path
value: '/movies/{xb[id]}'
- insert:
- value: '{TRY[{FROM[movies][title][id = "{B[id]}"]}][movie not found]'
タイムスタンプを指定する
The dynamic expression TIMESTAMP returns the number of milliseconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970.
Syntax: {TIMESTAMP}
-
ステッププロパティ「Insert」を使用してタイムスタンプを指定する。
カウンターを使用する
Use the dynamic expression COUNTER for instance, to set how many times a specified message should be sent or received before proceeding to the next step.
Syntax: {COUNTER}
-
ステッププロパティ「Insert」を持つカウンターを使用する。