【发布时间】:2017-10-21 19:48:04
【问题描述】:
我正在为 Postman 编写测试,这通常很容易工作。但是,我现在想访问请求的一些数据,确切地说是一个查询参数。 您可以通过返回字符串的“request.url”对象访问请求 URL。 Postman 中是否有一种简单的方法来解析此 URL 字符串以访问查询参数?
【问题讨论】:
标签: javascript api postman
我正在为 Postman 编写测试,这通常很容易工作。但是,我现在想访问请求的一些数据,确切地说是一个查询参数。 您可以通过返回字符串的“request.url”对象访问请求 URL。 Postman 中是否有一种简单的方法来解析此 URL 字符串以访问查询参数?
【问题讨论】:
标签: javascript api postman
邮递员 8.7 及以上版本低于 1
var ref = pm.request.url.query.get('your-param-name');
【讨论】:
这很简单 - 访问 YOUR_PARAM 值使用
pm.request.url.query.toObject().YOUR_PARAM
【讨论】:
在这里聚会有点晚了,但我一直在使用以下内容来获取一组 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;
}
});
所以如果我的 url 是 example.com 那么数组是空的并且结构没有任何东西,{}
如果 url 是 example.com?foo=bar 则数组包含
{
description: {},
disabled:false
key:"foo"
value:"bar"
}
我的结构最终是{ foo: 'bar' }
切换属性旁边的复选框会更新 disabled 属性:
【讨论】:
较早的帖子,但我已经解决了这个问题:
由于某种原因,调试器将 pm.request.url.query 视为包含您想要的项目的数组,但一旦您尝试从中获取项目,它总是为空。 IE。 pm.request.url.query[0](或 .get(0))将返回 null,尽管调试器显示它在 0 处有一些东西。
我不知道为什么,但由于某种原因,它不在索引 0 处,尽管调试器声称它是。相反,您需要先过滤查询。比如这样:
var getParamFromQuery = function (key)
{
var x = pm.request.url.query;
var newArr = x.filter(function(item){
return item != null && item.key == key;
});
return newArr[0];
};
var getValueFromQuery = function (key)
{
return getParamFromQuery(key).value;
};
var paxid = getValueFromQuery("paxid");
getParamFromQuery 返回带有键、值和禁用字段的参数。 getValueFromQuery 只返回值。
【讨论】:
如果您想提取 URL 编码格式的查询字符串而不对其进行解析。操作方法如下:
pm.request.url.getQueryString() // example output: foo=1&bar=2&baz=3
【讨论】:
pm.request.url.query 返回 PropertyList 的 QueryParam 对象。例如,您可以获得一个参数pm.request.url.query.get() 或所有pm.request.url.query.all()。请参阅PropertyList 方法。
【讨论】:
pm.request.url.query.all() 数组将所有查询参数保存为对象。
要将参数作为字典获取,您可以使用:
var query = {};
pm.request.url.query.all().forEach((param) => { query[param.key] = param.value});
【讨论】:
pm.request.url.query.all().reduce((paramObject, param) => ({...paramObject, [param.key]: param.value}), {})
pm.request.url.query.toObject() 将返回相同的简单哈希,而不会出现膨胀。
我一直在寻找访问 请求参数 以编写测试(在 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
编辑:添加Github Gist
【讨论】:
看看控制台做的:
console.log(request);
它将向您展示您可以从请求中获得的一切。然后您将使用 request. 访问不同的参数,即。 request.name 如果你想要测试名称。 如果你想要 url 中的特定元素,恐怕你必须使用一些编码来获得它(对不起,我是 javascript 的初学者)
希望对你有帮助
亚历山大
【讨论】:
let req = JSON.parse(request.data);,然后您可以通过 req.myParam 获取任何请求参数。例如请求和响应之间的测试。
我认为 Postman 请求对象中没有任何现成的属性可用于查询参数。
目前有四个属性与“请求”对象相关联:
data {object} - 这是请求的表单数据字典。 (request.data[“key”]==”value”) headers {object} - 这是请求标头的字典 (request.headers[“key”]==”value” ) method {string} - GET/POST/PUT 等
url {string} - 请求的 url。
【讨论】: