Apidog テストステップ間でデータを渡す方法

Oliver Kingsley

Oliver Kingsley

6 8月 2025

Apidog テストステップ間でデータを渡す方法

Apidogで自動テストワークフローを設計する際、APIリクエスト、データベースクエリ、Forループ、ForEachループ、スクリプトなど、様々な種類のテストステップを使用します。

テストステップの種類

多くの場合、あるステップで生成されたデータは、後続のステップで使用する必要があります。これにより、データがプロセスを駆動しステップが相互にリンクされる論理的な流れが生まれます。

例えば、次のような場合があります。

ここで重要な疑問が生じます。

先行する(アップストリーム)ステップのデータを、後続の(ダウンストリーム)ステップで正しく参照するにはどうすればよいでしょうか?

Apidogにおけるデータ受け渡しの2つのメカニズム

Apidogの自動テストでは、異なるテストステップ間でデータを渡す主な方法が2つあります。

1. 「動的値(Dynamic Values)」による前ステップデータの取得

動的値(Dynamic Value)」機能を使用すると、前の(アップストリーム)ステップの出力を後の(ダウンストリーム)ステップで直接参照できます。これにより、データを保存することなく、その場でデータを取得できます。

Apidog自動テストにおける「動的値(Dynamic Values)」による前ステップデータの取得

2. 変数を保存して再利用する

アップストリームのステップから重要なデータを抽出し、変数として保存することができます。これらの変数は、後続のどのステップでも再利用できます。

これら2つのデータ受け渡し方法を習得することは、Apidogで効率的でデータ駆動型の自動ワークフローを構築するための鍵となります。

この記事では、異なる種類のテストステップでデータを処理する方法を、データの抽出方法データの使用方法の2つの側面から説明します。これら両方を理解することで、より柔軟で連携の取れたテストワークフローを構築できるようになります。

エンドポイント応答データの抽出と使用

エンドポイント応答データの理解

自動テストでは、APIリクエストは通常、構造化されたJSON応答を返します。これは多くの場合、後続のテストステップへの入力として機能します。

他のステップタイプとは異なり、エンドポイント応答はより複雑になる傾向があり、ネストされたオブジェクトや配列が頻繁に含まれます。

エンドポイント応答からデータを抽出する方法

テストステップ間でエンドポイント応答データを抽出し、渡す主な方法は2つあります。

方法1:動的値参照

動的値(Dynamic Values)」を使用して、前のステップのデータを直接参照します。

方法2:データを変数として抽出する

エンドポイントのポストプロセッサにある「変数抽出(Extract Variables)」機能を使用して、応答から特定のフィールドを変数として抽出することもできます。

例えば、応答内の製品のidを抽出するには:

後続のステップでは、{{products_id}}を使用して簡単に参照できます。

エンドポイント応答から抽出したデータを使用する方法

API応答からデータを抽出したら(「動的値(Dynamic Values)」または「抽出された変数(Extracted Variables)」のいずれかを使用)、そのデータをダウンストリームステップでいくつかの方法で使用できます。

1. エンドポイントリクエストでデータを使用する

APIリクエストで抽出したデータを使用する

2. データベース操作でデータを使用する

API応答をデータベースクエリの入力として使用できます。どちらの方法も機能します。

SELECT * FROM products WHERE id = '{{$.1.response.body.products[0].id}}'

動的値を使用して、SQLクエリでAPI応答データを直接参照します。

SELECT * FROM products WHERE id = '{{products_id}}'

3. Forループでデータを使用する

API応答からの配列の長さに応じてステップを繰り返すには:

{{$.1.response.body.products.length}}

これにより、ループの繰り返し回数が設定されます。

Forループでデータを使用する

4. ForEachループでデータを使用する

エンドポイントから返された配列の各項目をループ処理したい場合:

動的値方式でForEachループでデータを使用する

5. スクリプトでデータを使用する

スクリプト内で前のステップのデータを使用するには、pm.variables.get()メソッドを使用します。方法は次のとおりです。

const products = pm.variables.get("$.1.response.body.products")
動的値方式でスクリプトでデータを使用する

