Cómo escribir funciones globales en Postman

4 minutos de lectura

avatar de usuario
anji r

Necesito ayuda para escribir una función común para usar en una colección de solicitudes que ayudará a construir un marco.

He intentado usar el siguiente formato

La siguiente función se declara en la pestaña Prueba en la primera función

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

Utilicé lo siguiente en la solicitud previa

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

Estoy teniendo el siguiente error

hubo un error al evaluar el script de solicitud previa: no se puede leer la propiedad ‘función1’ de undefined.

¿Alguien puede ayudarme a definir funciones globales/comunes y usarlas en las solicitudes?

Gracias por adelantado

avatar de usuario
API de gravedad

Muy fácil de lograr con un parche de mono en el objeto (o lo que quieras).

Opción 1

Pre script a nivel de colección

Object.prototype.doSomething = (foo) => console.log(foo);

En cualquier otro lugar:

pm.doSomething('bar');

// or

postman.doSomething('bar');

Opcion 2

Pre script a nivel de colección

Utilities = {};
Utilities.getParam = (foo) => console.log(foo);

En cualquier otro lugar

Utilities.getParam('bar');

  • Nota: tenga cuidado al agregar JSON.parse(responseBody); o pm.response.json(); a sus utilidades, ya que: en primer lugar, no funcionará en el script de solicitud previa, ya que no se puede acceder al objeto de respuesta desde allí. En segundo lugar, es posible que tampoco funcione en la pestaña Pruebas en el caso de que no haya JSON disponible en el cuerpo de la respuesta: por ejemplo, XML o HTML. En el caso de hacer referencia al objeto de respuesta, debe considerar tener utilidades separadas para las pruebas y los scripts de solicitud previa.

    – n-verbitsky

    20 sep 2019 a las 14:27


avatar de usuario
Tomás

Editar: La siguiente respuesta sigue siendo válida y puede saltar y leerla, pero primero quiero dar una advertencia: si está tratando de usar esto en Postman, probablemente debería usar algo más que Postman, como Mocha, para su prueba. Postman está bien para aplicaciones de pequeña a mediana escala, pero las aplicaciones muy grandes de múltiples desarrolladores pueden ser una pesadilla para mantener con postman. El editor integrado en la aplicación es un desastre para los archivos grandes, y el control de versiones puede ser problemático.

RESPONDER

Puede tener una solución más legible y más posibilidades de factorizar su código (como llamar function1() desde function2() directamente dentro de su secuencia de comandos previa a la solicitud, o declarando paquetes) con la siguiente sintaxis:

Inicializar entorno (o globales):

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

Y luego use sus funciones en una prueba posterior:

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

bono:

Si está llamando a una API y necesita esperar a que finalice la llamada antes de realizar una prueba, puede hacer algo como esto:

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

y luego para usarlo:

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

avatar de usuario
francosunnn

El problema me había dejado perplejo durante un tiempo hasta que encontré la forma común mencionada anteriormente. Sin embargo, aún deja un ícono de advertencia para cada línea de evaluación, que indica que “eval puede ser dañino” en la interfaz del cartero. Recientemente, encontré otra forma y la publico aquí: los usuarios pueden crear un objeto prototipo con la función adecuada que deseen en la sección de secuencia de comandos previa a la solicitud, como esta:

Object.prototype.sayHello = function(name){
console.log(`Hello! ${name}`);
};

y llame a esa función en todas partes después de eso. Solo requería un objeto definido, como este:

let obj = {};
obj.sayHello(‘Griffin’);

O ni siquiera necesita la declaración del objeto, sino que usa algunos objetos integrados, como lodash (pretende que tiene la función 🙂 )

_.sayHello(‘Griffin’);

Está trabajando de mi lado. También lo publiqué en el foro de cartero aquí.
https://community.postman.com/t/global-functions-via-collection-level-folder/5927/6?u=franksunnn110

avatar de usuario
luca marzi

Una forma más elegante consiste en utilizar el contexto global (no las variables) en los scripts de solicitud previa. Por ejemplo, si desea una función llamada myFunction para estar disponible en cualquier secuencia de comandos previa a la solicitud, puede ir a Edit Collection/Pre-request y establecer

globalThis.myFunction = function(){}

Entonces puedes llamar myFunction en cualquier secuencia de comandos previa a la solicitud de cualquier solicitud dentro de la colección (sin ninguna clasificación/evaluación de su función)

  • No: Hubo un error al evaluar el Pre-solicitud Script:ReferenceError: globalEsto no está definido

    – Martijn Pieters

    25 de noviembre de 2021 a las 12:39

¿Ha sido útil esta solución?