APIテスト

DevWebスクリプトは、APIパフォーマンステストの一部として使用できます。スクリプト作成時間を短縮するために、オフラインスクリプトジェネレーターを使用してSwagger APIドキュメントをJavaScript関数に変換し、読みやすく保守しやすい形式を提供できます。生成された関数は、DevWebスクリプトから呼び出すことができます。

ヒント: 次のビデオを確認します: DevWebスクリプトを使用したAPIテスト

このトピックの内容:

DevWebスクリプトを使用したAPI関数について

Swaggerは、RESTful APIを記述および文書化するために使用されるオープン仕様です。

DevWebスクリプトを使用したAPIテストを有効にするために、Swagger定義ファイル (swagger.json形式) 内のAPI呼び出しをDevWebテストから呼び出すことができる関数に変換するメソッドが提供されています。

この機能は、Swagger仕様2.0でサポートされています。

Swaggerモードを使用したswaggerApi.jsの生成

SwaggerモードでOffline Generatorを使用して、必要なファイルを生成します。swagger.jsonファイルのパスまたはURLを含む引数をオフラインジェネレーターに追加すると、自動生成されたJavaScript関数を含むJavaScriptファイルswaggerApi.jsが出力されます。

注: Swaggerモードもmain.jsファイルを生成 (または再生成) しますが、内部にAPI関数呼び出しはありません。

各関数にはパラメーターが含まれており、Swagger定義ファイル内のAPI呼び出しを表します。この関数はサーバーに接続して、API呼び出しで記述された操作を実行できます。

swaggerApi.jsを生成した後、ファイルをDevWebスクリプトのフォルダーにインポートできます。スクリプトから、必要なパラメーターを使用して、テストする関数を呼び出すことができます。実装はswaggerApi.js内にあります。関数が呼び出されると、アプリケーションでAPI呼び出しが生成され、Web要求が返されます。

HARファイルでのSwaggerモードの使用

swagger.jsonが非常に大きく、何百もの操作がある場合があり、それらすべてをテストしたくない場合があります。代わりに、関連する操作のみを含むHARファイルに基づいてスクリプトを直接生成するオプションがあります。これは、APIテストスクリプトを作成するための推奨される方法です。スクリプトを手動で編集して関数を呼び出すよりもすばやく簡単です。

Swaggerモードを使用してオフラインジェネレーターの引数にHARパス (およびswagger.jsonパスまたはURL) を追加すると、ツールは、swaggerApi.jsファイルの作成に加えて、関連する関数呼び出しを含むmain.jsファイルを生成します。

main.jsでの各関数呼び出しは、オフラインジェネレーターがHARエントリとswaggerApi.jsで生成されたJavaScript関数との間の単一の、一意の一致を見つけることで作成されます。一致がある場合は、その関数の関数呼び出しが作成されます。一致が見つからない場合、または一致が複数ある場合は、通常のWebRequest送信呼び出しが生成されます。

先頭に戻る

ペットショップのアプリケーションは、pet_swagger.jsonファイルを使用して記述されます。このJSONには、ペットショップのさまざまな操作が含まれています。

pet_swagger.jsonファイル:

以下のJSONセクションでは、operationID「addPet」を使用して、ペットをストアに追加するAPI操作を定義しています。本文に引数を含むPOST要求を使用して呼び出す必要があります。パラメーター名は「body」です。

"/pet": {
            "post": {
                "tags": [
                    "pet"
                ],
                "summary": "Add a new pet to the store",
                "description": "",
                "operationId": "addPet",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json",
                    "application/xml"
                ],
                "parameters": [
                    {
                        "in": "body",
                        "name": "body",
                        "description": "Pet object that needs to be added to the store",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/Pet"
                        }
                    }
                ],
                "responses": {
                    "405": {
                        "description": "Invalid input"
                    }
                },

swaggerApi.jsファイル:

オフラインジェネレーターがswaggerApi.jsファイルを生成すると、addPetに対応する生成された関数が含まれます。JSONファイルで使用されるbodyという名前のパラメーターと、JSONファイルのパラメーターの説明があります。

