📝

ServiceNow ATF の Run Server Side Script でテストステップ結果を取得や出力する

2023/10/08に公開

概要

ServiceNow Automated Test Framework (ATF) の Run Server Side Script で変数を扱う方法を紹介します。

  • Run Server Side Script を実行する際に前のテストステップの結果を参照する
  • Run Server Side Script の実行結果を後のテストステップで参照する

事前設定

ステップ設定(Step Configurations)の確認と設定

  1. Record Query の Output Variables を確認する

    Automated Test Framework (ATF) > Administration > Step Configurations > Record Query > Output Variables
    

    Run 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)
  2. Run Server Side Script の Output Variables を確認する

    Automated Test Framework (ATF) > Administration > Step Configurations > Run Server Side Script > Output Variables
    

    Record Queryと同様に確認します。
    今回 Output Variablesu_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

test-steps

テストステップの作成

1. Record Query

  • 以下のインシデントレコードをクエリ
    sys_id number
    abcdefghijklmnopqrstuvwxyz000000 INC0000000

record-query

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

log

結果

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

step-results

Discussion