Postman - 无法在集合级别的预请求脚本中运行 pm.sendRequest()



我在 travis 中构建后使用 newman 运行 api 测试。

我试图限制请求前脚本的重复,因此查看了一些有关如何在集合级别拥有预请求脚本的解决方法。

我的问题是我不想在每个请求上运行它们,只在我需要它们的地方运行它们。

示例:我尝试运行登录脚本以在专用终结点上使用返回的令牌。

我的代码如下所示:

集合级别预请求脚本定义:

Object.prototype.login = function() {
const request = {
url: 'somthing',
method: 'GET',
header: 'Content-Type:application/json',
body: {
mode: 'application/json',
raw: JSON.stringify(
{
email: pm.environment.get('someenv'),
password: pm.environment.get('someenv')
})
}
};
pm.sendRequest(request, function (err, res) {
var response = res.json();
pm.environment.set("token", response.token);
});
}

请求级别预请求脚本定义:

_.login();

有人可以帮助我为什么我不能在这个范围内运行pm.sendRequest吗?

pm.environment.get('someenv')就像一个魅力,所以我不确定在这里做什么。

在不使用 Object 的情况下从集合级别预请求脚本调用时,它运行良好,但是如果我只是将整个请求放在那里,它将在每个请求之前运行,我首先要避免。

我尝试使用 console.log(( 记录一些东西,但似乎 pm.sendRequest(( 中的回调永远不会运行。

所以我找到了这个问题的解决方法,我希望它能在未来帮助某人:)

因此,很容易设置在每个请求之前运行的集合级别预请求。

但是要稍微优化一下,因为您不需要为集合中的每个请求运行每个脚本。您可以在此处使用我的解决方案。:)

我认为问题是由以下原因引起的:

在不同作用域中使用的 PM 对象不会影响全局作用域中的 PM 对象,因此首先应将全局 PM 对象作为函数调用的参数传递。

集合级别请求应如下所示:

login = function (pm) {
const request = {
url: pm.environment.get('base_url') + '/login',
method: 'POST',
header: {
'Content-Type': 'application/json',
},
body: {
mode: 'application/json',
raw: JSON.stringify({
email: pm.environment.get('email'),
password:pm.environment.get('passwd')
})
}
};
pm.sendRequest(request, (err, res) => {
var response = res.json();
pm.expect(err).to.be.a('null');
pm.expect(response).to.have.property('token')
.and.to.not.be.empty;
pm.globals.set("token", response.token);
});
};

对于要首先调用身份验证并使用令牌进行请求调用的确切请求:

login(pm);

最新更新