我有一个场景,需要将数组作为请求参数循环并传递到几个单独的顺序功能文件,我正在通过javascript循环对此进行编码,但是,我发现第二个功能看不到在中定义的变量第一个功能。
test1.feature
Feature: test1.feature
Scenario: test1.feature
* def batch = 'define batch in test1 feature'
* print ' test1 feature print batch: ',batch
test2.feature
Feature: test2 feature
Scenario: test2 feature
* print 'print batch in test2 feature: ', batch
loop.js
function fn(arr){
for (var i = 0; i < arr.length; i++) {
// var labName = arr[i];
var res1 = karate.call('test1.feature');
var res2 = karate.call('test2.feature');
}
}
demo.feature
Feature: 循环读取所有的实验项目
Scenario: 循环读取所有实验项目-配置文件
* def arr = ['a','b']
* def fun = read('loop.js')
* call fun(arr)
要运行它,我的test2.feature在循环javascript调用时需要test1.feature中的'batch'值,但是,在test2.feature中看不到该批处理
答案 0 :(得分:0)
如果要传递变量,请使用karate.call(fileName, [arg])
。如果您需要多个变量,arg
必须是json。
答案 1 :(得分:0)
默认情况下是,您看不到从一个功能到另一个功能的变量。这显然是一件非常好的事情。
我还建议您不要尽可能使用JS循环。请在此处阅读文档:https://github.com/intuit/karate#loops
如果使用call
keyword,则“调用”功能中将提供“调用”功能的变量。如果在JS中使用karate.call()
,则不会发生这种情况。因此,您必须像这样手动传递所需的变量:
var res1 = karate.call('test1.feature', { batch: batchIfDefined });