我正在尝试定义一个函数,该函数在集合Pre-Request脚本中发送请求:
const doRequest = (callback) => {
const echoPostRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: 'headername1:value1',
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
console.log('ready to send request');
pm.sendRequest(echoPostRequest, function (err, res) {
console.log('request sent', err ? err : res.json());
callback();
});
}
glbl = {
doRequest: doRequest
}
然后,在我的主要测试(对Google的简单GET)中,我将其保存在Pre-Request脚本中:
glbl.doRequest(() => console.log('works!'));
但是,永远不会调用回调,也永远不会打印“已发送请求”日志。
这是我的邮递员控制台的输出:
ready to send request 11:58:02.257
GET http://www.google.com 11:58:02.262
你知道我在做什么吗?
如果有帮助,我也可以提供导出的集合。
谢谢!
编辑:如果我将所有内容移至请求的Pre-request脚本中(而不是集合中),则一切正常
答案 0 :(得分:0)
这里发生了一些事情。
本地范围问题
您的glbl
变量缺少关键字var
,const
或let
。
缺少此关键字不会导致变量冒泡并独自成为全局变量。环境Pre-request脚本和请求pre-request脚本具有不同的作用域。
正如您所经历的那样,当您将脚本仅移至请求级别时,所有内容都位于同一范围内,因此可以正常工作。
创建全局功能
邮递员可以创建自己的全局变量。可以通过pm.globals.set
和pm.globals.get
以编程方式完成。
https://www.getpostman.com/docs/v6/postman/environments_and_globals/variables#accessing-variables-through-scripts
这些变量有一些限制:您只能在其中存储字符串,因此,如果我们不做任何更改其类型的操作,则创建的对象和函数将不会保留。
在这种情况下,在设置任何变量之前,我们需要确保:
toString
任何功能JSON.stringify
任何对象现在,我们收藏的预请求脚本将如下所示:
const doRequest = (callback) => {
const echoPostRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: 'headername1:value1',
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
console.log('ready to send request');
pm.sendRequest(echoPostRequest, function (err, res) {
console.log('request sent', err ? err : res.json());
callback();
});
};
const glbl = {
doRequest: doRequest.toString()
};
pm.globals.set('glbl', JSON.stringify(glbl));
为了在请求级别使用它,我们也需要在此更新我们的预请求脚本:
const glbl = JSON.parse(pm.globals.get('glbl'));
const doRequest = eval(glbl.doRequest);
doRequest(() => console.log('works!'));