调用Karate Feature文件时如何传递完整JSON数组,避免逐元素执行
2026-4-30
解决Karate中调用Feature时完整传递JSON数组的问题
#
我之前刚好碰到过这个Karate的默认行为——当你直接把JSON数组作为参数传给
call
方法时,Karate会自动把数组当成数据驱动的数据源,对数组里的每个元素执行一次目标Feature。要避免这种情况,只需要把你的JSON数组
包装成一个单个对象的属性
就可以了,这样Karate就不会触发数据驱动的循环逻辑,而是把整个数组完整传递过去。
具体实现步骤: #
1. 修改调用方的代码
原来的调用方式是直接传递数组:
* def myReq = [ { "attr1":"123", "attr2":"456" }, { "attr1":"789", "attr2":"101112" } ] * call read('classpath:com/example/Test.feature') myReq
现在改成把数组包裹在一个对象里传递:
* def myReq = [ { "attr1":"123", "attr2":"456" }, { "attr1":"789", "attr2":"101112" } ] * call read('classpath:com/example/Test.feature') { fullRequestArray: myReq }
2. 在目标Feature中接收完整数组
在
Test.feature
里,你可以直接通过包装时定义的键名(比如
fullRequestArray
)拿到整个数组,然后直接使用:
Feature: 处理完整数组请求的Feature
Scenario: 接收并使用完整JSON数组
# 打印数组验证是否完整接收
* print "完整接收的JSON数组:", fullRequestArray
# 将数组作为请求体发送给接口