Postman 自動インターフェーステストの実践

Postman 自動インターフェーステストの実践

背景説明

インターフェースのテストに postman を使用するプロジェクトがあります。インターフェースに必要なパラメータは次のとおりです。

  • appid: アプリケーション識別子;
  • sign: リクエスト署名。HMACSHA1 暗号化アルゴリズムを使用して計算する必要があります。署名文字列は次のとおりです: {appid}${url}${stamp};
  • スタンプ: これはタイムスタンプです。
  • オプション: ビジネス パラメーター。

問題は、Postman がリクエストを開始するときに、パラメータに基づいて署名を動的に構築する方法です。

Postman スクリプト ライブラリでは、CryptoJS は HMACSHA1 や署名アルゴリズムを含むさまざまなアルゴリズムの暗号化をサポートしています。

難しいのは、URL 内のパス パラメータを取得することです。リクエストが開始されると、パス値が固定されます。自動テストを実行する必要がある場合、パス値を取得するにはどうすればよいでしょうか。

GETリクエストの作成

ここでは、postman の基本的な使い方は紹介しません。まず、URL にさまざまな動的パラメータが設定された GET リクエストを作成します。

{ {変数名}}: Postman が環境変数を参照するための構文。

{ {$guid}}: GUID 値を取得するために使用される Postman 定義済み環境変数。

写真

事前リクエストスクリプトで署名を作成する

事前リクエスト スクリプトは、リクエストが送信される前に実行される JavaScript 実行環境です。js として使用するだけですが、一部の js ライブラリではサポートされていません。

次のステップは、署名を動的に取得することです

1. appid 環境変数に設定された固定値。

2. スタンプのタイムスタンプを取得します。

//Unix 時間を取得します。getUnixTime: function(){ return Math.round(new Date().getTime()/1000);
}

3. URL 値は request.url を通じて取得でき、その後パスを解析できます。

// URL のパス部分を取得します getUrlRelativePath:function(url){ var arrUrl = url.split("//");
    var start = arrUrl[1].indexOf("/");
    var end=arrUrl[1].indexOf("?");
    var relUrl = arrUrl[1].substring(start,end); //stop は省略され、start から end までのすべての文字がインターセプトされます console.log(relUrl); return relUrl;
}

4. 署名文字列を作成し、秘密鍵を使用して暗号化します。

Postman が提供する暗号化アルゴリズム ライブラリは、すべてをサポートしていない可能性があり、バックエンドと署名を交換する必要がある場合もあります。

var ホスト = pm.environment.get("ホスト"); var テキスト = encodeURIComponent(プレーン);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) { var json=response.json(); //署名には + などの特殊文字が含まれており、URL エンコードする必要があります pm.environment.set("sign",encodeURIComponent(json.result));
});

署名文字列は URL エンコードされることが望ましいです。

レガシー問題: バックエンドから署名を交換するときに、最初に文字列 responsejson() が返されますが、解析できません。

5. evalを使用して、定義された変数postmanUtilをグローバル変数に挿入し、呼び出します。

環境.postmanUtil を評価します。postmanUtil.setLsdzSign();

結果は以下のようになります。

写真

コードは次のとおりです。

var postmanUtil={ // Unix 時間を取得します getUnixTime:function(){ return Math.round(new Date().getTime()/1000);
  }, // URL のパス部分を取得します getUrlRelativePath:function(url){ var arrUrl = url.split("//");
    var start = arrUrl[1].indexOf("/");
    var end=arrUrl[1].indexOf("?");
    var relUrl = arrUrl[1].substring(start,end); //stopは省略され、startからendまでのすべての文字がインターセプトされます console.log(relUrl); return relUrl;
  }, //署名 setLsdzSign:function(){ var appid=pm.environment.get("appid"); var sercret=pm.environment.get("appsercret"); //タイムスタンプ var time=postmanUtil.getUnixTime();
       pm.environment.set("stamp", time); //アドレスは現在のアドレスのパス部分を取得しますvar path= postmanUtil.getUrlRelativePath(request.url); console.log(path); var url=path; var plain=appid+"$"+url.toLowerCase()+"$"+time; var hmac = CryptoJS.HmacSHA1(plain, sercret).toString(CryptoJS.enc.Base64); //署名を取得します。CryptoJS.HmacSHA1 は署名アルゴリズムを満たすことができないため、バックグラウンドからのみ取得できますvar host=pm.environment.get("host"); var text=encodeURIComponent(plain);
        pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) { var json=response.json(); //署名には + などの特殊文字が含まれており、URL エンコードする必要があります pm.environment.set("sign",encodeURIComponent(json.result));
        });
  }
}環境.postmanUtilを評価します。
postmanUtil.setLsdzSign();