一時変数の値を取得します。

const products = pm.variables.get("products") 

環境変数の値を取得します。

const products = pm.environment.get("products") 

グローバル変数の値を取得します。

const products = pm.globals.get("products")
💡
スクリプト内では、{{products}}のような補間構文を直接使用することはできません。代わりに、上記で述べた適切なメソッドを使用して変数の値を取得する必要があります。

データベースクエリ結果の抽出と使用

データベースデータの理解

データベースクエリステップが実行されると、オブジェクトの配列形式で構造化されたデータが返されます。たとえ1つのレコードしか返されない場合でも、それは配列でラップされます。例えば:

Apidogでのデータベースクエリ結果

エンドポイント応答とは異なり、データベースステップからのデータは動的変数を使用して直接アクセスできません。まず、値を変数に抽出する必要があります。

データベースからデータを抽出する方法

データベースステップでSQLクエリを実行すると、Apidogは応答を次のような構造化データに自動的に解析します。

[
  {
    "id": "1000",
    "title": "Title 1",
    "description": "Description for Title 1"
  }
]

その後、JSONPathを使用して特定のフィールドを抽出し、変数として保存できます。

例えば:

JSONPathを使用して特定のフィールドを抽出し、変数として保存する

データベースから抽出したデータを使用する方法

1. エンドポイントリクエストでデータを使用する

データベースクエリがIDを返し、それを変数(products_id)として保存した場合、ダウンストリームのエンドポイントリクエストで直接使用できます。

データベースから抽出したデータをエンドポイントリクエストで使用する

2. ForEachループでデータを使用する

クエリがレコードのリストを返し、それぞれを個別に処理したい場合は、配列全体をForEachループのソースとして使用できます。

前提として、データベース操作で変数を抽出する際に配列全体を保存します。例えば:

3. スクリプトでデータを使用する

抽出されたデータベース変数をスクリプトで使用するには、他の変数と同じ方法を使用します。

一時変数の値を取得します。

const products = pm.variables.get("products")

環境変数の値を取得します。

const products = pm.environment.get("products")

グローバル変数の値を取得します。

const products = pm.globals.get("products")

Forループからのデータの抽出と使用

Forループの仕組み

Forループは、特定の一連のアクションを複数回繰り返すために使用されます。定義された繰り返し回数に基づいて実行されます。

ループの固定回数を設定するか、前のステップから返された配列の長さ(.length)のような動的値を使用できます。例えば: {{$.1.response.body.products.length}}

注:データを出力する他のステップとは異なり、Forループ自体はデータを直接返しません。ループが何回実行されたかを示すインデックス値(0から始まる)のみを提供します。

Forループからデータを抽出する方法

実行プロセス中に、動的変数構文を使用して現在のループインデックスにアクセスできます:{{$.9.index}}

Forループから抽出したデータを使用する方法

1. スクリプトでデータを使用する

テストスクリプトでループ関連の情報を使用したい場合は、pm.variables.get()を使用して現在のインデックスを取得できます。

// Get the current loop index
const index = pm.variables.get("$.7.index");
スクリプトで抽出されたForループデータを使用する

2. 他のデータソースと組み合わせてデータを使用する

Forループの一般的なユースケースは、配列をループして各項目を処理するなど、以前のステップからのデータを処理することです。

// Get the array from a previous step
const products = pm.variables.get("$.1.response.body.products");

// Get the current loop index
const index = pm.variables.get("$.7.index");

// Access the current item in the array using the index
console.log(products[index]);

これにより、各ループの反復中に配列内の各項目に対してバッチ操作を実行できます。

ForEachループからのデータの抽出と使用

ForEachループの仕組み

ForEachループは、配列データのために特別に設計されています。配列内の各要素を自動的に反復処理し、同じ一連の操作を実行します。

ForEachループForループの主な違いは、ForEachループが各反復で現在の配列要素の完全なデータを自動的に抽出し、子ステップで直接アクセスできるようにすることです。

ForEachループでのデータアクセス

