コンテンツにスキップ

ステップアクションリファレンス

QA プランの各ステップは、http_request または browser の 2 つのアクションタイプのいずれかを実行します。AI エージェントが MCP ツールを通じて QA プランを構築する際に、これらのアクションを選択・設定します。このページでは、両方の完全な設定スキーマを説明します。

http_request アクションは HTTP リクエストを送信し、レスポンスを検証します。

フィールド必須説明
methodstringはいHTTP メソッド:GETPOSTPUTPATCHDELETE など。
urlstringはいリクエスト URL です。テンプレート変数をサポートします(例:{{base_url}}/api/users)。
headersRecord<string, string>いいえキーバリューペアのリクエストヘッダーです。値はテンプレート変数をサポートします。
bodyanyいいえリクエストボディです。オブジェクトは JSON としてシリアライズされます。文字列値ではテンプレート変数をサポートします。
timeoutnumberいいえリクエストタイムアウト(ミリ秒)です。
pollPollConfigいいえ条件が満たされるまでエンドポイントをポーリングします。

一部の API エンドポイントではポーリングが必要です。条件が満たされるまでリクエストを繰り返します。poll を指定すると、until 条件が満たされるかタイムアウトに達するまで、一定間隔でリクエストが繰り返されます。

フィールド必須説明
untilobjectはいチェックする条件です。以下のサブフィールドのいずれかを指定する必要があります。
until.status_codenumberいいえレスポンスステータスコードがこの値と一致するまでポーリングします。
until.json_pathobjectいいえレスポンスボディの JSON パスが一致するまでポーリングします。path(文字列)と expected(任意)を含みます。
interval_msnumberはい各ポーリングリクエスト間の待機時間(ミリ秒)です。
timeout_msnumberはいポーリングが失敗とみなされるまでの最大合計時間(ミリ秒)です。

ポーリングの例 — 非同期ジョブの完了を待機:

{
"action": "http_request",
"config": {
"method": "GET",
"url": "{{api_base_url}}/jobs/{{job_id}}"
},
"poll": {
"until": {
"json_path": "$.status",
"equals": "completed"
},
"interval_ms": 2000,
"timeout_ms": 60000
}
}

extract フィールドは HTTP レスポンスから値をキャプチャし、後続のステップで使用できるようにします。各抽出は JSONPath 式を使用してレスポンスボディ内の値を特定します。抽出された値は {{variable_name}} でアクセス可能なテンプレート変数になります。

{
"extract": {
"user_id": "$.data.id",
"user_name": "$.data.name"
}
}

このステップの実行後、{{user_id}}{{user_name}} がすべての後続ステップで利用可能になります。

以下の例では、ユーザーを作成し、返された ID を抽出した後、ユーザーを取得して正しく作成されたことを検証します。

ステップ 1 — ユーザーの作成:

{
"step_key": "create_user",
"action": "http_request",
"config": {
"method": "POST",
"url": "{{api_base_url}}/users",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{auth_token}}"
},
"body": "{\"name\": \"Test User\", \"email\": \"test@example.com\"}"
},
"assertions": [
{ "type": "status_code", "expected": 201 },
{ "type": "json_path", "expression": "$.data.name", "equals": "Test User" }
],
"extract": {
"created_user_id": "$.data.id"
}
}

ステップ 2 — ユーザーの取得:

{
"step_key": "get_user",
"action": "http_request",
"depends_on": ["create_user"],
"config": {
"method": "GET",
"url": "{{api_base_url}}/users/{{created_user_id}}",
"headers": {
"Authorization": "Bearer {{auth_token}}"
}
},
"assertions": [
{ "type": "status_code", "expected": 200 },
{ "type": "json_path", "expression": "$.data.email", "equals": "test@example.com" }
]
}

ステップの condition フィールドは、変数の値に基づいてステップを実行するかどうかを制御します。条件が満たされない場合、ステップはスキップされます(depends_onrequires によるスキップと同じ動作です)。

条件チェックは depends_on のチェック後に評価されます。条件で参照する変数は通常、先行ステップの extract から取得します。

フィールド必須説明
typestringはい条件タイプ:"variable_equals" または "variable_not_equals" です。
variablestringはいチェックする変数名です。
valuestringはい比較する値です。

