0 まえがき
Postman
この記事は、基本的な使用法を習得している、つまりインターフェイス関連の概念をある程度理解しており、Postman
シミュレートされたリクエストなどの基本的な操作を使用できる読者に適しています。
動作環境とバージョン:
- Windows 7 (64ビット)
- ポストマン(Chrome アプリ v5.5.3)
PS ページ UI のバージョンが異なると、一部の機能の位置が若干異なりますが、影響は大きくありません。
まず考えてみましょう、自動化されたインターフェイス テストの効果を実現したい場合、基本的なシミュレーション リクエストに対して他に何を行う必要があるでしょうか?
それを大まかに 3 つの質問にまとめます (コメント エリアにさらに補足的な提案を残していただければ幸いです)。
1. インターフェースリクエストが成功したかどうかをどのように判断するか?
2. バッチおよび定期的なインターフェイス テストを実施するにはどうすればよいですか?
3. 依存するインターフェイスの問題 (たとえば、注文するためのインターフェイスでは最初にログインが必要であるなど) にどう対処するか?
そこで、以下では主に3つのパートに分けて、この3つの問題を解決する方法を紹介します。
ここでは、ユース ケース テンプレート、計画テンプレート、レポート テンプレート、パフォーマンス チューニング、自動化チュートリアル、テスト テンプレート、履歴書テンプレート、面接スキル、Dachang からの実際のテスト質問などを含む 200G ソフトウェア テスト チュートリアル資料を提供します。自分で入手するには、以下をクリックしてください。
1 インターフェース結果判定
まず第一に、これは自動テストであるため、Postman
結果が期待を満たしているかどうかを直接判断するためのツールやコードが必ず必要になります。次に、インターフェイスのテストに関しては、一般に 2 つのアイデアがあります。
1. リクエストによって返されたものがcode
期待どおりかどうかを判断します
2. リクエストによって返されたコンテンツに予期したコンテンツ (キーワード) が含まれているかどうかを判断します。
Postman
次に、上記の問題を解決するために使用する方法を見てみましょう。
1.1 機能領域
の関連関数Postman
は非常に目立ちます。Tests
関数を使用するには、特定のプログラミング言語の基礎が必要であり、現在サポートされているスクリプト言語は ですJavaScript
。しかし、より良い点は、コンテキストや動作環境を考慮する必要がないことです。つまり、ここでは結果の論理判断のコード ブロックを完成させるだけで済みます。
また、パネルの右側にあるリボンPostman
には、よく使用されるコード テンプレートもいくつか用意されているため、 についてあまり知らなくても大きな問題にはなりません。コード記述関連については、以下で詳しく紹介します。Tests
SNIPPETS
JavaScript
1.2 スクリプト関連
まず、上図のコード部分を見てください。次の 3 つの変数responseCode
とresponseBody
が見つかります(直接使用できます)。tests
responseCode
: リクエストによって返されたステータス情報 (コードなど) が含まれます。responseBody
: インターフェース要求によって返されたデータの内容 (タイプは文字列)。tests
: キーと値のペアの形式で、テスト結果が成功したかどうかを示すために使用され、最終的に に表示されますTest Results
。- key: (例: コード 200) 結果の説明として使用できます。
- value: 値はブール値で、
ture
テストが成功したことを示し、false
テストが失敗したことを示します。
したがって、上記のコードを理解するのは難しくありません。返された結果データと結果が成功したかどうかを示す方法があれば、「インターフェイスの結果判定」の問題は基本的に解決されます。
さらに一般的に使用されるものもいくつかあります。
responseTime
: リクエストにかかった時間postman
:さらに次のようなこともできます。- 返されたデータのヘッダー情報を取得します:
`postman.getResponseHeader("")` - グローバル変数を設定します:
`postman.setGlobalVariable("variable_key", "variable_value");`
- 返されたデータのヘッダー情報を取得します:
その他の機能については、公式ドキュメントを参照してください。
あなたがテスト労働者であれば、私は有名企業と大規模工場のテストオープンのために 2022 年の内部昇進グループを設立しました。昨年、200 人以上の学生が大工場への入社を内部推薦され、最高年収は 70W+ に達しました。内部昇進チャネルに入るには、以下をクリックしてください:
1.3 コードテンプレート
Postman
機能領域で提供されているコード テンプレートSNIPPETS
は、ほとんどの状況をすでに解決できています。まず、結果の判定に関連するものをいくつか選択して説明しましょう。
ステータスコード : コードは 200
//根据返回的 Code 判断请求情况
tests["Status code is 200"] = responseCode.code === 200;
応答本文: 文字列が含まれます
//判断返回的内容中是否存在“关键字”。(tests 的 key 可修改,将不再强调)
tests["Body matches string"] = responseBody.has("这里可以改为你要判断的关键字内容");
//如上文提到的:
//判断结果中是否存在 access_token 关键字
tests["has access_token"] = responseBody.has("access_token");
応答本文: 文字列と等しい
//判断返回内容是否跟预期完全相等。
tests["Body is correct"] = responseBody === "这里可以改为你的预期内容";
レスポンスボディ:JSON値のチェック
//上文提到,responseBody 为字符串类型,支持转为 Json 格式
var jsonData = JSON.parse(responseBody);
tests["Your test name"] = jsonData.value === 100;
応答時間は 200ms 未満
//判断请求时长是否小于200ms ,具体时长按情况自定义
tests["Response time is less than 200ms"] = responseTime < 200;
単一のインターフェイスのテストを完了するには、上で説明した基本だけで十分ですが、バッチ タスクやスケジュールされたタスクがなければ、それらは無意味であることがわかっているので、続行します...
2 収集 (バッチ) テスト
インターフェイスのバッチ テストと管理を実行したい場合は、テスト対象のすべてのインターフェイスを同じコレクションに保存する必要があります。(Collections)
これは、インターフェイスを同じフォルダーに保存すると考えることができます。Postman
まず、次の手順を見てください。
上記の手順により、テスト対象のインターフェイスのセットが得られましたが、状況を単純化するために、私の側の各インターフェイスの成功条件は、それがcode
200 であるかどうかで判断されます。
tests["Status code is 200"] = responseCode.code === 200;
2.1 バッチ実行
上記の準備が完了したら、テストのためにインターフェイスのバッチ実行を開始できます。
をクリックするとRun
、新しいページが開きます。
Environment
: インターフェイスが動作する環境を切り替えるために使用されますが、ここでは気にしないので、後で説明します。Iteration
: インターフェースが実行される合計回数を設定するために使用されます。Delay
: インターフェイスの各実行間の時間間隔をミリ秒単位で設定します。Data File
: テストデータファイルをアップロードします(別途下記)
2.2 パラメータデータの変更
複数のインターフェイスを繰り返し実行する方法はすでに理解しましたが、ここで問題が発生します。現在の手順によると、インターフェイスのパラメータは実行するたびに同じになるため、100 回実行しても 1000 回実行してもあまり意味がありません。
私たちが作成したログイン関数のインターフェースを見てみましょう。
変数を使用する
これで、ログイン アカウントとパスワードのパラメーターがハードコーディングされました。つまり、何度実行しても、このアカウントを使用してテストします。では、アカウントのパスワードパラメータに他の値を使用して異常がないかテストしたい場合はどうすればよいでしょうか? (毎回手動で変更したい場合は、この部分をスキップしてください/手動で面白いです) ここでは、次のPostman
図に示すように、 での「変数」の使用方法について簡単に説明します。
変数を参照するための構文: {
{変数名}}、図からわかるように、アカウントとパスワードのフィールドのパラメーター値を変数として設定します{
{username}} 、{
{password}}
。(Send)
もちろん、これら 2 つの変数はまだ割り当てられていないため、変更後に直接クリックして実行することはできませんが、Pre-request Script
パネルで割り当て操作を実行できます。
事前リクエストスクリプト
Pre-request Script
と似ていますが、のスクリプトはリクエストの実行前に実行されるのTests
に対し、のスクリプトはリクエストの完了後に実行される点が異なります。したがって、スクリプトを使用して、次のように機能領域内の上記 2 つの変数に値を割り当てることができます。Pre-request Script
Tests
Pre-request Script
//设置全局变量
postman.setGlobalVariable("username", "test1");
postman.setGlobalVariable("password", "123456");
しかし、Pre-request Script
代入操作を使用しても問題は解決できません。この記述方法によれば、何度実行しても、テストには固定 (ハードコードされた) データが使用されるためです。もちろん、スクリプト言語であるため、より柔軟な使用方法があるため、ここでは説明しません。
テストデータセット
Data File
次に、コレクションを実行する前に、このオプションが、対応する変数に割り当てるテスト データ (ファイル) をアップロードするために使用されることについて説明します。CSV
例として次の形式のテスト データを見てみましょう。
username,password
test1,123456
test2,222222
test3,123456
test4,444444
データ形式はテーブルに似ています。最初の行は対応する変数名を表し、次の 4 行は 4 セットのアカウント パスワード データ (そのうち 2 つは正しいデータ) を表します。上記のサンプル データの内容とサフィックス名を含むファイルを保存した後、再度テストを開始して効果を確認します。実行数を 4 (4 セットのテスト データに対応) に選択し、対応するファイルを選択して実行すると、結果が実際に期待どおりであることがわかり.csv
ますCSV
。インターフェイスRequest
の実行結果は 2 回成功し 2 回失敗します。つまり、実行ごとに異なるアカウント パスワードのテスト データが割り当てられます (最新のデスクトップ クライアント バージョンでは、各リクエストの特定のリクエスト ステータスを確認できるため、ここでは詳細は説明しません)。
Json
ファイルを使用する場合、形式は次のとおりです。
[
{
"username": "test1",
"password": "123456"
},
{
"username": "test2",
"password": "222222"
},
{
"username": "test3",
"password": "123456"
},
{
"username": "test4",
"password": "444444"
}
]
2.3 通常のタスク
Postman
Monitors
テストタスクを送信し、1時間に1回のテストなど、設定したタイマーに従って実行できる(モニター)機能を提供します。具体的な操作は以下のとおりです。
3 リクエストの依存関係の問題
インターフェイスの結果判定と収集バッチ テストについて説明した後、より複雑な状況、つまり依存リクエストの問題を見てみましょう。たとえば、買い物注文インターフェイスにアクセスするにはログインが必要です。しかし、依存関係の問題のほとんどは、実際にはインターフェイス間のデータ転送の問題です。たとえば、ログイン インターフェイスを呼び出した後、識別子が返されます。そうであれば、注文インターフェイスをリクエストするときに、リクエストと一緒にパラメータを運ぶだけで済みtoken
ますtoken
。したがって、問題は次のようになります。
- 保証されたインターフェイス呼び出しシーケンス
- インターフェイス A から返されたデータを後続のインターフェイス B、C、および D に渡します。
3.1 インターフェースの実行シーケンス
まず最初に、次に説明するインターフェイスはデフォルトで同じコレクションに属していることを説明します(Collections)
。
上記で作成したインターフェイス コレクションを例として、バッチ テストの結果に注目すると、インターフェイスの実行順序が、実際にはディレクトリ内の順序 (上から下) に従っていることがわかりますRequest1 -> Request2 -> Request3
。
ここでのインターフェース名は少し誤解を招きやすいので、もう一度強調しておきます。ディレクトリ内で上から下の順に実行します (辞書のソートとは関係ありません)。
したがって、このデフォルトの実行順序を使用すると、実行する必要があるインターフェイスを最初に置くことができます。たとえば、「ログイン インターフェイス」を最初に置くことができます。
3.1.2 カスタム実行順序
もちろん、デフォルトの実行シーケンスが 1 つしかない場合、通常は複雑なビジネス ニーズを満たすことができないため、次のようなPostman
関数を提供します。これは、指定されたインターフェイスにジャンプして実行を継続することをサポートします。postman.setNextRequest("填写你要跳转的接口名")
Request1
インターフェイスが正常に実行された後は、再度実行する必要はありませんRequest2
が、インターフェイスに直接ジャンプすると、インターフェイスの機能領域で次のようなジャンプ コードを実行Request3
できます。Request1
Tests
注意すべき点がいくつかあります。
1.postman.setNextRequest()
コレクション テストを実行する場合にのみ有効になります。つまり、(Send)
インターフェイスを単独で実行する場合Request1
、関数は機能しません。
2. からの収集テストが正常に実行された後、 の後にインターフェイスがある場合、後続のインターフェイスはデフォルトの順序で実行され続けます。つまり、図のインターフェイスはRequest1 -> Request3
引き続き実行されます。3. 指定されたジャンプ インターフェイスは同じセットに属している必要があります。4.関数がスクリプト内のどこで呼び出されても、実際には現在のスクリプトの最後でのみ実行されます。たとえば、図の 2 行目と 1 行目を相互変調すると、ジャンプ関数の実行後もコードの 2 行目が実行されます。Request3
Request4
setNextRequest()
Tests
そのため、setNextRequest()
この関数を使用すると、条件に応じて不要なインターフェイスをスキップしたり、独自のロジック テストを構築したりすることができます。
3.2 データ転送
Postman
データ転送について説明する前に、でのグローバル変数の使用と環境切り替えについて説明しましょう。
3.2.1 グローバル変数
グローバル変数の概念は、実際には上記Pre-request Script
で簡単に説明しています。つまり、スクリプト コードを通じてグローバル変数を設定でき、上記のスクリプトを実行した後の効果を確認できます。
username
実行後、と の2 つの変数が正常に保存されたことがわかり、password
次のような変数参照の構文を通じて任意のインターフェイスで{
{username}}
それらを使用できるようになります。
さらに、Postman
コード内でグローバル変数を設定する方法をサポートするだけでなく、視覚的な操作もサポートします。
対応するインターフェイスに入ると、以下を直接管理できます。
3.2.2 複数環境の区別と切り替え
通常、インターフェイスはテスト バージョンとオンライン バージョン (またはそれ以上) に分かれており、それらの違いは単にULR
異なるだけである可能性があるため、グローバル変数はこの問題の解決には適していません。
パラメータの作成
上の図では、さまざまな環境用にいくつかのパラメーター「コレクション」を作成していることに気づいたかもしれません。もう一度見てみましょう。
各環境で次のようなパラメータを作成しましたhost
。
もちろん、環境パラメータはスクリプトを通じて設定することもできます。その機能は次のとおりです。
//注意,该参数只添加到你当前选择的环境的“参数集”中
postman.setEnvironmentVariable("variable_key", "variable_value");
使用して切り替える
図に示すように、環境「パラメータ セット」でのパラメータの使用はグローバル変数と一致しています。{
{host}}
異なる環境間の切り替えを次の図に示します。
3.3 依存関係の問題の解決
上記の予備知識を習得したら、それを使用してPostman
依存関係のあるインターフェイス テストを解決する方法を見てみましょう。
仮定のシナリオ
私たちのインターフェースはRequest1
ログインインターフェースであり、ログインが成功するとaccess_token
フィールドが識別子として返されます (実装されています)。次に、そのインターフェイスがRequest3
注文を行うためのインターフェイスであると仮定します。access_token
通常にアクセスするにはログインとともに返される必要があります。
一連の考え
1.より前に実行されることが保証されますRequest1
。 2.によって返された値を環境変数「parameter set」に追加します。3.リクエスト時に の値を引用するRequest3
Request1
access_token
Request3
access_token
戻り値は、特定のビジネス状況に応じて「グローバル変数」または「環境変数」に格納します。
access_token
この例の値は環境に関連しているため、ここでは格納する環境変数セットを使用することを選択します。
Postman での操作
1. 2.のコードは、カタログ内でRequest1
最初に実行されることが保証されています。Request1
Tests
if(responseCode.code === 200 && responseBody.has("access_token")){
//如果 code 为 200, 并且返回的数据中存在 access_token 关键字,则认为登录成功
tests["login"] = true;
//将返回的内容转为 json 格式,并且取到 access_token 内容,添加到环境变量中
var jsonData = JSON.parse(responseBody);
//access_token的取值方式视具体的 json 数据结构而定
postman.setEnvironmentVariable("token",jsonData.result.access_token);
//跳转到 Request3 接口
postman.setNextRequest("Request3")
}else{
tests["login"] = false;
//登录失败,可以选择跳转到对应失败后的处理接口进行测试
//postman.setNextRequest("Other Request")
}
3.インターフェースRequest3
で変数を使用しますtoken
。
> 我这边是将 `token` 放在头部信息中, 具体使用方式时接口参数规则而定。
実行して結果を確認する
収集テストを実行すると、結果が期待どおりであり、Request1
テストRequest3
が成功、Request2
スキップされ、Request4
引き続き実行されていることがわかります。終わり…