この関数は、APIを呼び出すWebRequestを作成し、要求を返します。本文では、関数はパラメーターを使用しました。

main.jsファイル:

オフラインジェネレーターがmain.jsファイルを生成すると、HARファイルから取得した値を使用して、swaggerApi.jsのaddPet関数への呼び出しが含まれます。この関数は、返されたWebRequestを使用して送信します。sendの戻り値は、変数に割り当てられたWebResponseです。

ヒント: <DevWebルートフォルダー>\examples\ フォルダーには、以下のAPIテストサンプルスクリプトが含まれています。

  • APITestingPetStore
  • APITestingAdvantageOnlineShopping

先頭に戻る

パラメーター

  • Swaggerは、関数パラメーターの次の場所を記述します。パス、ヘッダー、クエリ、フォームデータ、および本文。

    生成された関数は、swaggerファイルで操作用に定義され、生成されたWebRequest内の関数本文で使用されるパラメーターを受け入れます。たとえば、PathパラメーターがWebRequest URLで使用され、QueryパラメーターがWebRequestクエリで使用されます。

  • パラメーターのスキーマには、trueまたはfalseに等しい必須プロパティがあります。必須かどうかに関係なく、すべてのパラメーターが生成されます。オフラインジェネレーターはこのプロパティを無視します。
  • WebRequest URLでは、関数getSchemaおよびgetHost (それぞれスキーマおよびホストパラメーターを返す) が使用されます。
  • swagger.jsonにHostプロパティがない場合、生成されたgetHost関数は空の文字列を返し、スクリプトはエラーで失敗します。これを回避するために、main.jsファイルにはgetHostのオーバーライドオプションが含まれており、ホスト名を追加するように求められます。

先頭に戻る

APIテスト関数の相関

API関数呼び出しには、必要に応じて、相関の抽出オブジェクトと適用オブジェクトを含めることができます。レコードスキャンとルールスキャンが有効になっていて、相関値が見つかると、生成されたAPI関数呼び出しに値が追加されます。

相関のルールについての詳細は、動的値の相関を参照してください。

抽出オブジェクト

API関数呼び出しを生成するとき、関連する抽出オブジェクト (相関レコードまたはルールスキャンによって定義される) がmain.jsファイルに自動的に生成されます。

例:

let webRequest1 = swaggerApi.createSomething("1001", "1002", `{
          "data": [{
                  "description": "DevWeb API test1",
                  "name": "Created by Some User"
              },
      		{
                  "description": "DevWeb API test2",
                  "name": "Created by Some User"
              }
          ],
          "exceeds_total_count": false,
          "total_count": 2
      }
      `); 
    webRequest1.extractors = [
        // Source='Rule' Original value="2001"
        new load.BoundaryExtractor("test1", {
                leftBoundary: "[{\"type\":\"test\",\"id\":\"",
                rightBoundary: "\"},{\"type\":\"test\",\"id\":\"2002"
            }),
        // Source='Rule' Original value="2002"
        new load.BoundaryExtractor("test2", {
                leftBoundary: ",{\"type\":\"test\",\"id\":\"",
                rightBoundary: "\"}],\"exceeds_total_count"
            }),
    ]
    const webResponse1 = await webRequest1.send();

スクリプトで公開されている値の適用オブジェクト

main.jsに値が表示されている、公開されているAPI関数呼び出しパラメーターの場合、適用オブジェクトは単に相関値を置き換えます。

例:

関数呼び出しには、APIキーの相関値を必要とするパラメーターがあります。これは、以前のWeb応答から抽出されたものです。

let webRequest = swaggerApi.deletePet(`API_KEY_11122FFFFF`, "123");

記録スキャンまたはルールスキャンの後は次のようになります。

let webRequest = swaggerApi.deletePet(`${earlierResponse.extractors['api_key']}`, "123");

スクリプトで公開されていない属性の適用オブジェクト

