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 で正確なフォントの色を取得する方法

推薦する

JS で美しい条件式を書く方法についての簡単な説明

目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...

CSS の子要素を親要素と高い一貫性を持たせる方法

絶対位置決め方式: (1)親要素を相対配置に設定します。親要素の高さを指定しない場合は、左の子要素の...

Vue はタブ ラベルを実装します (ラベルが自動スクロールを超える)

作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...

CentOS6.9+Mysql5.7.18 ソースコードのインストール詳細チュートリアル

CentOS6.9+Mysql5.7.18 ソースコードのインストールでは、以下の操作を root ...

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

CSS 不透明度子要素が親要素の透明度を継承するためのソリューションの詳細な説明

プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...

MySQL データベース シェル import_table データ インポート

目次MySQL Shell import_table データのインポート1. import_tabl...

VMware Workstation Pro が Windows で実行されない場合の解決策

国慶節の休暇後、Windows アップデート後に VMware 仮想マシンが開けなくなり、「VMwa...

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 W...

vue3のテレポート瞬間移動機能の使い方を詳しく解説

vue3テレポート瞬間移動機能の使用は参考用です。具体的な内容は次のとおりです。テレポートは通常、瞬...

Nginx と GeoIP モジュールを使用して IP の地域情報を読み取る方法

LinuxにGeoIPをインストールする yum で nginx-module-geoip をインス...

JavaScript デザインパターン プロキシパターンの学習

目次概要実装保護エージェント仮想エージェント画像の遅延読み込みを実現する仮想プロキシ概要プロキシ パ...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

MySql 範囲内の検索時にインデックスが有効にならない理由の分析

1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...

MySQL プロセス制御 IF()、IFNULL()、NULLIF()、ISNULL() 関数

MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...