変数が指定された値と等しい場合のみステップを実行します。変数が未定義の場合、条件は満たされず、ステップはスキップされます。

{
"condition": {
"type": "variable_equals",
"variable": "user_role",
"value": "admin"
}
}

変数が指定された値と等しくない場合のみステップを実行します。変数が未定義の場合、条件は満たされ、ステップは実行されます。

{
"condition": {
"type": "variable_not_equals",
"variable": "payment_method",
"value": "free"
}
}

browser アクションは、Playwright を使用してヘッドレスブラウザを操作します。

フィールド必須説明
stepsBrowserStep[]はい実行するブラウザアクションの順序付き配列です。
timeout_msnumberいいえブラウザアクションシーケンス全体の最大時間(ミリ秒)です。

steps 配列の各エントリは、type フィールドとタイプ固有のパラメータを持つオブジェクトです。

タイプパラメータ説明
gotostring(URL)URL に遷移します。テンプレート変数をサポートします。
タイプパラメータ説明
clickstring(CSS セレクタ)要素をクリックします。
double_clickstring(CSS セレクタ)要素をダブルクリックします。
hoverstring(CSS セレクタ)要素にホバーします。
タイプパラメータ説明
type{ selector: string, text: string }入力フィールドにテキストを入力します。両方のフィールドでテンプレート変数をサポートします。
select_option{ selector: string, value: string }<select> 要素で値を指定してオプションを選択します。
checkstring(CSS セレクタ)チェックボックスをチェックします。
uncheckstring(CSS セレクタ)チェックボックスのチェックを外します。
press{ selector: string, key: string }要素にフォーカスした状態でキーボードキーを押します(例:EnterTab)。
focusstring(CSS セレクタ)要素にフォーカスします。
upload_file{ selector: string, path: string }ファイル入力要素にファイルをアップロードします。
タイプパラメータ説明
wait_for_selectorstring(CSS セレクタ)セレクタに一致する要素が DOM に表示されるまで待機します。
wait_for_urlstring(URL 部分文字列)ページの URL が指定した部分文字列を含むまで待機します。
タイプパラメータ説明
screenshotstring(名前)スクリーンショットを撮影し、指定した名前で保存します。
タイプパラメータ説明
set_headerRecord<string, string>後続のブラウザリクエストにカスタム HTTP ヘッダーを設定します。
タイプパラメータ説明
switch_to_framestring(CSS セレクタ)セレクタで指定された iframe に実行コンテキストを切り替えます。
switch_to_main_frametrueメインフレームに戻ります。

ブラウザコンテキストは単一のシナリオ内のすべてのステップで共有されます。これは以下を意味します。

  • ログインセッションはステップ間で維持されます。
  • Cookie と localStorage は保持されます。
  • ナビゲーション履歴は維持されます。

ブラウザの storageState(Cookie と localStorage)は、あるシナリオから次のシナリオに引き継がれます。これにより、初期のシナリオでログインを行い、認証フローを繰り返すことなく、以降のすべてのシナリオでそのセッションを利用できます。

以下の例では、ログインフローをテストし、ユーザーがダッシュボードに到達することを検証します。

ステップ 1 — ログイン:

{
"step_key": "login",
"action": "browser",
"config": {
"steps": [
{ "type": "goto", "url": "{{web_base_url}}/login" },
{ "type": "type", "selector": "#email", "text": "{{test_email}}" },
{ "type": "type", "selector": "#password", "text": "{{test_password}}" },
{ "type": "click", "selector": "button[type='submit']" },
{ "type": "wait_for_url", "url": "/dashboard" }
],
"timeout_ms": 15000
},
"assertions": [
{ "type": "url_contains", "expected": "/dashboard" },
{ "type": "element_visible", "selector": "[data-testid='welcome-message']" }
]
}

ステップ 2 — ダッシュボードの内容を検証:

{
"step_key": "verify_dashboard",
"action": "browser",
"depends_on": ["login"],
"config": {
"steps": [
{ "action": "wait_for_selector", "selector": "[data-testid='user-name']" }
]
},
"assertions": [
{ "type": "element_text", "selector": "[data-testid='user-name']", "expected": "Test User" },
{ "type": "element_visible", "selector": "[data-testid='recent-activity']" }
]
}