在Postman中导入外部库

时间:2019-02-18 14:39:01

标签: javascript node.js json postman jsonpath

我的需要: 我想在我的JSON响应上构建一个包含过滤器的路径。

//Simple path - OK
response.Node1.Node2.Node3.Node4

//Path with list - OK
response.Node1.Node2.Node3[1].Node4

//Path with condition (filter) - NOK
response.Node1.Node2[?(@.Node3 == 'value')].Node3bis

邮递员不了解[?(@。Node3 =='value')]语法,因为JSONPath本身不受支持。

因此,我正在尝试在Postman中导入jsonPath js库,并且发现了两个:


研究

  • 我已经读过this post,并且所有答案都无法满足我的需求。

  • 邮递员js代码仅限于sandbox

  • 邮递员将库限制为this list

  • 有一个trick(检查提示5)将js代码添加为全局变量,并在请求中调用它。但是,它不适用于jsonPath项目,因为它不仅是一个简单的函数,而且是一个整个项目。我尝试了许多不同的方法,但是仍然无法从邮递员测试中调用jsonPath函数。

  • 我还阅读了related Postman issue

  • 在GitHub社区中,this issuethis one而被关闭。已关闭以支持this one。自2015年6月以来,没有明确的答案(上面提到的小技巧)就打开了。


未知域

即使我阅读了它们的全局用法,我也不了解有关NodeJs / NPM / Newman的任何技术知识。

但是我读到邮递员支持NodeJs,允许生成NodeJs代码片段,而且我看到可以使用NodeJs导入jsonPath库。

也许可以在那里做些什么,但是我没有专业知识来实现​​。


问题:

有人知道如何使其完全正常工作吗?

我的意思是,感谢邮递员jsonPath js库,找到一种使用jsonPath表达式的方法... 请帮忙。

欢迎任何能使其工作的邮递员收藏:)。

1 个答案:

答案 0 :(得分:1)

关于第一个问题,目前不支持导入外部js代码(上面显示的全局变量技巧除外),但Postman团队目前正在开发中。 如果使用canary版本,则可以在正式交付之前获得它。

关于我的需要,我实际上找到了一种使用 cheerio 建立条件的路径的方法。 注意:responseBody是XML格式,因此会加载cheerio。

var $ = cheerio.load(responseBody, {
  ignoreWhitespace: true,
  xmlMode: true
});

//Will show in the console the value of NODE3bis corresponding to a NODE3='value'
console.log("cheerio xpath with condition: " + 
$('NODE1 > NODE2 > NODE3:contains("value")')
    .parent().find('NODE3bis').text());
//Where NODE3 and NODE3bis are sibling. 

//Another way to write it using .has() function, which allows to avoid the use of .parent() afterward:
console.log("cheerio xpath with condition: " + 
$('NODE1 > NODE2').has('NODE3:contains("value")').find('NODE3bis').text());