web-dev-qa-db-ja.com

Postmanでグローバル関数を書く方法

フレームワークの構築に役立つリクエストのコレクション全体で使用する共通の関数を作成するのに助けが必要です。

私は以下の形式を使用してみました

次の関数は、最初の関数の[テスト]タブで宣言されています

postman.setGlobalVariable("function", function function1(parameters)
{
  //sample code
});

事前リクエストで以下を使用しました

var delay = eval(globals.function);
delay.function1(value1);

次のエラーが表示されます

事前要求スクリプトの評価中にエラーが発生しました:未定義のプロパティ 'function1'を読み取ることができません。

誰でもグローバル/共通機能を定義し、リクエスト全体でそれらを使用する方法を手伝ってくれますか?

前もって感謝します

20
Anji R

私はこの小さなハックを使用します:

pm.globals.set('loadUtils', function loadUtils() {
    let utils = {};
    utils.reuseableFunction = function reuseableFunction() {
        let jsonData = JSON.parse(responseBody);
    }
    return utils;
} + '; loadUtils();');
tests['Utils initialized'] = true;

別のリクエストでは、グローバル変数loadUtilsを再利用できます。

const utils = eval(globals.loadUtils);
utils.reuseableFunction();

Postmanチームの開発者ロードマップ も確認できます。コレクションレベルのスクリプトは、近いうちに予定されており、示されている方法を使用できるようになるまで、すぐに利用できるはずです。

26
Sergej Lopatkin

次の構文を使用すると、コードをファクタリングするより読みやすいソリューションと可能性を得ることができます(function1()からfunction2()を事前要求スクリプト内で直接呼び出す、またはパッケージを宣言するなど)。

環境(またはグローバル)の初期化:

postman.setEnvironmentVariable("utils", () => {
    var myFunction1 = () => {
        //do something
    }
    var myFunction2 = () => {
        let func1Result = myFunction1();
        //do something else
    }
    return {
        myPackage: {
            myFunction1,
            myFunction2
        }
    };
});

そして、後のテストで関数を使用します:

let utils = eval(environment.utils)();
utils.myPackage.myFunction1(); //calls myFunction1()
utils.myPackage.myFunction2(); //calls myFunction2() which uses myFunction1()

ボーナス:

APIを呼び出しており、テストを実行する前に呼び出しが完了するのを待つ必要がある場合、次のようなことができます。

postman.setEnvironmentVariable("utils", () => {
    var myFunction = (callback) => {
        return pm.sendRequest({
            // call your API with postman here
        }, function (err, res) {
            if (callback) {
                //if a callback method has been given, it's called
                callback();
            }
        });
    }

    return {
        myPackage: {
            myFunction,
        }
    };
});

そしてそれを使用するには:

utils.myPackage.myFunction(function() {
    console.log("this is the callback !")
    //perform test here
});
7
Tom

グローバル関数で_pm.sendRequest_を呼び出したい場合は、これを試してください:

  1. 次のように、コレクションの事前要求でグローバル関数を定義します。

    postman.setGlobalVariable("globalFunction", (parameters) => { console.log(parameters); pm.sendRequest('https://google.com/', function(err, resp) { pm.expect(err).to.not.be.ok; }); });

  2. 次のような関数を使用します。

    eval(globals.globalFunction)('hello world!!');

それは、矢印スタイル_()=>{}_を使用して関数を宣言したことです。そうでなければ動作しません

3