Anj*_*i R 21 javascript postman
我需要帮助编写一个通用函数,以便在一组请求中使用,这将有助于构建框架.
我尝试过使用以下格式
在第一个函数的"测试"选项卡中声明了以下函数
postman.setGlobalVariable("function", function function1(parameters)
{
//sample code
});
Run Code Online (Sandbox Code Playgroud)
我在预请求中使用了以下内容
var delay = eval(globals.function);
delay.function1(value1);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
在评估预请求脚本时出错:无法读取未定义的属性'function1'.
谁能帮助我如何定义全局/通用功能并在请求中使用它们?
提前致谢
ggu*_*erg 47
没有eval:
定义包含您在收集的预请求脚本功能(S)的对象,而不使用let,var等等。这是重视邮差的全球沙箱的对象。
utils = {
myFunc: function() {
return 'hello';
}
};
Run Code Online (Sandbox Code Playgroud)
然后在您的请求的预请求或测试脚本部分中调用该函数:
console.log(utils.myFunc());
Run Code Online (Sandbox Code Playgroud)
小智 28
我用这个小黑客:
pm.globals.set('loadUtils', function loadUtils() {
let utils = {};
utils.reuseableFunction = function reuseableFunction() {
let jsonData = JSON.parse(responseBody);
}
return utils;
} + '; loadUtils();');
tests['Utils initialized'] = true;
Run Code Online (Sandbox Code Playgroud)
在另一个请求中,我可以重用全局变量loadUtils:
const utils = eval(globals.loadUtils);
utils.reuseableFunction();
Run Code Online (Sandbox Code Playgroud)
您还可以在此处查看Postman团队的开发人员路线图:https: //trello.com/b/4N7PnHAz/postman-roadmap-for-developers
集合级脚本是近期议程,应尽快提供,直到那时您可以使用所示方法.
通过对象(或任何你想要的)上的猴子补丁很容易实现。
Object.prototype.doSomething = (foo) => console.log(foo);
Run Code Online (Sandbox Code Playgroud)
pm.doSomething('bar');
// or
postman.doSomething('bar');
Run Code Online (Sandbox Code Playgroud)
Utilities = {};
Utilities.getParam = (foo) => console.log(foo);
Run Code Online (Sandbox Code Playgroud)
Utilities.getParam('bar');
Run Code Online (Sandbox Code Playgroud)
您可以使用以下语法,从而获得更具可读性的解决方案,并更有可能分解代码(例如function1(),function2()直接在预请求脚本内部调用或声明包):
初始化环境(或全局变量):
postman.setEnvironmentVariable("utils", () => {
var myFunction1 = () => {
//do something
}
var myFunction2 = () => {
let func1Result = myFunction1();
//do something else
}
return {
myPackage: {
myFunction1,
myFunction2
}
};
});
Run Code Online (Sandbox Code Playgroud)
然后在以后的测试中使用您的函数:
let utils = eval(environment.utils)();
utils.myPackage.myFunction1(); //calls myFunction1()
utils.myPackage.myFunction2(); //calls myFunction2() which uses myFunction1()
Run Code Online (Sandbox Code Playgroud)
奖励:
如果您正在调用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,
}
};
});
Run Code Online (Sandbox Code Playgroud)
然后使用它:
utils.myPackage.myFunction(function() {
console.log("this is the callback !")
//perform test here
});
Run Code Online (Sandbox Code Playgroud)
如果要调用pm.sendRequest全局函数,请尝试以下操作:
在集合预请求中定义全局函数,如下所示:
postman.setGlobalVariable("globalFunction", (parameters) => {
console.log(parameters);
pm.sendRequest('https://google.com/', function(err, resp) {
pm.expect(err).to.not.be.ok;
});
});
使用这样的功能:
eval(globals.globalFunction)('hello world!!');
请注意,我使用箭头样式声明了功能()=>{}。否则就行不通
小智 6
这个问题困扰了我一段时间,直到我找到了上面提到的通用方法。但是,它仍然为每个 eval 行留下一个警告图标,这表明 \xe2\x80\x9ceval 在邮递员界面中可能是有害的\xe2\x80\x9d。\n最近,我\xe2\x80\x99ve找到了另一种方法并发布在这里:\n用户可以在预请求脚本部分中使用您想要的适当功能创建原型对象,如下所示:
\n\nObject.prototype.sayHello = function(name){\nconsole.log(`Hello! ${name}`);\n};\nRun Code Online (Sandbox Code Playgroud)\n\n然后在任何地方调用该函数。它只需要一个定义的对象,如下所示:
\n\nlet obj = {};\nobj.sayHello(\xe2\x80\x98Griffin\xe2\x80\x99);\nRun Code Online (Sandbox Code Playgroud)\n\n或者您甚至不需要对象的声明,而是使用一些内置对象,例如 lodash (您假装它具有以下功能 :smile: )
\n\n_.sayHello(\xe2\x80\x98Griffin\xe2\x80\x99);\nRun Code Online (Sandbox Code Playgroud)\n\n它\xe2\x80\x99s 在我这边工作。我还将其发布在邮递员论坛中\n https://community.postman.com/t/global-functions-via-collection-level-folder/5927/6?u=franksunnn110
\n| 归档时间: |
|
| 查看次数: |
13991 次 |
| 最近记录: |