You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将响应中的两个JSON列表传递至另一个Karate feature文件

问题:Karate中如何向被调用的Feature传递两个列表参数?

我尝试将两个列表传递给read()函数调用外部Feature,但一直失败,单独传递单个列表可以正常运行。以下是具体操作:

步骤1:获取并处理数据

首先调用接口获取数据:

* url callPathProvider = anything
Given url callPath
When method get
Then status 200

提取特定值到array1:

* def array1 = ...

将array1处理为两个列表:

* def data1 = karate.map(array1, function(x){ return { channelDefId: x } })
* print data1

打印结果:

[
  {"channelDefId":"201"},
  {"channelDefId":"301"},
  {"channelDefId":"401"},
  {"channelDefId":"501"}
  ...
]
* def array2 = array1.map(x => x.replace('01', '') * 1)
* def data2 = karate.map(array2, function(x){ return { listOfId: x } })
* print data2

打印结果:

[
  {"listOfId":2},
  {"listOfId":3},
  {"listOfId":4},
  {"listOfId":5}
  ...
]

步骤2:调用外部Feature并报错

尝试传递两个列表:

* def result = call read('called.feature')(data2, data1)

执行后报错:

feature call loop failed at index: 0, js failed:
01: [ listOfId, 'channel_definitions', channelDefId, 'authorize_url']
org.graalvm.polyglot.PolyglotException: ReferenceError: "channelDefId" is not defined .:program(Unnamed:1)

被调用的called.feature内容:

Feature:

Scenario:
 Given url 'part1'
 And path  listOfId, 'part2', channelDefId, 'part3'
 When method POST
 Then status 201

单独传递data1或data2时,called.feature可以正常执行。


解决方案

问题出在参数传递方式上:Karate调用Feature时,若传递多个列表,不会自动将两个列表的元素一一对应绑定,只会把第一个列表作为循环参数,第二个列表无法被正确识别。

正确做法是将两个列表的对应元素合并成单个对象列表,确保每个对象同时包含listOfId和channelDefId,再传递这个合并后的列表:

// 合并两个列表的对应元素
* def combinedData = karate.mapWithIndex(array1, function(x, i){ 
  return { 
    channelDefId: x, 
    listOfId: array2[i] 
  } 
})
* print combinedData

合并后的列表结构示例:

[
  {"channelDefId":"201", "listOfId":2},
  {"channelDefId":"301", "listOfId":3},
  {"channelDefId":"401", "listOfId":4},
  {"channelDefId":"501", "listOfId":5}
  ...
]

最后调用Feature时传递合并后的列表:

* def result = call read('called.feature') combinedData

这样called.feature中的listOfId和channelDefId就能从每个合并后的对象中正确获取值,不会再出现未定义的错误。


内容的提问来源于stack exchange,提问作者Alicya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:25:16