首页 > 解决方案 > 空手道框架:将从 csv 读取的值作为参数传递给 javaprogram

问题描述

如何使用空手道框架将值作为参数动态传递给 java 程序。

我正在尝试从 csv 文件中读取数据。转换为json格式

CSV 数据

FirstName,MiddleName,LastName
"John","K","Kennady"
"Mahesh","g",Readdy"
* def csvData = read('csv Data')
* read csvData

读取 csvData 的输出

[{"FirstName" : "John","MiddleName" : "K", "LastName" : "Kennady"},{"FirstName" : "Mahesh","MiddleName" : "g", "LastName" : "Readdy"}]

我能够从 json 中提取值,结果如下所示

values = ["John", "K", "Kennady"]

我应该将值作为参数传递给下面的命令 JavaDemo.doWorkStatic

* def JavaDemo = Java.type('com.mycompany.JavaDemo')
* def result = JavaDemo.doWorkStatic('Firstname','MiddleName','lastname')

在 javascript 中,我们可以将数组分配给可以分配给 java 参数的数组。但是以下步骤在空手道框架中是不可能的

[a, b ,c ] = Values
cosnole.log(a)
cosnole.log(b)
cosnole.log(c)
def result = JavaDemo.doWorkStatic(a,b,c)

我怎样才能实现将值作为参数传递的最后一步

标签: javascriptjavakarate

解决方案


干得好:

* def v = ['John', 'F', 'Kennedy']
* def result = JavaDemo.doWorkStatic(v[0], v[1], v[2])

空手道不是JavaScript。如果您想更改任何内容,请提供代码。

编辑:请注意 JSON 数组会自动转换为 Java List-s。请阅读文档:https ://github.com/intuit/karate#calling-java

例如,如果你有这个:

public static String concat(List<String> list) {
    StringBuilder sb = new StringBuilder();
    for (String s : list) {
        sb.append(s);
    }
    return sb.toString();
}

你可以这样做:

* def array = ['a', 'b', 'c']
* def res = Utils.concat(array)

推荐阅读