web-dev-qa-db-fra.com

Comment écrire des fonctions globales dans Postman

J'ai besoin d'aide pour écrire une fonction commune à utiliser dans une collection de demandes qui aidera à créer un cadre.

J'ai essayé d'utiliser le format ci-dessous

La fonction suivante est déclarée dans l'onglet Test de la première fonction

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

J'ai utilisé ce qui suit dans la pré-demande

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

Je reçois l'erreur suivante

il y a eu une erreur lors de l'évaluation du script de pré-demande: impossible de lire la propriété 'function1' de non défini.

Quelqu'un peut-il m'aider à définir les fonctions globales/communes et à les utiliser dans les demandes?

Merci d'avance

20
Anji R

J'utilise ce petit hack:

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

Dans une autre demande, je peux réutiliser la variable globale loadUtils:

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

Vous pouvez également consulter la feuille de route développeur de l'équipe Postman . Les scripts au niveau de la collection sont à l'ordre du jour à court terme et devraient être disponibles d'ici là, vous pouvez utiliser la méthode indiquée.

26
Sergej Lopatkin

Vous pouvez avoir une solution plus lisible et plus de possibilité de factoriser votre code (comme appeler function1() depuis function2() directement dans votre script de pré-demande, ou déclarer des packages) avec la syntaxe suivante:

Initialiser l'environnement (ou les globaux):

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

Et puis utilisez vos fonctions dans un test ultérieur:

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

Bonus:

Si vous appelez une API et devez attendre la fin de l'appel avant d'effectuer un test, vous pouvez faire quelque chose comme ceci:

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,
        }
    };
});

puis de l'utiliser:

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

si vous voulez appeler pm.sendRequest dans la fonction globale, essayez ceci:

  1. définir la fonction globale dans la pré-demande de collecte, comme ceci:

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

  2. utiliser une fonction comme celle-ci:

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

Remarque cela, j'ai déclaré la fonction en utilisant le style de flèche ()=>{}. sinon ça ne marcherait pas

3
kamran ghiasvand