メインコンテンツまでスキップ

変数・定数の定義と参照

このページでは, シナリオの変数や定数の定義, およびその参照方法について説明します。


概要​

シナリオファイルでは, 定数を定義し, 同じファイル内の任意の場所から参照できます。 さらに, シナリオ内で使用できる予約された変数も使用できます。

定数​

概要​

定義機能は, シナリオファイルで任意の値の定数を定義し, 同じファイルの任意の場所から参照できるようにする機能です。

主に, アクタのインベントリや検証用のメッセージなど, 同じ値を複数回使用する場合に使用します。
これにより, シナリオファイルの冗長な記述を減らし, 可読性と保守性を向上させます。

定義を作成するには definitions という名前のオブジェクトをシナリオファイルのルートに作成し, その中で自由に定義します。 キーには割り当てる名前を記述し, 値には任意の型の値を記述します。

定義機能には以下のの2つの種類があります。

  1. オブジェクトの定義
    オブジェクトとは, YAML では キー: 値 と表現される構造体です。 参照用のプロパティを使用したいところで記述することで, オブジェクトの値を参照できます。
  2. 埋め込み文字列の定義
    任意な文字列の一部または全部を, 定義を使用して置換します。
警告

文字列の埋め込み機能は, YAML のキーでは使用できません。

定義の作成​

scenamatica: 1.0.0

# (中略)

definitions:
# オブジェクトの定義
item:
type: DIAMOND_HOE
name: "ダイヤのクワ"
lores:
- "めちゃつよダイヤのクワ"

# 埋め込み文字列の定義
death_message: "死んでしまった!"

定義されたオブジェクトを参照する​

定義されたオブジェクトは, シナリオファイル内の任意の場所で参照できます。
$ref というキーを任意の場所で定義すると, $ref のある階層に定義が展開されます。

参照元に同じキーのプロパティがある場合は, 参照元の値がそのまま使用されます。
また, 参照時に使用した $ref プロパティは実行時に削除されます。

以下は, 定義されたオブジェクトを参照する例です。定義は 定義の作成 で作成したものを使用しています。

# (中略)

context:
actors:
- name: Hoge
# インベントリの 0, 1, 2 番目のスロットに定義された item を設定
main:
0:
$ref: item
1:
$ref: item
2:
$ref: item

埋め込み文字列を参照する​

埋め込み文字列は, シナリオファイル内の任意の文字列内で使用できます。 任意の文字列内で ${ と } で定義の名前を囲んで使用します。

ヒント

{ と } をエスケープする場合は, ${{} や ${}} のように記述します。
({ と } という名前の定義が暗黙的に作成されており, 参照する形でアクセスします。)

以下は, 埋め込み文字列を参照する例です。定義は 定義の作成 で作成したものを使用しています。


# (中略)

actions:
- type: expect
action: "message"
with:
message: "死亡メッセージ:${death_message}"
recipient: "Hoge"

定義された変数​

概要​

Scenamatica は, 高度なシナリオの作成用に, あらかじめ定義された変数を提供しています。
これらの変数は, シナリオファイル内の任意の場所で参照できます。

これらの変数はセッションごともしくは実行ごとにリセットされます。

変数の参照​

変数を使用するには, リテラルのかわりに使用する変数名を ${ および } で囲みます。
各要素は . で区切ってアクセスします。

変数の型と, シナリオが受け入れる型のすり合わせは自動で行われますが, 明らかに変換できない型を参照するとエラーになります。
特に文字列と数値との相互変換や, 数値型のキャストは自動で行われます。 例えば, Integer を受け入れる変数に Object を代入しようとするとエラーになります。

備考

値の参照はそれが使われているシナリオ, ないしはそのエンジンの開始前に行われます。

変数の一覧​

これらの一覧は最上位の変数です。これらの値はすべてオブジェクトでありますので, それぞれのプロパティにアクセスして使用します。

キー型説明
runtimeRuntimeJava のランタイム情報を取得します。
sessionSession現在のシナリオが属しているセッションの情報です。
systemSystemPropertiesJava のシステムプロパティを取得します。
scenarioScenario自身のシナリオを取得します。

system​

Java の Ljava.lang.System#getProperties()Ljava/lang/String; で取得できるシステムプロパティを取得します。

警告

存在しないプロパティを参照するとエラーになります。

runtime​

キー型説明
memoryMemoryマシンのメモリ情報を取得します。

session​

キー型説明
started_at整数値 (64bit)セッションの開始時刻です。
scenarios.*整数値 (32bit) | Scenarioセッションに属するシナリオの一覧またはその数です。
session.scenarios.*​

* には, シナリオ(ファイル)の名前を指定します。

Memory 型​

キー型説明
total整数値 (64bit)マシンのメモリの合計値です。
free整数値 (64bit)マシンのメモリの空き値です。
max整数値 (64bit)マシンのメモリの最大値です。

Scenario 型​

この変数を使用してシナリオを取得するには, 子にシナリオの名前を指定します(MUST)。

また, 以下の変数に加えて追加でシナリオファイルにおけるすべての値を参照できます。

キー型説明
result真偽値 | ScenarioResultシナリオの実行結果または成功したかどうかです。
started_at整数値 (64bit)シナリオの開始時刻です。
finished_at整数値 (64bit)シナリオの終了時刻です。
scenario.*.outputObjectメインシナリオの出力です。
scenario.*.runif.outputObject各メインシナリオの条件の出力です。
runif.outputObject条件付き実行のシナリオに指定されたシナリオの出力です。
triggerTriggerシナリオを発火させたトリガです。
session.scenario.*.output​

* には, シナリオのインデックスまたは名前を指定します。

ヒント

これを参照する場合, 中間の scenario は省略できます。 例: session.scenario.foo.output → session.foo.output

session.scenario.*.runif.output​

* には, シナリオのインデックスまたは名前を指定します。

ヒント

これを参照する場合, 中間の scenario は省略できます。 例: session.scenario.foo.runif.output → session.foo.runif.output

ScenarioResult 型​

キー型説明
stateString(ScenarioState)シナリオの状態です。
causeString(ScenarioCause)シナリオの終了理由です。
attempt_of整数値 (32bit)シナリオの試行回数です。

Trigger 型​

以下の変数に加えて追加でトリガにおけるすべての値を参照できます。
例えば, そのシナリオを発火したトリガの種類を取得するには, 次のようにします: ${scenario.trigger.type}

キー型説明
runif.outputObjectトリガの条件付き実行の出力です。
before.*.outputObjectトリガの前シナリオの出力です。
after.*.outputObjectトリガの後シナリオの出力です。
outputObjectトリガの出力です。

* には, シナリオのインデックスまたは名前を指定します。