背景説明インターフェースのテストに postman を使用するプロジェクトがあります。インターフェースに必要なパラメータは次のとおりです。
問題は、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をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL information_schema データベースの詳細な説明
>>: HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法
1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...
body{font-size:12px; font-family:"宋体";}...
最初のパラメータ渡し方法は、動的ルーティングパラメータ渡しです。リンクのパス属性を設定することで、ル...
1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...
図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...
序文テーブルを削除するには、無意識に思い浮かぶコマンドは、DROP TABLE "テーブル...
ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...
文字化けしたコードの問題は次のとおりです。 この問題の原因は非常に単純です。コマンドラインのエンコー...
要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...
MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...
目次親コンポーネントリストボックスリストコンポーネントボタンコンポーネント PageButton昨年...
GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...
画像をプルする # docker pull codercom/code-server # Docke...
この記事の例では、Vueモバイル端末で指のスライド効果を実現するための具体的なコードを紹介します。具...
この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...