ForEachループ内では、システムが自動的に2つの特殊な変数を作成します。

注:数字の4は、ForEachループステップのIDを指します。実際のワークフローでは、これをプロセス内の正しいステップIDに置き換えてください。

ForEachループデータの一般的なユースケース

1. エンドポイントリクエストでデータを使用する

ForEachループは、バッチデータ操作の処理に最適です。例えば、項目の配列がある場合、配列内の各項目に対してエンドポイントリクエストを自動的に送信できます。各ループ中、同じリクエストテンプレートが再利用されますが、{{$.4.element.id}}などの異なるデータで埋められます。

2. データベース操作でデータを使用する

現在のループ項目からのデータを使用して、データベースクエリを実行したり、複数の行を挿入したりできます。

例:現在の項目のフィールドを使用してデータベースをクエリする

SELECT * FROM products WHERE id = '{{$.4.element.id}}' 

{{$.4.element.id}}は、動的値機能を使用してアクセスできます。

現在の項目から複数のフィールドをテーブルに挿入する:

INSERT INTO products (id, title) VALUES ('{{$.4.element.id}}', '{{$.4.element.title}}') 

3. スクリプトでデータを使用する

カスタムスクリプトでループからのデータをさらに処理する必要がある場合は、pm.variables.get()メソッドを使用して値を取得できます。

// Get the current element
const item = pm.variables.get("$.4.element");

// Get the current index
const index = pm.variables.get("$.4.index");

スクリプトからのデータの抽出と使用

スクリプトデータの仕組み

ワークフローの他のステップとは異なり、スクリプトは後続のステップで直接使用できる出力を自動的に生成しません。スクリプトから後のステップにデータを渡したい場合は、手動で変数に保存する必要があります。

スクリプトからデータを抽出する方法

次のように、値を異なる種類の変数に保存できます。

// Get JSON response data
// 1. From the current endpoint response
// const currentData = pm.response.json();

// 2. Or get it from a previous step using a dynamic value
const preData = pm.variables.get("$.1.response.body");

// Save to environment variables
pm.environment.set('products', preData.products);
pm.environment.set('products_id', preData.products[0].id);

// Save to global variables
pm.globals.set('products', preData.products);

// Save to temporary variables (valid only during this run)
pm.variables.set('products', preData.products);

変数が抽出され設定されると、{{variableName}}の構文を使用して後続のステップでそれらを参照できます。

スクリプトから抽出したデータを使用する方法

1. エンドポイントリクエストでデータを使用する

スクリプトで設定された変数は、ダウンストリームのエンドポイントリクエストのパラメータとして直接使用できます。例えば、スクリプトでproducts_idを保存した場合、後続のリクエストで{{products_id}}のように参照できます。

APIリクエストで抽出したデータを使用する

2. データベース操作でデータを使用する

スクリプト変数は、動的なSQLステートメントを構築するためにも使用できます。例えば:

SELECT * FROM products WHERE id = '{{products_id}}'

3. Forループでデータを使用する

スクリプトを使用してループカウントやその他の中間値を生成し、「一時変数」として保存し、Forループステップに渡すことができます。

pm.variables.set("loopCount", 5); 

その後、ループ設定で{{loopCount}}を反復回数として使用します。

4. ForEachループでデータを使用する

配列全体を変数に保存し、それをForEachループのデータソースとして使用できます。

例:

// Optionally retrieve array from a previous step using dynamic values
// const preData = pm.variables.get("$.1.response.body.products")

const preData = [{id: 1}, {id: 2}, {id: 3}];

// Save to environment variable
pm.environment.set('products', preData);

その後、ForEachループでデータソースを{{products}}に設定します。

まとめ

効率的な自動テストワークフローを構築するには、異なる種類のステップからデータを抽出し、使用する方法を理解することが不可欠です。

動的値参照変数抽出を組み合わせることで、柔軟で強力なデータ駆動型テストプロセスを設計できます。

データ受け渡しのベストプラクティス:

データの複雑さと使用頻度に基づいて適切な方法を選択することで、ワークフローの保守性と効率が向上します。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる