HttpRunner 4.x では、API レスポンスから値を抽出し、期待される結果と比較する機能が提供されています。抽出には主に2種類の方法が利用可能です。
抽出(Extract)の方式
- JMESPath 式:JSON 形式のレスポンスボディに対して使用します。構造化されたデータから特定フィールドを取得できます。
詳細は JMESPath 公式チュートリアル を参照。 - 正規表現(Regex):HTML やプレーンテキストなど、非 JSON レスポンスから文字列を抽出する場合に使用します。正規表現の知識が必要です。
抽出可能なレスポンス要素
以下の5つのコンポーネントから値を抽出できます:
headers:例:headers."Content-Type"cookies:例:cookies.session_idbody:例:body.user.idstatus_code:例:200,404proto:例:"HTTP/1.1"
キーに特殊文字(例:ハイフン)が含まれる場合は、ダブルクォートで囲む必要があります。
抽出の実装例(JSON レスポンス)
config:
name: ログインテスト
teststeps:
- name: ユーザーログイン
request:
method: POST
url: http://120.25.121.168:19001/api/login
json:
username: admin
password: "quxue2023"
extract:
response_url: body.url
client_origin: body.origin
content_type: headers."Content-Type"
validate:
- eq: [status_code, 200]
実行後、抽出された変数はログに出力されます:
exportVars={"content_type":"application/json","client_origin":null,"response_url":null}
正規表現による抽出(非 JSON レスポンス)
HTML ページなどのテキストベースレスポンスから情報を抽出する例:
teststeps:
- name: ブログタイトル取得
request:
method: GET
url: https://www.cnblogs.com/quxue
extract:
page_title: "<title>(.*)</title>"
validate:
- eq: [status_code, 200]
検証(Validate)の記述方法
抽出した値や直接指定したパスに対して、期待値との比較を行います。比較演算子として eq(等価)がよく使われます。
validate:
- eq: [status_code, 200]
- eq: [body.data.username, "admin"]
- eq: [body.data.message, "成功"]
- eq: [headers."Content-Type", "application/json"]
検証対象は、JMESPath で指定した JSON パス、または正規表現で抽出された変数(${page_title} のように参照可能)です。