概要
私には副業があり(無料ですが、運命です。結局のところ、十分な時間がありません)、たまたま卒業したプログラマーに仕事を探すように指示しています。能力の違いは習得した努力に反映されており、専門能力開発のギャップは認知に形成されていることがわかりました。同時に、過去2か月間の最新のソフトウェアテストリソース(ビデオチュートリアル、PDFドキュメント、インタビューの質問)も整理されています。
この情報が必要な友達は、私の公開アカウント[Sad SpicyBar]を追加して受け取ることができます。
この記事は、Postmanの基本的な使用法を習得している、つまり、インターフェイス関連の概念をある程度理解していて、シミュレーション要求などの基本的な操作にPostmanをすでに使用している読者に適しています。
作業環境とバージョン:
- ウィンドウ7(64ビット)
- Postman(Chromeアプリv5.5.3)
PSの異なるバージョンのページUIと一部の機能の場所は少し異なりますが、影響は大きくありません。
まず、考えてみましょう。自動インターフェーステストの効果を実現したい場合、基本的なシミュレーションリクエストで他に何をする必要がありますか?
私は大まかに3つの質問に要約しました(より補足的な提案についてはコメントエリアにメッセージを残してください):
- インターフェイス要求が成功したかどうかを判断する方法は?
- インターフェイスのバッチテストと定期テストを実行するにはどうすればよいですか?
- インターフェイスに依存する問題に対処するにはどうすればよいですか(たとえば、注文するためのインターフェイスを最初にログインする必要があります)。
したがって、以下は主に3つの部分に分けられ、これら3つの問題を解決する方法を紹介します。
1インターフェース結果判定
まず、自動テストであるため、Postmanツールまたはコードを使用して、結果が期待を満たしているかどうかを直接判断する必要があります。次に、インターフェイステストでは、大まかに2つのアイデアがあります。
-
リクエストによって返されたコードが期待を満たしているかどうかを判断します
-
リクエストによって返されたコンテンツに期待されるコンテンツ(キーワード)が含まれているかどうかを確認します
次に、Postmanを使用して上記の問題を解決する方法を見ていきます。
1.1機能領域
Postmanの関連機能は非常に目立ちます。テストを使用するには、特定のプログラミング言語の基盤が必要です。現在サポートされているスクリプト言語はJavaScriptです。しかし、より良い点は、コンテキストや動作環境を考慮する必要がないことです。つまり、ここで結果ロジックの判断のコードブロックを完了するだけで済みます。
また、Postmanは、テストパネルの右側にあるSNIPPETS機能領域で、一般的に使用されるコードテンプレートもいくつか提供しているため、JavaScriptについてあまり詳しくなくても大きな問題にはなりません。コードの記述については、以下で詳しく説明します。
1.2スクリプト関連
上の図のコード部分を見ると、responseCode、responseBody、tests(直接使用可能)の3つの変数が見つかります。
- responseCode:リクエストの返されたステータス情報(コードなど)が含まれます。
- responseBody:インターフェース要求に対して返されるデータコンテンツ(タイプは文字列)。
- テスト:キーと値のペアの形式で、テスト結果が成功したかどうかを示すために使用され、最終的にテスト結果に表示されます。
- キー:(コード200など)結果の説明として使用できます。
- value:値はブール値です。trueはテストに合格したことを意味し、falseはテストが失敗したことを意味します。
したがって、上記のコードを理解するのは難しいことではなく、返される結果データと結果の成功または失敗を示す方法によって、「インターフェイス結果の判断」の問題は基本的に解決されます。
より一般的に使用されるものもいくつかあります。
-
responseTime:リクエストにかかった時間の長さ
-
郵便配達員:次のようなことができます
返されたデータのヘッダー情報を取得し
postman.getResponseHeader("")
ます。グローバル変数を設定します。
postman.setGlobalVariable("variable_key", "variable_value");
1.3コードテンプレート
SNIPPETS機能領域でPostmanによって提供されたコードテンプレートは、ほとんどの状況を解決することができました。結果の判断に関連するいくつかの説明を次に示します。
ステータスコード:コードは200です
//返されたコードtests ["Status code is 200"] = responseCode.code
=== 200;に従ってリクエストステータスを判断します
応答本文:文字列が含まれています
//返されたコンテンツに「キーワード」があるかどうかを判断します。(テストのキーは変更可能であり、再度強調されることはありません)tests ["Body matchs
string"] = responseBody.has( "これは、判断したいキーワードの内容に変更できます"); //前述のとおり上記:
// access_tokenキーワードtests ["has access_token"] =
responseBody.has( "access_token");があるかどうかを確認します。
応答本文:文字列と等しい
//返されたコンテンツが期待どおりであるかどうかを判断します。tests ["Body iscorrect
" ] = responseBody === "これは期待されるコンテンツに変更できます";
応答本文:JSON値のチェック
//前述のように、responseBodyは文字列型であり、Json形式への変換をサポートしますvar jsonData =
JSON.parse(responseBody); tests ["Your test name"] = jsonData.value ===
100;
応答時間は200ms未満です
//リクエスト期間が
200ミリ秒未満かどうかを判断し、特定の期間に応じてテストをカスタマイズします["応答時間は200ミリ秒未満です"] = responseTime <200;
上記の紹介は、基本的に単一のインターフェイスのテストを完了するのに十分ですが、バッチ、タイミングタスクがない場合、これらは無意味になることがわかっているので、続行します...
2セット(バッチ)テスト
インターフェイスのバッチテストと管理を実行する場合は、テストするすべてのインターフェイスを同じコレクション(コレクション)に保存する必要があります。同じフォルダーに保存することを考えることができます。Postmanの手順を最初に見てください。
上記の手順により、テストする一連のインターフェイスを取得します。状況を単純化するために、私の側の各インターフェイスの成功または失敗の条件は、コードが200であるかどうかを判断することです。
tests [“ Status code is 200”] = responseCode.code === 200;
2.1バッチ実行
上記の準備ができたら、テスト用にインターフェイスをバッチで実行し始めることができます。
[実行]をクリックすると、新しいページが開きます。
- 環境:インターフェースが実行される環境を切り替えるために使用されます。ここでは気にせず、後で話します
- 反復:インターフェースが実行される合計回数を設定するために使用されます。
- 遅延:インターフェースの各操作間の時間間隔をミリ秒単位で設定します。
- データファイル:テストデータファイルをアップロードします(以下で別途説明します)
2.2パラメータデータの変更
複数のインターフェイスをループで複数回実行する方法はすでに理解しましたが、問題が発生しました。現在の手順によると、インターフェイスパラメータは実行するたびに同じであるため、100回または1000回実行しても時々、それは大きくないことを意味します。
私たちが書いたログイン関数インターフェースを見てみましょう:
変数を使用する
これで、ログインアカウントとパスワードのパラメーターがハードコーディングされました。つまり、アカウントを使用して、実行回数をテストします。では、アカウントのパスワードパラメータが他の値を異常に使用しているかどうかをテストしたい場合はどうなりますか?(毎回手動で変更したい場合は、この部分をスキップできます/手動で面白いです)ここでは、以下に示すように、Postmanで「変数」を使用する方法について簡単に説明します。
変数を参照するための構文:{
{変数名}}、図に示すように、アカウントフィールドとパスワードフィールドのパラメーター値を変数として設定します:{
{ユーザー名}}、{
{パスワード}}。変更後、これら2つの変数がまだ割り当てられていないため、[直接送信]をクリックすることはできませんが、[事前リクエストスクリプト]パネルで割り当て操作を実行できます。
事前リクエストスクリプト
事前リクエストスクリプトはテストに似ていますが、違いは、事前リクエストスクリプトのスクリプトはリクエストが実行される前に実行されるのに対し、テストのスクリプトはリクエストが完了した後に実行されることです。したがって、スクリプトを使用して、次のような事前リクエストスクリプト機能領域の上記の2つの変数に値を割り当てることができます:
//グローバル変数を設定しますpostman.setGlobalVariable( "username"、 "test1");
postman.setGlobalVariable( "password"、 "123456");
ただし、割り当て操作に事前要求スクリプトを使用しても問題を解決することはできません。この書き込み方法によれば、実行回数に関係なく、実際には固定(ハードコードされた)データでテストされるためです。もちろん、スクリプト言語なので、より柔軟に使用できるので、ここでは行いません。
テストデータセット
次に、データファイルについて説明します。コレクションを実行する前のこのオプションは、テストデータ(ファイル)をアップロードして、対応する変数に値を割り当てるために使用されます。例として、CSV形式のテストデータを取り上げましょう。
username,password test1,123456 test2,222222 test3,123456 test4,444444
データ形式は表に似ています。最初の行は対応する変数名を表し、次の4行は4セットのアカウントとパスワードのデータを表します(そのうち2つは正しいデータです)。上記のサンプルデータを含むファイルを保存した後.csvという名前のサフィックス、効果を確認するためにテストを再度開始します。実行回数を4(4セットのテストデータに対応)に選択し、実行する対応するCSVファイルを選択すると、結果が実際に次のようになっていることがわかります。我々は期待していた。インターフェイスリクエスト操作の結果は、2つの成功と2つの失敗です。つまり、各操作に異なるアカウントパスワードが割り当てられたテストデータです(最新のデスクトップクライアントバージョンでは、特定のリクエストをそれぞれ確認できます。ここでは説明しません)もう詳細に)。
Jsonファイルを使用する場合、形式は次のとおりです。
[
{
"username": "test1",
"password": "123456"
},
{
"username": "test2",
"password": "222222"
},
{
"username": "test3",
"password": "123456"
},
{
"username": "test4",
"password": "444444"
}
]
2.3定期的なタスク
Postmanは、テストタスクを送信し、1時間に1回など、設定されたタイマーに従って実行することをサポートするモニター機能を提供します。具体的な操作は次のとおりです。
3依存関係の問題を要求する
インターフェース結果の判断と一括バッチテストについて話した後、より複雑な状況、つまりリクエストに依存する問題を見てみましょう。たとえば、ショッピングオーダーインターフェースにアクセスするにはログインが必要です。ただし、依存関係の問題のほとんどは、基本的にインターフェイス間のデータ転送の問題です。たとえば、ログインインターフェイスを呼び出した後、識別子が返されます。トークンの場合は、注文インターフェイスを要求するときにトークンパラメータを指定するだけで済みます。したがって、質問は次のようになります。
- インターフェイスの呼び出し順序を確認する
- インターフェイスAから返されたデータを後続のインターフェイスB、C、Dに渡します
3.1インターフェース実行シーケンス
まず、以下で説明するすべてのインターフェイスがデフォルトで同じコレクションに属していることを説明します。
上で作成したインターフェイスコレクションの例を見てください。バッチテストの結果に注意を払うと、インターフェイスの実行順序が実際にはこのディレクトリ内の順序(上から下)になっていることがわかります。 Request1-> Request2-> Request3。
ここでのインターフェイス名は少し誤解を招く可能性があるため、もう一度強調したいと思い
ます。ディレクトリの上位から下位の順序で実行します(辞書の順序とは関係ありません)。したがって、このデフォルトの実行順序では、次のようになります。実行する必要のあるインターフェイスに優先順位を付けることができます。たとえば、「ログインインターフェイス」を最初に配置するなど、前面に配置するだけです。
3.1.2カスタム実行順序
もちろん、デフォルトの実行順序しかない場合、通常は複雑なビジネスニーズを満たすことができないため、Postmanは次の関数を提供します:postman.setNextRequest(「ジャンプ先のインターフェイス名を入力」)指定したインターフェイスに実行を続行します。次に例を示します。
Request1インターフェースを正常に実行した後、Request2を実行する必要はありませんが、Request3に直接ジャンプします。次に、Request1インターフェースのテスト機能領域で次のようなジャンプコードを実行できます。
ここで注意すべきいくつかのこと:
-
postman.setNextRequest()は、セットテストを実行する場合にのみ有効になります。つまり、(送信)インターフェイスRequest1を単独で実行すると、関数は機能しません。
-
Request1-> Request3から収集テストを正常に実行すると、Request3の後にインターフェイスがある場合、次のインターフェイスはデフォルトの順序で引き続き実行されます。つまり、図のインターフェイスRequest4は引き続き実行されます。
-
指定されたジャンプインターフェイスは、同じセットに属している必要があります。
-
TestsスクリプトのどこでsetNextRequest()関数が呼び出されても、現在のスクリプトの最後でのみ実行されます。たとえば、図の2行目と1行目を相互変調した後でも、ジャンプ関数を実行した後も2行目のコードが実行されます。
したがって、setNextRequest()関数を使用すると、条件に応じて不要なインターフェイスをスキップしたり、独自のロジックテストを作成したりできます。
3.2データ転送
データ転送について説明する前に、Postmanでのグローバル変数の使用と環境切り替えについて説明しましょう。
3.2.1グローバル変数
グローバル変数の概念は、上記のプレリクエストスクリプトについて説明したときに実際に簡単に説明されています。つまり、スクリプトコードを使用してグローバル変数を設定できます。上記のスクリプトを実行した場合の効果を確認できます。
実行後、ユーザー名とパスワードの変数が正常に保存されたことがわかり ます。そのため、{ {username}}などの変数参照構文を使用して任意のインターフェイスで使用でき ます。
さらに、Postmanは、コードがグローバル変数を設定する方法をサポートするだけでなく、視覚的な操作もサポートします。
対応するインターフェースに入った後、直接管理することができます:
3.2.2マルチ環境の差別化と切り替え
通常の状況では、インターフェイスはテストバージョンとオンラインバージョン(またはそれ以上)に分割され、それらの違いはULRでのみ異なる可能性があるため、グローバル変数はこの問題の解決には適していません。
パラメータの作成
上の写真で、さまざまな環境用にいくつかのパラメータ「セット」をすでに作成していることに気付いたかもしれません。見てみましょう。
次のようなホストパラメータを各環境で作成しました。
もちろん、環境パラメータはスクリプトを使用して設定することもできます。機能は次のとおりです。
//このパラメータは、現在選択されている環境の「パラメータセット」にのみ追加されることに注意してください
postman.setEnvironmentVariable( "variable_key"、 "variable_value");
使用と切り替え
環境「パラメータセット」のパラメータは、図{ {host}}に示すように、グローバル変数と同じ方法で使用され ます。異なる環境間の切り替えを次の図に示します。
3.3依存関係の問題を解決する
上記の前提知識を習得した後、Postmanを使用して依存関係のあるインターフェイステストを解決する方法を学び始めました。
What-ifシナリオ
インターフェイスRequest1はログインインターフェイスであり、ログインに成功すると、access_tokenフィールドが識別子(実装済み)として返されます。次に、インターフェースRequest3が注文を行うためのインターフェースであり、正常にアクセスするには、ログインによって返されたaccess_tokenを運ぶ必要があるとします。
アイデア
- Request1がRequest3の前に実行されていることを確認してください
- Request1から返されたaccess_tokenの値を環境変数「ParameterSet」に追加します。
- Request3は、リクエスト時のaccess_tokenの値を参照します
戻り値は、特定のビジネス状況に応じて「グローバル変数」または「環境変数」に格納されます。この例で
は、access_tokenの値は環境に関連しているため、ここでは環境変数セットストレージを使用することにします。
Postmanでの操作
- 私たちのカタログは、Request1インターフェースの優先実行を保証しています
- Request1のテストのコード:
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")
}
- インターフェイスRequest3で変数トークンを使用します。
私はここに
token
ヘッダー情報を置くことです、特定の使用があり得るインターフェースパラメータルール。
結果を実行して表示する
セットテストを実行すると、結果が期待どおりであり、Request1とRequest3がテストに合格し、Request2がスキップされ、Request4が引き続き実行されていることがわかります。完了...
最後に:メリット
テクノロジー業界では、技術スキルを向上させ、自動化プロジェクトでの実践的な経験を充実させる必要があります。これは、今後数年間のキャリア計画とテストテクノロジーの深さに非常に役立ちます。
ゴールデン9日とシルバー10日の面接シーズン、転職シーズンでは、面接の質問を整理することが長年の私の習慣になっています!以下は、近年の私のコレクションと並べ替えです。全体は[ソフトウェアテスト]を中心に構成されています。メインコンテンツには、Python自動化テストの独占ビデオ、Python自動化の詳細、インタビューの質問のフルセット、その他の知識コンテンツが含まれます。
8kの給料を受け取ることを恥じないでください。2万を超える給料を受け取ったからといって自己満足しないでください。30〜45の給与を受け取ったからといって自己満足しないでください。人生はそのわずかな給料を稼ぐことではありません、あなたが必要とするのはキャリアを開くことです。
あなたと私が会い、あなたが何かを見つけることができますように!WeChatパブリックアカウントをフォローすることを歓迎します:[Sad Spicy Article] 216ページのソフトウェアテストエンジニアのインタビューブックを無料で受け取ります。そして、対応するビデオ学習チュートリアルは無料で共有できます!
良い記事の推奨事項:
小さな会社から大きな工場への出発について話して、私は何を正しくしましたか?