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
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
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
});
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
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
Relacionado: los scripts de ámbito de colección ahora son compatibles con EOY 2017 – blog.getpostman.com/2017/12/13/…
– aff
22 de marzo de 2018 a las 13:44