API関数呼び出しを生成するとき、パラメーターに現れないためにmain.jsに公開されないWeb要求属性があります。たとえば、一部のヘッダーやクエリ文字列などです。

これらの属性に相関が必要な値がある場合、記録または記録スキャンによって直接アクセスされ、要求名を使用して、割り当てと同様にmain.jsに生成されます。次に、適切な適用オブジェクトが適切なフィールドに適用されます。

例:

 let webRequest4 = swaggerApi.addPet(`{
        "id": 10,
        "authCookie": `${webResponse2.extractors['authCookie']}`,
        "category": {
          "id": 0,
          "name": "string"
        },
        "name": "Dog",
        "photoUrls": [
          "string"
        ],
        "tags": [
          {
            "id": 0,
            "name": "string"
          }
        ],
        "status": "available"
      }`); 
    webRequest4.headers["my_session"] = `${webResponse2.extractors['SessionId']}`
    webRequest4.queryString["authCookie"] = `${webResponse2.extractors['authCookie']}`
    const webResponse4 = await webRequest4.send();

先頭に戻る

Swagger定義からのファイルの生成

次の手順では、Swaggerモードを使用してswaggerApi.jsファイルとmain.jsファイルを生成する方法について説明します。

Swaggerからファイルを生成するには、次の手順を実行します。

前提条件: Swagger仕様2.0で作成されたswagger.jsonファイルであること

  1. Swaggerで特定のAPI操作用のDevWebスクリプトを生成する場合は、HARファイルを記録して作成します (上記のHARファイルでのSwaggerモードの使用を参照)。テストするAPI呼び出しを呼び出しながら記録します。

    プロキシレコーダーまたは別の記録方法を使用します。詳細については、スクリプトの記録と生成を参照してください。

  2. コマンドラインまたはIDEから、関連する引数を使用してオフラインスクリプトジェネレーターを実行します。

    swaggerApi.js (およびAPI関数呼び出しなしのmain.js) を生成するには:

    OfflineGenerator.exe –mode=swagger <swagger.json path> <script directory path>

    main.jsファイルを再生成せずにswaggerApi.jsを生成するには:

    OfflineGenerator.exe -mode=swagger -generateScript=false <swagger.json path> <script directory path>

    HARファイル (上記の手順1で生成) を使用してswaggerApi.jsとmain.jsを生成するには:

    OfflineGenerator.exe –mode=swagger -level=pages -har=<path to har file> <swagger.json path> <script directory path>

    キー値は次のとおりです。

    -mode モードタイプ (swagger)。ソース定義ファイルの形式を示します。
    -generateScript=false

    フラグがfalseとして定義されている場合、main.jsを再生成せずに、swaggerApi.jsのAPI関数を再生成するようにDevWebに指示します。これは、main.jsの手動編集を上書きしたくない場合に便利です。

    • これは、単純なSwaggerモードにのみ関係します (HARファイルなしでJSONファイルから関数を生成する場合)。
    • main.jsが存在しない場合 (たとえば、swaggerApi.jsを初めて生成する場合)、main.jsファイルが生成されます。

    -level (任意)

    生成するスクリプトレベル: URLベースのスクリプト、またはリソースベースのスクリプトを含むページ。

    値: url (標準設定) またはpages

    -har (任意)

    スクリプトのmain.jsファイルを生成する記録されたHARファイルへのパス。

    <swagger.jsonパス> ソースswagger.jsonファイルのフルパスまたはURL。
    <スクリプトディレクトリパス> 生成されたファイルを保存するディレクトリへのフルパス。

    例:

    OfflineGenerator.exe -mode=swagger -level=pages -har=..\ScriptFolder\swagger_pet_store\mypc.ny.net.har http://mypc.ny.net:8080/v2/swagger.json ..\ScriptFolder\swagger_pet_store

    オフラインジェネレーターの使用の詳細については、オフラインスクリプトジェネレーターツールを参照してください。

先頭に戻る

関連項目: