如何在Postman中获取请求参数?

36
我正在为Postman编写测试,总体上非常容易。然而,我现在想要访问请求的一些数据,准确地说是查询参数。
你可以通过"request.url"对象访问请求的URL,它返回一个字符串。在Postman中有没有一种简单的方法来解析这个URL字符串以访问查询参数?
12个回答

38

pm.request.url.query.toObject() 可以将所有查询参数作为字典获取。

var query = {};
pm.request.url.query.all().forEach((param) => { query[param.key] = param.value});

对我很有用 - 这个解决方案真的很优雅 :) - fuzzi
谢谢。这很完美。这应该是被采纳的答案。 - Alex Roy
如果你想在一行代码中完成同样的事情,你可以这样做:pm.request.url.query.all().reduce((paramObject, param) => ({...paramObject, [param.key]: param.value}), {}) - Bobby Nichols
上面的一行代码不再需要。pm.request.url.query.toObject()将返回相同的简单哈希表,而不会有多余的内容。 - Erhhung

24

我一直在寻找获取测试中的请求参数(在POSTMAN中)的方法。最终,我解析了POSTMAN中可用的request.url

const paramsString = request.url.split('?')[1];
const eachParamArray = paramsString.split('&');
let params = {};
eachParamArray.forEach((param) => {
    const key = param.split('=')[0];
    const value = param.split('=')[1];
    Object.assign(params, {[key]: value});
});
console.log(params); // this is object with request params as key value pairs

POSTMAN客户端 控制台响应

编辑:添加 Github Gist


17

如果您想在不解析查询字符串的情况下提取URL编码格式,请按照以下方法操作:

pm.request.url.getQueryString() // example output: foo=1&bar=2&baz=3

你好,请问如果我想在拦截器收到POST请求时每次执行一个脚本,并使用请求参数填充JS文件,应该怎么做?谢谢。 - Scaramouche
@Scaramouche,非常抱歉,但我不知道如何做到这一点。我认为你应该提出一个单独的问题,以便你可以得到一些答案。 - Ikbel

14

pm.request.url.query 返回一组QueryParam对象的PropertyList。例如,你可以通过pm.request.url.query.get()获取一个参数,或者通过pm.request.url.query.all()获取所有参数。请参阅PropertyList方法。


12

以下适用于 Postman 8.7及以上版本

var ref = pm.request.url.query.get('your-param-name');

8
很简单 - 要访问YOUR_PARAM的值,请使用pm.request.url.query.toObject().YOUR_PARAM

5

我认为Postman请求对象中没有可用的开箱即用属性来处理查询参数。

目前,“请求”对象与四个属性相关联:

data {object} - 这是请求表单数据的字典。(request.data[“key”]==”value”) headers {object} - 这是请求头的字典(request.headers[“key”]==”value”) method {string} - GET/POST/PUT等。
url {string} - 请求的URL地址。

来源: https://www.getpostman.com/docs/sandbox


4

可能晚了一些,但我正在使用以下方法获取URL查询参数的数组,循环遍历它们并构建带有键/值对的那些参数。

// the message is made up of the order/filter etc params
// params need to be put into alphabetical order
var current_message = '';
var query_params = postman.__execution.request.url.query;
var struct_params = {};

// make a simple struct of key/value pairs
query_params.each(function(param){
    // check if the key is not disabled
    if( !param.disabled ) {
        struct_params[ param.key ] = param.value;
    }
});

因此,如果我的网址是example.com,那么数组为空,结构体中没有任何内容,{}

如果网址是example.com?foo=bar,则数组包含:

{
  description: {},
  disabled:false
  key:"foo"
  value:"bar"
}

我的结构最终变成了{ foo: 'bar' }

切换属性旁边的复选框会更新disabled属性:

enter image description here


谢谢,我需要一种编程方式来检测Postman GUI中的查询参数是否已禁用。这个方法很好用。 - Dan Gøran Lunde

2

请在控制台中查看以下内容:

console.log(request);

这将展示你可以从请求中获取的所有内容。然后,你应该使用request来访问不同的参数,例如,如果你需要测试名称,就使用request.name。

如果你想要URL中的特定元素,恐怕你需要使用一些编码来获取它(抱歉,我是JavaScript的初学者)。

希望这能帮到你。

Alexandre


正是我一直在寻找的。只需添加以完成:此“请求”将请求作为字符串返回。因此,您现在无法执行类似于request.myparam的操作。但是,您可以解析此请求,例如: let req = JSON.parse(request.data);然后,您可以通过req.myParam获取任何请求参数。例如,在请求和响应之间进行测试。 - Winter Dash

0

你也可以获取查询字符串并将其设置为全局变量,如下所示:

postman.setGlobalVariable("SomeGlobalVariable",pm.request.url.query.get("queryParamName"));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接