📝
ServiceNow ATF の Run Server Side Script でテストステップ結果を取得や出力する
概要
ServiceNow Automated Test Framework (ATF) の Run Server Side Script で変数を扱う方法を紹介します。
-
Run Server Side Scriptを実行する際に前のテストステップの結果を参照する -
Run Server Side Scriptの実行結果を後のテストステップで参照する
事前設定
ステップ設定(Step Configurations)の確認と設定
-
Record Query の Output Variables を確認する
Automated Test Framework (ATF) > Administration > Step Configurations > Record Query > Output VariablesRun Server Side Scriptで値を利用する際にColumn nameを確認しておく必要があります。
このColumn nameはテストステップの種類ごとに変わります。
Record Queryはデフォルトでは以下のような設定になっています。Column name Label Default value Type Reference table table Table Name (empty) first_record First record Document ID (empty) -
Run Server Side Script の Output Variables を確認する
Automated Test Framework (ATF) > Administration > Step Configurations > Run Server Side Script > Output VariablesRecord Queryと同様に確認します。
今回Output Variablesにu_varを追加しています。
ここに定義されていない変数に出力しようとした場合、エラーになります。Column name Label Default value Type Reference record_id Record Document ID (empty) table table Table Name (empty) u_var var String (empty)
テストステップ
テストの全体像
今回は以下のようなテストを作成し、Run Service Side Script で前レコードの結果取得と Script での処理結果のアウトプットを確認します。
Automated Test Framework (ATF) > Tests > {テスト名}
| Display name | Execution order | memo_description | memo_sys_id |
|---|---|---|---|
| Record Query | 1 | abcdefghijklmnopqrstuvwxyz000001 | |
| Run Server Side Script | 2 | Script1 | abcdefghijklmnopqrstuvwxyz000002 |
| Run Server Side Script | 3 | Script2 | abcdefghijklmnopqrstuvwxyz000003 |
| Log | 4 | abcdefghijklmnopqrstuvwxyz000004 |

テストステップの作成
1. Record Query
- 以下のインシデントレコードをクエリ
sys_id number abcdefghijklmnopqrstuvwxyz000000 INC0000000

2. Script1
-
steps("sys_id")でRecord Queryの結果を取得 -
outputs.u_varにインシデントレコードの number を出力
(function (outputs, steps, params, stepResult, assertEqual) {
var inputs = steps("abcdefghijklmnopqrstuvwxyz000001");
var gr = new GlideRecord(inputs.table);
gr.get(inputs.first_record);
var result = gr.number;
stepResult.setOutputMessage(result);
outputs.u_var = result;
return true;
})(outputs, steps, params, stepResult, assertEqual);
3. Script2
-
steps("sys_id")でScript1の結果を取得
(function (outputs, steps, params, stepResult, assertEqual) {
var str = steps("abcdefghijklmnopqrstuvwxyz000002").u_var;
stepResult.setOutputMessage(str);
return true;
})(outputs, steps, params, stepResult, assertEqual);
4. Log
-
Script1の出力u_varを取得する

結果
- 2 レコード目の
Script1ではインシデントレコードの number にあたるINC0000000をメッセージとして出力しています。 - 3 レコード目の
Script2ではScript1がu_verとして出力した結果を取得し、INC0000000をメッセージとして出力しています。(=Script1はu_varに出力できている) - 4 レコード目の
Logでは 3 レコード目と同様にScript1がu_verとして出力した結果を取得し、INC0000000をメッセージとして出力しています。

Discussion