Probe固有関数
Probeがexprに追加している関数です。
match_json
2つのオブジェクトを厳密に比較します。 キーと値が完全に一致する必要があり、片方にだけ存在するキーがあれば一致しません。
構文: match_json(src, target)
戻り値: Boolean
test: 'match_json(res.body, {"status": "ok", "count": 3})'diff_json
match_jsonと同じ基準で比較し、差分を文字列で返します。
一致する場合はNo diffを返します。
構文: diff_json(src, target)
戻り値: String
echo: "{{diff_json(res.body, vars.expected)}}"parse_json
JSON文字列をオブジェクトに解析します。
構文: parse_json(string)
戻り値: 任意の型
outputs:
meta: "{{parse_json(res.body.metadata)}}"
test: parse_json(res.body.metadata).version == "1.0"parse_int
文字列または数値を64ビット整数に変換します。 10進整数として解釈できない文字列はエラーになります。
構文: parse_int(value)
戻り値: Integer
test: parse_int(res.headers["Content-Length"]) > 0parse_float
文字列を浮動小数点数に変換します。
構文: parse_float(string)
戻り値: Float
test: parse_float(res.body.score) >= 8.5encode_base64
文字列を標準Base64でエンコードします。
構文: encode_base64(string)
戻り値: String
with:
headers:
Authorization: "Basic {{encode_base64(vars.user + ':' + vars.pass)}}"decode_base64
標準Base64の文字列をデコードします。
構文: decode_base64(string)
戻り値: String
outputs:
payload: "{{decode_base64(res.body.data)}}"unixtime
現在時刻をUnixタイムスタンプ(秒)で返します。
構文: unixtime()
戻り値: Integer
with:
headers:
X-Timestamp: "{{unixtime()}}"random_int
[0, n)の範囲の乱数を返します。
nは正の整数である必要があります。
構文: random_int(n)
戻り値: Integer
with:
url: "{{vars.base_url}}/test?seed={{random_int(1000)}}"random_str
指定した長さのランダムな英数字([a-zA-Z0-9])を返します。
長さの上限は1000000文字です。
構文: random_str(length)
戻り値: String
vars:
email: "user-{{random_str(8)}}@example.com"file
ファイルの中身を文字列として、そのまま返します。 中のテンプレートは展開しません。 パスは、アクションのパスと同じくカレントディレクトリからの相対パスです。 1000000バイトを超えるファイル、存在しないファイル、ディレクトリ、デバイスのような通常のファイル以外のものはエラーになります。
構文: file(path)
戻り値: String
parse_jsonと組み合わせると、JSONファイルがオブジェクトになります。
content-typeがJSONの型ならJSONとして送られ、レスポンスとの比較にも使えます。
with:
post: /users
headers:
content-type: application/json
body: "{{parse_json(file('fixtures/user.json'))}}"
test: match_json(res.body, parse_json(file('expected/user.json')))template
文字列の中の{{ }}テンプレートを展開して、その文字列を返します。
展開には、呼び出した式と同じフィールド(varsやoutputsなど)を使います。
fileで読んだファイルをテンプレートとして使うための関数です。
構文: template(string)
戻り値: String
body: "{{parse_json(template(file('fixtures/user.json.tmpl')))}}"fixtures/user.json.tmplの中身は次のとおりです。
{"name": "{{ vars.name }}", "retries": {{ vars.retries + 1 }}}テンプレートはその値の文字列で置き換わります。
引用符を含みうる文字列の値は、引用符付きで書き出すtoJSONを通すと安全です({"name": {{ toJSON(vars.name) }}})。
展開した文字列の中でtemplateをさらに呼ぶと、それも展開します。
入れ子は10段までです。