スクリプトは環境変数に書き込まれます

上記のコードをPre-request Scriptに記述します。インターフェースが1つであればそのままでも大丈夫です。インターフェースが複数ある場合でも、1つコピーするだけです。

スクリプトを変更する必要がある場合、問題が発生します。変更するには、各リクエストの事前リクエスト スクリプト ウィンドウに移動する必要があります。この問題を解決するにはどうすればよいでしょうか?

これは、次のように ENVIRONMENT で postmanUtil を定義することで解決できます。

写真

実際には、postmanUtil を環境変数に設定するだけです。他の変更はありません。環境変数の値を維持するだけで、1 つずつ変更する必要はありません。

事前リクエスト スクリプト コードを見ると、はるかに単純です。

写真

Postmanコンソールの使い方

環境変数が正常に取得されたかどうかわからない場合や、変数の値を表示したい場合、Postman には非常に便利なコンソール ビューも用意されています。[表示] メニューの [Postman コンソールを表示] を選択すると、次のコンソールが開きます。

写真

図はconsole.log(sercret)とsendRequest()の結果を示しています。

コレクションランナー自動APIテスト

インターフェースのテストケースを作成する

HTMLを返す結果については、テスト本体に特定の値が含まれていれば合格です。

写真

返される Json 結果については、コードが 0 である限り渡されます。

写真

ウィンドウの右側によく使われるスクリプトのショートカット操作があります。選択することで生成できます。とても便利です。

自動インターフェーステストを選択して実行する

ホームページの左上にあるランナーをクリックして入り、以前に構築したインターフェースを選択し、環境を選択して、xxx​​インターフェースの実行をクリックしてスクリプトテストを実行します。

写真

テスト結果

結果 2 インターフェースがスケジュールされた結果を正常に返していることがわかります。

ここに画像の説明を挿入

Postman自動インターフェーステストの実践に関するこの記事はこれで終わりです。Postman自動インターフェーステストに関するより関連性の高いコンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Postman テストインターフェースでのさまざまな種類の値転送の実装
  • 関連するテストメソッドのステップを実行するためのPostmanインターフェース
  • スクリプト テスト Postman クイック エクスポート Python インターフェイス テスト プロセスの例
  • Springboot の複数ファイルアップロードでは、Postman を使用して複数ファイルアップロードインターフェースをテストします。
  • Postman を使用してインターフェースをテストする方法 (ユーザー管理モジュールのテスト)
  • Postman に基づく HTTP インターフェース テスト プロセスの分析
  • Postman でのインターフェーステストのバッチ実行のグラフィカルな手順

<<:  MySQL information_schema データベースの詳細な説明

>>:  HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

推薦する

CSS の高度な使い方(実戦で活用)

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

MySQL ソート機能の詳細

目次1. 問題のシナリオ2. 原因分析3. 解決策4. 知識を広げる4.1 クエリの最適化を制限する...

Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

目次序文グラフィックドライバーをインストールするCUDAをアンインストールするCUDAをインストール...

CSS 動的高さ遷移アニメーション効果の実装

この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーション...

Linux システム AutoFs 自動マウント サービスのインストールと構成

目次序文1. サービスプログラムをインストールする2. メイン設定ファイルを書く3. サブ構成ファイ...

Nginx をベースに特定の IP への短期アクセス数を制限する

特定の期間内に特定の IP へのアクセス回数を制限する方法は、特に悪意のある DDOS 攻撃に直面し...

Reactの親コンポーネントと子コンポーネント間のデータ転送の詳細な説明

目次1. 親コンポーネントが子コンポーネントにデータを渡す1.1. 親コンポーネントコード1.2. ...

Mysql での結合操作

結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...

デザインストーリー: ナンバープレートを覚えられない警備員

<br />私が住んでいる地域では、コミュニティに出入りする車両を管理するために、コミュ...

HTML におけるベースタグの使用に関する詳細な説明

requireJS には、baseURL というプロパティがあります。baseURL を設定すること...

nginx の default_server 定義とマッチングルールの詳細な説明

nginx の default_server ディレクティブは、server_name と一致しない...

Docker を使用して MySQL および Redis サービスをデプロイする方法

目次Dockerを使用してMySQLサービスをデプロイする方法DockerでRedisサービスをデプ...

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

トークンの有効期限が切れたときにページを更新するときに繰り返しプロンプトが表示されないようにする Vue について

トークンの有効期限が切れたら、ページを更新します。ページの読み込み時にバックエンドに複数のリクエスト...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...