【问题标题】:How to build a Postman url query with Pre-request Scripts如何使用预请求脚本构建 Postman url 查询
【发布时间】:2021-11-12 05:44:22
【问题描述】:

我正在尝试使用预请求脚本根据从 CSV 文件中提取的数据构建请求对象。问题是请求似乎在预请求脚本运行之前就已经确定了。这似乎使它成为一个中间请求脚本,而不是一个预请求。 我的代码如下:

if(ipList === undefined) ipList = "1.2.3.4,2.3.4.5,123.234.345.465";
let ips = ipList.split(',');
let queryArray = [];
for( i=0; i<ips.length; i++){
    queryArray.push({ "key": "ip", "value": ips[i] });
}
console.log(queryArray);
pm.request.url.query = queryArray;
console.log(pm.request);

当我将请求中的 url 查询变量硬编码为等于 4.3.2.1 时,pm.response.url 对象如下所示: pm.request.url.query[0] = {key:"ip", value:"4.3.2.1"}

  • 请注意,该对象的 url.query[0] 部分与实际获取请求中的参数匹配。

当我将 pm.request.url.query 的值更改为等于新查询数组时,但是 as you can see here,查询数组设置正确,但参数未附加到请求 URL。

因此,除非我做错了什么,否则即使对于预请求脚本,请求似乎也是不可变的。

所以我的问题是: 有没有办法在发出请求之前修改请求的 url 参数?

顺便说一句:我知道在查询中使用相同键的多个参数可能看起来很奇怪,但这就是此 API 的工作方式,并且在查询中硬编码多个 IP 地址也可以正常工作。

【问题讨论】:

  • 我可以给你的唯一建议是在预请求中形成查询字符串,然后: pm.variables.set("query", queryString) (就像 1 个请求唯一的变量覆盖所有内容除了迭代数据),然后将其设置在 uri 中,例如:{{query}}。

标签: postman prerequesthandler


【解决方案1】:

您可以为pm.request.url 分配一个新值。

这里我的 URL 中已经有一些查询参数,我必须对其进行编辑:

const urlSplit = request.url.split('?');
const paramsString = urlSplit[1]; // the second part actually represents the query string we need to modify
const eachParamArray = paramsString.split('&');
let params = {};
eachParamArray.forEach((param) => {
    const key = param.split('=')[0];
    const value = param.split('=')[1];
    Object.assign(params, {[key]: value});
});

params.bla = params.bla + 'foobar';

newQueryString = Object.keys(params).map(key => key + '=' + params[key]).join('&');

pm.request.url = urlSplit[0] + '?' + newQueryString;

最后,我只是构造了一个新的 URL,使用前一个 URL 的第一部分和带有编辑的 bla 参数的查询字符串。

【讨论】:

    【解决方案2】:

    这似乎对我有用——它没有改变 UI 显示查询字符串的内容,但它改变了实际请求的内容(查看控制台日志)

    pm.request.url.addQueryParams(["a=1", "b=2"])
    pm.request.url.query.remove("b")
    

    我有一些名为“script_loginAs”等的参数...这样命名以便我团队中的人知道该参数已评估而不是发送。

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2021-05-11
      • 2018-11-15
      • 2021-07-13
      • 2017-11-23
      • 2018-02-28
      • 2021-10-24
      • 2021-05-03
      • 2022-01-16
      相关资源
      最近更新 更多