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

如何在Karate中接收Java API的多值/数组及传递Excel读取的WSDL与XML请求

我来帮你搞定这两个问题,结合你已经在Java端完成Excel读取的前提,给你具体的实现方案:

一、传递WSDL路径和XML请求两个独立参数

你之前已经掌握了单个值的传递方式,要传两个参数其实很简单,只要在Java方法里定义多参数输入,然后在Karate中直接传入对应变量即可:

Java端代码示例

package com.org.utilities;

public class APIHelperClass {
    // 接收WSDL路径和XML请求两个参数,可根据你的需求处理后返回结果
    public static String processWsdlRequest(String wsdlPath, String xmlRequest) {
        // 这里可以加入你的业务逻辑,比如基于WSDL校验XML、生成请求等
        return "处理后的响应结果";
    }
}

Karate Feature文件调用示例

# 假设你已经通过Java读取Excel,把WSDL路径和XML请求存入以下变量
* def targetWsdl = "从Excel读取的WSDL路径"
* def requestXml = "从Excel读取的XML请求内容"

# 引入Java工具类
* def APIHelperClass = Java.type('com.org.utilities.APIHelperClass')
# 直接传入两个参数调用方法
* def processResult = APIHelperClass.processWsdlRequest(targetWsdl, requestXml)

# 后续可使用processResult做断言或其他操作
* print "处理结果:", processResult

如果需要传递更多参数,或者想让参数结构更清晰,也可以把WSDL和XML封装成一个Java DTO对象,在Karate中直接传递对象实例,调用时通过.访问属性即可。

二、从Java API获取值数组/列表

如果Excel里有多行数据(比如多组WSDL+XML请求),你可以让Java方法返回数组或List集合,Karate原生支持直接操作Java集合,下面分两种常见场景说明:

场景1:Java返回数组/List,在Karate中遍历处理

Java端代码示例

package com.org.utilities;

import java.util.List;
import java.util.ArrayList;

public class APIHelperClass {
    // 返回多组WSDL+XML数据,用List<Object[]>存储每行数据
    public static List<Object[]> getBatchExcelData() {
        List<Object[]> batchData = new ArrayList<>();
        // 模拟从Excel读取的多行数据,每个数组元素是[WSDL路径, XML请求]
        batchData.add(new Object[]{"wsdl_path_1", "<xml>请求内容1</xml>"});
        batchData.add(new Object[]{"wsdl_path_2", "<xml>请求内容2</xml>"});
        return batchData;
    }

    // 也可以返回自定义对象的List,可读性更强
    public static List<ExcelRequest> getBatchRequestObjects() {
        List<ExcelRequest> requestList = new ArrayList<>();
        requestList.add(new ExcelRequest("wsdl_path_1", "<xml>请求内容1</xml>"));
        requestList.add(new ExcelRequest("wsdl_path_2", "<xml>请求内容2</xml>"));
        return requestList;
    }

    // 自定义DTO类,用于封装每组请求数据
    public static class ExcelRequest {
        private String wsdlPath;
        private String xmlContent;

        public ExcelRequest(String wsdlPath, String xmlContent) {
            this.wsdlPath = wsdlPath;
            this.xmlContent = xmlContent;
        }

        // 提供getter方法,Karate才能访问属性
        public String getWsdlPath() { return wsdlPath; }
        public String getXmlContent() { return xmlContent; }
    }
}

Karate端调用与遍历示例

* def APIHelperClass = Java.type('com.org.utilities.APIHelperClass')

// 方式1:处理Object[]类型的List
* def batchData = APIHelperClass.getBatchExcelData()
* batchData.forEach(item => {
    def currentWsdl = item[0]
    def currentXml = item[1]
    print "当前处理:WSDL=", currentWsdl, ",XML请求=", currentXml
    // 这里可以加入你的接口调用逻辑,比如:
    // Given url currentWsdl
    // And request currentXml
    // When method post
    // Then status 200
})

// 方式2:处理自定义对象的List(可读性更好)
* def requestObjects = APIHelperClass.getBatchRequestObjects()
* requestObjects.forEach(obj => {
    print "WSDL路径:", obj.wsdlPath, ",XML内容:", obj.xmlContent
    // 同样可以在这里执行接口请求逻辑
})

场景2:把数组传递给子Feature文件使用

如果需要把数组数据传递给另一个Feature文件复用,可以通过call关键字传入:

主Feature文件

* def APIHelperClass = Java.type('com.org.utilities.APIHelperClass')
* def batchRequestData = APIHelperClass.getBatchRequestObjects()

// 调用子Feature,把数组数据传进去
* call read('batch-process.feature') { requestList: batchRequestData }

子Feature文件(batch-process.feature)

Feature: 批量处理WSDL请求

Scenario Outline: 处理每组请求数据
    Given url <wsdlPath>
    And request <xmlContent>
    When method post
    Then status 200

    Examples:
        | requestList |

Karate会自动把requestList中的每个对象拆分成Scenario Outline的参数,自动遍历执行所有用例。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:39