Postman Pre-request使用
5678 ワード
Postmanのような強力なツールが簡単なツール応用編の博文を書かないわけにはいかない.本稿ではPre-request scriptsの使用を紹介し、基礎的な使用の進級版である.
一、背景
apiをテストする場合、要求パラメータには署名などの暗号化されたパラメータが含まれることが多い.
Postmanを使用してテストを行う場合、署名された暗号化アルゴリズムを定義した後、Postmanは自動的に計算を行い、パラメータとして伝達することを望んでいます.
本稿では、まず、Base 64符号化およびMD 5暗号化に関する署名の自動化生成を例に挙げる.
二、使用
1、プレースホルダの説明
まず住所をお願いする栗を挙げます.http://localhost:9090/apps/task/inWorkList/{{token}}?signed={{signed}}
アドレスのtokenとsignedのプレースホルダの書き方は2対のカッコで包まれていることに気づき、他の場所で計算して生成するとここのパラメータに置き換えられます.
置換後のアドレスは次のとおりです.http://localhost:9090/apps/task/inWorkList/1qaz2wsx?signed=1qaz2wsx
注意:同じプレースホルダの書き方は、URI、Headers、Bodyに適用できます.
2、変数の紹介
前述のプレースホルダでは、実際に値の出所はPostmanの変数です.
Postmanでは変数はグローバル変数(global)と環境変数(environment)の区別があり,いずれもk−vのキー値対形式である.
注意:valueは一般的にstring形式ですが、JSOn.stringify()とJSOn.parse()を使用してシーケンス化と逆シーケンス化を行います.
名前に示すように、グローバル変数は任意の場所で使用できますが、環境変数は現在の環境でのみ使用されます.もちろん、signed:1 qaz 2 wsxのk-vキー値ペアが両方で定義されている場合、環境変数は優先度が高くなります.
3、変数管理
2つの方法があります.1つは、図のようにクライアントで直接操作することです.
二つ目は、Pre-request領域でコードを使用してgetとsetを行い、見るとわかります.
実際には、クライアントでよく使用されるアクションのヒントがあります.
4、コードの詳細
ここでtokenとsignedの生成には、JSのDate()を用いてゆっくりとつなぎ合わせられたタイムスタンプ(形:20181225224000)に依存する必要があることを説明するために、直接コードを貼り付けます.
tokenはbase 64符号化である.
SignedはMD 5暗号化です.
5、踏み込み
実行時にエラーが表示されます.
ゆっくりデバッグしてみると、実はbase 64符号化の時に間違いがあったので、Utf 8符号化を先に行う必要があります.
まもなく次のコード:
公式ドキュメント:リンクアドレス
原文住所:www.jetchen.cn/postman-pre...
一、背景
apiをテストする場合、要求パラメータには署名などの暗号化されたパラメータが含まれることが多い.
Postmanを使用してテストを行う場合、署名された暗号化アルゴリズムを定義した後、Postmanは自動的に計算を行い、パラメータとして伝達することを望んでいます.
本稿では、まず、Base 64符号化およびMD 5暗号化に関する署名の自動化生成を例に挙げる.
二、使用
1、プレースホルダの説明
まず住所をお願いする栗を挙げます.http://localhost:9090/apps/task/inWorkList/{{token}}?signed={{signed}}
アドレスのtokenとsignedのプレースホルダの書き方は2対のカッコで包まれていることに気づき、他の場所で計算して生成するとここのパラメータに置き換えられます.
置換後のアドレスは次のとおりです.http://localhost:9090/apps/task/inWorkList/1qaz2wsx?signed=1qaz2wsx
注意:同じプレースホルダの書き方は、URI、Headers、Bodyに適用できます.
2、変数の紹介
前述のプレースホルダでは、実際に値の出所はPostmanの変数です.
Postmanでは変数はグローバル変数(global)と環境変数(environment)の区別があり,いずれもk−vのキー値対形式である.
注意:valueは一般的にstring形式ですが、JSOn.stringify()とJSOn.parse()を使用してシーケンス化と逆シーケンス化を行います.
名前に示すように、グローバル変数は任意の場所で使用できますが、環境変数は現在の環境でのみ使用されます.もちろん、signed:1 qaz 2 wsxのk-vキー値ペアが両方で定義されている場合、環境変数は優先度が高くなります.
3、変数管理
2つの方法があります.1つは、図のようにクライアントで直接操作することです.
二つ目は、Pre-request領域でコードを使用してgetとsetを行い、見るとわかります.
//
pm.globals.unset("variable_key");
//
pm.environment.unset("variable_key");
//
pm.globals.get("variable_key");
//
pm.variables.get("variable_key");
//
pm.environment.get("variable_key");
//
pm.globals.set("variable_key", "variable_value");
//
pm.environment.set("variable_key", "variable_value");
実際には、クライアントでよく使用されるアクションのヒントがあります.
4、コードの詳細
ここでtokenとsignedの生成には、JSのDate()を用いてゆっくりとつなぎ合わせられたタイムスタンプ(形:20181225224000)に依存する必要があることを説明するために、直接コードを貼り付けます.
tokenはbase 64符号化である.
SignedはMD 5暗号化です.
//
// uid
var uid = '7777'
var api_sig_str = pm.variables.get("api_signed_str");
//
var d = new Date()
var year = d.getFullYear().toString()
var month = (d.getMonth() + 1).toString()
month = dateLengtgInit(month)
var day = d.getDate().toString()
day = dateLengtgInit(day)
var hour = d.getHours().toString()
hour = dateLengtgInit(hour)
var minute = d.getMinutes().toString()
minute = dateLengtgInit(minute)
var second = d.getSeconds().toString()
second = dateLengtgInit(second)
var time = year + month + day + hour + minute + second
console.log(time)
// token(base64)
var token = CryptoJS.enc.Base64.stringify(uid + time)
console.log(token)
// postman.setGlobalVariable("token",token)
pm.environment.set("token",token)
//signed (md5 )
var signed = api_sig_str + '_' + uid + '_' + time
console.log(signed)
var signedMd5 = CryptoJS.MD5(signed).toString()
console.log(signedMd5)
// pm.globals.set("signed",signedMd5)
pm.environment.set("signed",signedMd5)
//
function dateLengtgInit(num){
if (num.length==1){
return "0"+num;
} else {
return num
}
}
5、踏み込み
実行時にエラーが表示されます.
There was an error in evaluating the Pre-request Script: TypeError: r.clamp is not a function
ゆっくりデバッグしてみると、実はbase 64符号化の時に間違いがあったので、Utf 8符号化を先に行う必要があります.
まもなく次のコード:
var token = CryptoJS.enc.Base64.stringify(uid + time)
変更先:var token = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(uid + time))
三、参考公式ドキュメント:リンクアドレス
原文住所:www.jetchen.cn/postman-pre...