背景説明
インターフェーステストにpostmanを使用するプロジェクトがあります。インターフェースに必要なパラメータは次のとおりです:
appid:アプリケーションの識別。
sign:HMACSHA1暗号化アルゴリズムを使用して計算する必要がある署名をリクエストします。署名文字列は次のとおりです:{appid} url {url}u r l {stamp};
スタンプ:これはタイムスタンプです。
オプション:ビジネスパラメータ;
問題は、Postmanがリクエストを開始するときに、パラメーターに基づいて動的にサインを構築する方法です。
postmanのスクリプトライブラリのCryptoJSは、署名アルゴリズムを使用したHMACSHA1などのさまざまなアルゴリズムの暗号化をサポートしています。
困難なのは、URLのパスパラメータを取得することです。リクエストが開始されると、パス値を修正できます。自動テストを実行する必要がある場合にパス値を取得するにはどうすればよいですか?
GETリクエストを作成する
postmanの基本的な使用法は紹介されていません。まず、URLで構成されたさまざまな動的パラメーターを使用してGETリクエストを作成します
{ {変数名}}:環境変数を引用するためのポストマンの構文。
{ {$ guid}}:postmanによって事前定義された環境変数は、GUID値を取得するために使用されます。
事前リクエストスクリプトで署名を作成する
pre-requestスクリプトは、リクエストが送信される前に実行されるjavascript実行環境です。jsとして使用するだけですが、一部のjsライブラリはそれをサポートしていません。
次のステップは、署名を動的に取得することです
1. appid環境変数で構成された固定値。
2.スタンプのタイムスタンプを取得します。
//获取unix时间
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
}
3. URL値はrequest.urlを通じて取得でき、パスが解析されます。
//获取url的path部分
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开始到结尾的所有字符
console.log(relUrl);
return relUrl;
}
作者:A丶咔咔
链接:https://www.jianshu.com/p/ac04616b164f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
4.署名文字列を作成し、秘密鍵で暗号化します。
postmanが提供する暗号化アルゴリズムライブラリは、すべてがサポートしているわけではなく、バックグラウンドで署名を交換する必要がある場合があります。
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));
});
作者:A丶咔咔
链接:https://www.jianshu.com/p/ac04616b164f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
署名文字列は、URLエンコードされていることが好ましい。
残りの問題:署名をバックグラウンドで交換すると、最初に返されたresponsejson()文字列を解析できません。
5. evalを使用して、定義済みの変数postmanUtilをグローバル変数に挿入し、次に呼び出します。
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();
結果を図に示します。
コードは以下のように表示されます:
var postmanUtil={
//获取unix时间
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
},
//获取url的path部分
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开始到结尾的所有字符
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);
//地址 获取当前地址的path部分
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));
});
}
}
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();
スクリプトは環境変数で記述されています
多くのインターフェースをコピーするだけでよい場合でも、単一のインターフェースがまだ可能な場合は、上記のコードを事前要求スクリプトで記述します。
スクリプトを変更する必要がある場合、問題が発生します。変更するには、各リクエストの[リクエスト前のスクリプト]ウィンドウに移動する必要があります。
解決できます。ENVIRONMENTにpostmanUtilを設定するだけです。方法は次のとおりです
。実際、postmanUtilは環境変数に入れられ、他は変更されていません。環境変数の値が維持されている限り、問題はなく、1つずつ変更する必要はありません。
リクエスト前のスクリプトコードをもう一度見ると、はるかに簡単です。
郵便配達員コンソールの使用法
環境変数を正常に取得したかどうか、または変数の値を表示したいかどうかわかりません。Postmanには便利なコンソールビューも用意されています。[表示]メニューの[Postmanコンソールを表示]で次のコンソールを開くことができます
この図は、console.log(sercret)とsendRequest()の結果です。
コレクションランナーの自動APIテスト
インターフェースのテストケースを作成する
返されたhtml結果については、テスト本文に特定の値が含まれている限り、
Jsonの結果を返す場合、コードが0である限り、渡されます
ウィンドウの右側に一般的に使用されるスクリプトショートカットがあり、それを選択することで生成でき、非常に便利です。
自動インターフェイステストを選択して実行する
ホームページの左上隅にある[ランナー]をクリックして入力し、以前に構築されたインターフェイスを選択して、環境を選択し、[xxxの実行]インターフェイスをクリックしてスクリプトテストを実行します。
試験結果
結果2インターフェースが所定の結果を正常に返すことがわかります
最後に、
上記は私が収集したビデオリソースの一部であり、このプロセスで非常に役立ちました。自習中に情報を見つけることができないという感覚を味わいたくない場合、誰もあなたの質問に答えず、数日後にあきらめたくない場合は、さまざまなソフトウェアテストリソースと技術的なディスカッションを備えた控除グループ[313782132]に参加できます。
もちろん、面接があります。面接は通常、技術面接と人事面接に分けられます。形式の面では、グループの顔はほとんどありません。少数の企業が交差点を持っている可能性がありますが、一般的に、技術面は基本的には専門的および技術的レベルの検査です。何の問題は基本的にありません技術的な人事面を介するなど、その後、時間の面が主に限り、その後、一般的な、技術では、会社の要件を満たしていない人の全体的な品質と家族の状況の文字を見るために(いくつかの企業は、時間の面が多くの人々を磨くますがあります)
私たちは、主に技術面で言えば、技術面は主に専門的な技術知識とレベルを調べることであり、上記は私が編集したインタビューの質問も選択されています。
テストチームはどのようにしてテストスキルを向上させますか?
テクニカルディスカッションとラーニングエクスチェンジにさらに依存しています。社内グループに加えて、関連するテクニカルエクスチェンジグループもあり、多くの同僚と学び、スキルツリーを改善することができます。IT業界の技術更新の反復は既に高速であるため、学習の考え方を維持する必要があります。興味があれば私に従ってください。無料のマテリアルリンクが随時発行され、同僚との技術交流があります。
さあ、テストマン!計画を改善する必要がある場合は、それを実行してください。法律がなければならず、そうすれば成功するでしょう。
リソースが良ければ、推薦してください〜