postmanの変数と組み込みスクリプトは、インターフェースの前処理と応答アサーションを実装します
前回のチャット「Postmanで遊ぶ:基本」では、Postmanツールの主な機能といくつかの基本的な使用法を紹介しました。実際、Postmanは現在、最も広く使用されているインターフェーステストツールです。適切に相互作用するUIインターフェースを提供し、基本的なhttpプロトコル認証、ヘッダー、本文の設定、および要求の送信や応答の分析などの基本的な機能を完了するだけでなく、非常に豊富なテスト支援機能を備えています。この記事では、Postmanの高度なスクリプト機能の詳細を紹介します。
郵便配達員の変数
インターフェイステストツールでは、変数はインターフェイスメッセージの再利用と柔軟なマッチングにとって非常に重要です。プロのインターフェイステストツールとして、変数のサポートは必須です。
また、Postmanは豊富な変数サポートを提供します。Postmanでは、スコープが異なる5つの変数タイプが定義されており、変数の使用と管理をより柔軟に行うことができます。次の図は、さまざまなタイプの変数の公式スコープを示しています。
スコープは外側から内側に向かって徐々に小さくなり、実効優先度が高くなります。つまり、同じ変数名が存在する場合は、内部変数タイプの変数が優先されます。以下では、例を組み合わせて、これらの変数タイプの範囲を示します。
グローバル変数
グローバル変数はグローバル変数であり、スコープが最大の変数タイプです。グローバル変数を設定すると、Postmanツールで変数を使用できるすべての場所で有効になります。
Postmanツールのグローバル変数の設定を見てみましょう。ツールの右上隅にある環境管理インターフェイスを開きます。
グローバル変数管理を選択します。
グローバル変数を追加します。
この例では、値1のグローバル変数名を設定します。Postmanでは、形式のように、変数を表すために二重中括弧が使用されます {
{ variable }}
。例としてGithubAPIを取り上げます。たとえば、ユーザー名が変数名の値であるユーザー情報を取得します。
https://api.github.com/users/ { {name}}
URLに二重中括弧を入力すると、必要な変数タイプが自動的に考慮されます。
リクエストを送信した後、Postmanの応答領域を確認すると、ユーザー名1のユーザー情報を取得したことがわかります。
コレクションとコレクション変数
別の変数タイプのコレクション変数を見てみましょう。まず、コレクションの概念を理解します。Collectionは、Postmanのインターフェイスを整理するためのコレクションユニットであり、CollectionはPostmanの構成ストレージの基本ユニットでもあります。コレクションは、ソフトウェアテストにおける一連のテストケースの概念と考えることができます。
コレクション変数は、スコープがコレクション上にある変数のタイプです。このような変数は、変数が設定されているコレクションでのみ有効になります。設定方法:[コレクションの編集]を選択します
コレクション変数を変数ページに追加します。この例では、nameという名前の変数をGithubコレクションに追加します。
上記の例のユーザーインターフェイスをGithubコレクションに保存します(コレクションの下に別のサブディレクトリを作成できます。ディレクトリはディレクトリレベルの変数の設定をサポートしていないことに注意してください。サブディレクトリ内のコレクション変数のインターフェイスは引き続き有効です。) 、このインターフェースをもう一度送信しましょう。
この時点で、設定したCollection変数が有効になり、名前2のユーザー情報が取得されていることがわかります。このとき、1という名前のグローバル変数も設定していることに注意してください。コレクション変数の優先度がグローバル変数の優先度よりも高いことがわかります。
環境と環境変数
環境はPostmanで非常に便利な概念です。ソフトウェアテストを行った学生は、実際の作業でさまざまなソフトウェア環境にさらされることを知っています。テストしたシステムのさまざまな動作シナリオに対応します。たとえば、一般的なインターネット企業の研究開発環境は次のとおりです。
- 開発環境
- 統合環境(共同デバッグ環境)
- システムテスト環境
- パイロット生産環境
- 本番環境
- パフォーマンステスト環境
- 安全なテスト環境
多くの場合、環境が異なれば、アクセス方法、ネットワークトポロジ、アクセス権、およびハードウェア構成に大きな違いがあります。環境の概念はPostmanで導入され、環境構成のグループは環境変数を介して管理されます。これは、異なる環境を切り替えるのに便利です。
環境管理インターフェースでは、環境およびその環境に対応する関連変数を追加できます。この例では、GitChat環境を追加し、名前= 3の環境変数を設定します。
環境を設定した後、ユーザーインターフェイスインターフェイスで対応するGitChat環境を選択し、リクエストを再送信します。環境変数が有効になり、名前が3のユーザー情報が取得されていることがわかります。また、この時点で、環境変数の優先度がコレクションの優先度よりも高いことがわかります。
データ変数
Postmanのもう1つの変数タイプはデータ変数です。データ変数はPostmanRunnerでのみ使用できます。つまり、ランナーの実行時に有効になります。データ変数は、インターフェイステスト用の複数のテストデータセットを提供し、 PostmanBatchデータ検証機能のインターフェイス。データ変数を使用するには、次の図に示すようにPostman Runnerを開き、データ変数定義ファイルを選択してデータ変数ファイルをロードします。
データ変数はjsonまたはtxt / csvデータ形式をサポートし、json定義形式は次のとおりです。
txt / csvの形式は次のとおりです。
ランナーインターフェイスでは、次のように、プレビューを通じて実行時にさまざまな反復でロードされた変数の値を表示できます:
この例では、[変数の実行]をクリックすると3つの異なる反復が実行されます。Postmanコンソールで実行ログを表示すると、データ変数で定義された対応する変数値が毎回使用されていることがわかります。同様に、環境を選択しますが、ランナーの実行中はデータ変数の優先度が高いことがわかります。
ローカル変数
ローカル変数は、Postmanの公式ドキュメントでは明確に定義されていません。一般に、PostmanスクリプトでサポートされているJS変数として理解できます。そのスコープはスクリプトでのみ有効になります。現時点では、Postmanインターフェイスで参照されている{ {variable}}はLocal変数の値を取得しません。 。
スクリプトで直接引用される変数名はローカル変数になり、他のデータ型はPostmanに対応するvalueステートメントを介して取得されます。
たとえば、Pre-Requestで次のスクリプトを定義して実行します。
次のようにコンソールで結果を確認してください。実行されるたびに、実行前スクリプトでさまざまな変数の現在の値を明確に確認できます。
上記の例から、Postmanはさまざまなインターフェイススコープに対して豊富な変数タイプをサポートしていることがわかります。そのため、変数関数を適用する際の柔軟性が高まります。
Postmanスクリプトとその実行順序
Postmanは、豊富な変数関数をサポートするだけでなく、強力なスクリプト関数もサポートしています。テスターは、インターフェイステストを実行するときに、スクリプトを使用してインターフェイステストロジックを動的にカスタマイズし、変数を組み合わせていくつかの複雑なシナリオを実現できます。
Postmanのスクリプト関数はNode.js言語に基づいています。Node.jsの成熟した構文と豊富な拡張ライブラリは、Postmanに優れた柔軟性と強力な拡張機能を提供します。
Postmanでは、次の図に示すように、インターフェイスが送信される前と応答が受信された後に、それぞれ事前要求スクリプトとテストスクリプトに対応するテストスクリプトを実行できます。
たとえば、前の記事で変数を紹介した例は、実際には事前リクエストスクリプトです。
インターフェイス自体に加えて、事前リクエストとテストスクリプトを設定できます。[コレクション]の下の[コレクションとフォルダー]を編集すると、コレクションとフォルダーの両方が事前リクエストとテストスクリプトの設定もサポートしていることがわかります。これらのタイプのスクリプトの実行の優先順位または順序は何ですか?次の図は、さまざまな場所でのこれらのスクリプトの呼び出し実行シーケンスを示しています。
TestNGやJunitなどのテストフレームワークに精通している学生は、これらのテストフレームワークにも同様のランタイムの概念、つまりセットアップメソッドとティアダウンメソッドがあり、ケース、クラス、スイートなどのレベルもあることを知っておく必要があります。ただし、これらの異なるレベルのメソッドはペアで表示されます。つまり、ケースのセットアップとティアダウンは、ケースの実行の前後に実行されます。Postman's Scriptの実行順序は、これとは少し異なり、ペアで表示されるのではなく、階層順に配置されています。違いを理解するために写真を参照してください。
自分で実行順序を確認し、コレクション、フォルダー、フォルダーの下のリクエストで、次のような関連するスクリプトを定義することもできます。
実行し、コンソール出力を確認します 。Postmanのさまざまなスクリプトの実行順序が前のスクリプトと同じである ことがわかります。
Postmanスクリプト-PreRequest
Pre-requestスクリプトは、その名前が示すように、JUnitやTestNGなどのテストフレームワークのSetupメソッドと同様に、インターフェイスメッセージが送信される前に実際にいくつかの前処理アクションを実行します。Pre-Scriptスクリプトを使用すると、変数の値を調整したり、一部の動的パラメーターに対して特別な処理を実行したりするなど、インターフェイス要求を送信する前に動的処理を必要とするいくつかのアクションを完了することができます。
GitHub APIの例を見て、Pre-Scriptスクリプトの主な役割を見てみましょう。(GitHub APIに関する具体的な手順については、前回のチャット「Postmanで遊ぶ:基本」で私の紹介を最初に読むことができます )
GitHub APIで頻繁に使用されるインターフェースは、クエリインターフェースです。
公式のGitHubAPI Webサイトの定義によると、リポジトリをクエリするためのインターフェイスは次のように定義されています。
GET / search / repository
パラメータqはメインのクエリパラメータです。具体的な定義については、https://help.github.com/articles/searching-for-repositories/を参照してください。
たとえば、指定された日付2018-11-11以降に作成され、キーワードautomationを含むリポジトリ情報をクエリするとします。 GitHubには7,000を超えるそのようなリポジトリがあることがわかります。
この例では、クエリ条件に日付パラメータが含まれているため、実際のテスト作業シナリオでは、現在の日付に従って1年前をクエリパラメータ値として使用するなど、日付が動的に生成されることを期待することがよくあります。パラメータを調整する必要があります。いくつかの前処理を実行します。これがPre-Scriptの出番です。
このとき、最初に作成した環境変数を設定し、次にpre-scriptスクリプトで日付を動的に前処理して、動的な日付設定の目的を達成できます。
図のようにPostmanで実行し、現在の日付から1年後に作成されたリポジトリの情報を取得します。
Pre-Scriptでは、前処理は主にPostmanの変数に関連しているため、Postmanの変数フィールドのいくつかのカプセル化メソッドが主に使用されます。
-
pm.globals.has(variableName:String)
グローバル変数があるかどうか
-
pm.globals.get(variableName:String)
グローバル変数を取得する
-
pm.globals.set(variableName:String、variableValue:String)
グローバル変数を設定する
-
pm.globals.unset(variableName:String)
現在のグローバル変数設定をキャンセルします
-
pm.globals.clear()
グローバル変数をクリアする
-
pm.environment.has(variableName:String)
環境変数があるかどうか
-
pm.environment.get(variableName:String)
環境変数を取得する
-
pm.environment.set(variableName:String、variableValue:String)
環境変数を設定する
-
pm.environment.unset(variableName:String)
現在の環境変数設定をキャンセルします
-
pm.environment.clear()
環境変数をクリアする
-
pm.variables.get(variableName:String)
変数名に基づいて変数を取得します
-
pm.sendRequest()
リクエストを送信
Postmanスクリプト-テストスクリプト
Postmanのテストスクリプトは、Postmanのもう1つの優れた機能です。テストスクリプトでは、Postmanは、JSスクリプトの言語の柔軟性と組み合わせて、多くの豊富な検証ロジックをカプセル化し、テスターに判断を下します。インターフェイスのチェックサム応答処理は非常に便利です。 。
以下では、テストスクリプトにカプセル化されたいくつかの主要な検証方法に焦点を当てます。
インターフェイスの応答ステータスコードを確認する
インターフェイスの応答ステータスコードの検証は、インターフェイスのテストと検証の一般的な方法です。ステータスコードの詳細については、以前のチャット「Playing with Postman:Basics」を参照してください 。Postman でのインターフェイス検証コード検証のコードを見てみましょう。
または、検証にサードパーティの検証ライブラリchaijsのexpectメソッドを使用できます。Chaijsは、ビヘイビア駆動開発(BDD)記述方法に従って、一般的に使用される検証方法をカプセル化しました。これにより、検証コードの記述がはるかに簡単になります。
または、Postmanを直接使用して、リターンステータスコードのカプセル化方法を判断することもできます。
一般的な返品ステータスの確認方法は、Postmanに直接カプセル化されています。
-
pm.response.to.be.info
1XX情報のステータスコードを確認してください
-
pm.response.to.be.success
2XX成功ステータスコードを確認する
-
pm.response.to.be.redirection
3XXリダイレクトステータスコードを確認する
-
pm.response.to.be.clientError
4XXクライアントのエラーステータスコードを確認する
-
pm.response.to.be.serverError
5XXサーバーのエラーステータスコードを確認する
-
pm.response.to.be.error
4XXまたは5XXエラーステータスコードを確認します
-
pm.response.to.be.ok
200をチェックしてOKリターン
-
pm.response.to.be.accepted
ステータスコード202の受け入れと返却を確認します
-
pm.response.to.be.badRequest
確認ステータスコード400のリクエストメッセージが間違っています
-
pm.response.to.be.unauthorized
ステータスコード401の認証エラーを確認します
-
pm.response.to.be.forbidden
ステータスコード403を確認するためにアクセスが制限されています
-
pm.response.to.be.notFound
ステータスコード404のリソースにエラーがないことを確認します
-
pm.response.to.be.rateLimited
ステータスコード429のアクセス周波数制限エラーを確認してください
応答時間を確認する
戻りコードの検証に加えて、私たちが頻繁に検証する応答インジケーターは応答時間です。Postmanによる応答時間の検証も非常に簡単です
メッセージの内容を確認する
インターフェイスから返されるコンテンツの検証は、ビジネスロジックの正しさを判断するために必要な手段です。我々ができることを応答メッセージのヘッダ又はメッセージ本文の内容 pm.response.header
、または pm.response.text
、 pm.response.json
取得されました。対応する検証コードでは、取得した内容に基づいて、応答の正しさをさらに判断することができます。
Postmanで上記の検証を実行すると、応答のテスト結果で検証結果を確認できます。
Postmanスクリプトとインターフェイスの関連付け
インターフェイステストで頻繁に発生する状況は、使用する現在のテストインターフェイスの入力として、別のインターフェイスの応答から特定の値を取得する必要があることです。PostmanのPre-ScriptおよびTestスクリプトと変数関数を組み合わせることで、コンテンツの取得とパラメーターの転送のシーンを簡単に完了することができます。
例として、次のシナリオを取り上げます。
Junit5リポジトリのインターフェース情報からリポジトリの作成時刻を取得し、この時間以降に作成されたJunit5という単語を含むすべてのリポジトリの情報を照会して、リポジトリの数が1000を超えているかどうかを判別します。
方法1
- 作成した環境変数を設定します。
- GetRepoのテストスクリプトでJunit5リポジトリの作成時間を取得して、リポジトリインターフェイスを取得します。
- 取得した作成時間を、テストスクリプトで作成した環境変数に割り当てます。
- クエリリポジトリインターフェイスで作成された環境変数を使用します。
- チェックコードを追加して、クエリリポジトリインターフェイスで返される数量を決定します。
- これらの2つのインターフェースは、関連する実行を完了するためにRunnerエグゼキューターを介して順番に実行されます。
図に示すように:
ランナーエグゼキュータで結果を実行します
方法2
メソッド1では、環境変数を使用してパラメーターを渡します。このメソッドは、ランナーエグゼキューターのインターフェイスの実行順序に依存して、SearchRepoインターフェイスの前にGetRepoインターフェイスが実行されるようにする必要があります。
Postmanpm.sendRequest
が提供するリクエスト送信方法を使用して、事前リクエストを直接送信し 、SearchRepoの事前スクリプトスクリプトのパラメーターを取得することもできます。
現時点では、同じ結果を得るためにランナーエグゼキューターを使用してSearchRepoインターフェースを直接実行する必要はありません。
Postmanスクリプトコードの再利用
Postmanは、プロのコード編集IDEではなくインターフェイステストツールとして、スクリプトの再利用、コードスライス、モジュール定義などの機能を提供していません。しかし、Postmanの強力な変数とjs構文の適切なサポートの助けを借りて、コードの再利用を柔軟に実現できます。
一般的に使用されるコードスニペットをグローバル変数に保存し、必要に応じてこのグローバル変数を直接呼び出すことができます。
たとえば、返されたレポの数が1000を超えているかどうかを判断するための上記のチェックコードは次のとおりです。
これをグローバル変数checkRepoCountに設定し、呼び出す必要がある次のコードに置き換えます。
Postmanに示されているように:
Postmanスクリプト-サードパーティライブラリと組み合わせた複雑なシナリオケース
インターフェイススクリプトの記述を容易にするために、Postmanには豊富なサードパーティライブラリのサポートが組み込まれており、詳細なリストは公式ドキュメントに記載されています。
前述のBDD検証ライブラリchaiに加えて、サードパーティの時間処理ライブラリモーメントを組み合わせて、比較的複雑なシナリオケースの実装を完了しましょう。
関連するインターフェースは次のとおりです。
- クエリインターフェイス、クエリキーワードjunit5、星の数> 1、作成時間から6か月以内、星の数の降順でクエリ
/ search / repository?q = junit5 + stars:> 1 + created:> { {created}}&sort = stars
- リポジトリが開始されたかどうかを照会します
GET / user / starred /:owner /:repo
204はスターに戻され、スターでない場合は404が返されます
- スターレポ操作を実行します
PUT / user / starred /:owner /:repo
成功した場合は204を返します
クエリリポジトリインターフェイスのPre-Scriptスクリプトにイベント処理ライブラリmomentを導入すると、モーメントライブラリはjs自体のdateメソッドよりも日付の処理に柔軟性があることがわかります。減算メソッドを使用すると、日付を簡単に取得できます。考慮せずに6か月前。コードは次のとおりです。
クエリリポジトリインターフェイスのテストスクリプトにチェックサムフォローアップロジックコードを記述します。
Postmanでの実行効果は次のとおりです。
結論とプレビュー
上記は、Postmanスクリプトの高度な使用法の概要です。簡単に要約すると:
-
Postmanは、異なるスコープに対応する5つの異なる変数タイプを提供します。これらの変数を柔軟に使用することで、動的マッチング、パラメーター転送、コードの再利用などのシナリオを実現できます。
-
Postmanは、Collection、Folder、およびインターフェイス自体の3つのレイヤー(Pre-ScriptとTest)に2つのスクリプトサンドボックスを提供します。Pre-Scriptはインターフェイス要求の前に実行され、Testはインターフェイス応答の後に実行されます。3レベルのオブジェクトの実行順序が異なることに注意してください。
-
PostmanスクリプトはNode.jsに基づいており、豊富なサードパーティライブラリのサポートが組み込まれています。また、Postman自体も多くの上位レベルのメソッドをカプセル化しています 。Postmanの公式サンドボックスメソッドリファレンスを参照できます。
したがって、Postmanは、豊富な変数と強力なjsスクリプトのサポートを通じて、インターフェイステストのいくつかの複雑なシナリオをより適切に完了するのに柔軟に役立ちます。
現在の2つのチャットは、主に手動インターフェイステストでPostmanの主な機能と使用スキルを紹介していますが、Postmanは実際には自動テストに簡単に適用できます。次のチャット「Playingwith Postman:Automation」に引き続き注目してください。私たちは一緒に学びます:
- Postmanのバッチ実行ツールRunnerの詳細な説明
- Postmanはインターフェースのフロー制御を実装します
- Postmanのコマンドライン自動化ツールNewManの詳細
- 継続的インテグレーションツールのJenkinsと組み合わせて、Postmanインターフェイススクリプトの自動スケジューリングと実行を実現します