接口测试 rest-assured 中 JsonPath 怎么引用变量?

cctodd · 2018年01月17日 · 最后由 cctodd 回复于 2018年01月17日 · 1972 次阅读

背景
看大家对 rest-assured 赞不绝口,自己尝试了下,有一个问题请教比较熟练的朋友。

问题
使用 jsonpath 过滤时,比如 findAll,如何引用自定义变量

String topic= jsonPath.getString("topics.find {it.id =='1234567'}");

这样可以筛选出 id=‘1234567’ 的 topic。
问题在于,每一个用例过滤的条件可能不一样,所以这里的 ‘1234567’ 最好用变量来代替。

尝试

  1. 了解到 rest-assured 基于 groovy 语法,想着在字符串中用 $ 来引用变量,比如


String ID = ‘1234567’;


String topic= jsonPath.getString("topics.find {it.id ==$ID}");

得到如下报错

java.lang.IllegalArgumentException: The parameter "$ID" was used but not defined. Define parameters using the JsonPath.params(...) function

  1. 然后我尝试用 jsonPath.param(k, v) 的形式添加变量 ID,然而并没有什么卵用

  2. 另外,我尝试字符串拼接,也未果

    String topic= jsonPath.getString("topics.find {it.id ==" + ID + "}");

    文档确实不多,大家都是如何解决这个问题的呢

共收到 2 条回复 时间 点赞

@843633513 @xushizhao 请问各位是怎么操作的呢

更新:找到原因,给 jsonPath 设置变量方式有误
错误写法:

jsonPath.param('ID',ID);


String topic= jsonPath.getString("topics.find {it.id ==ID}");

改成这样 OK 了:


jsonPath.param('ID',ID).getString("topics.find {it.id ==ID}");

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册