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を行い、見るとわかります.
    //           
    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...