在js代码中循环时,第二个功能无法在第一个功能中看到定义的变量

时间:2019-06-14 09:43:44

标签: karate

我有一个场景,需要将数组作为请求参数循环并传递到几个单独的顺序功能文件,我正在通过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中看不到该批处理

2 个答案:

答案 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 });