2

我是软件测试的新手,并且在空手道环境中工作。目前我正在处理一个故事,我必须测试数据库条目的最大数量是否正常工作 - 当达到最大条目数(20)时,程序返回 400 错误和一条消息,指出最大条目有已达到。

当已经有 20 个条目时,我们在空手道中的场景通过并且工作正常,但情况并非总是如此,因为不同的测试正在创建和删除条目,因为它们正在处理和运行。目前我已经设置了代码来计算最大化数据库所需的规则数(maxTotalRules-ruleCount)并将其解析为一个 int。然后我将它和一个随机字符串传递给 Java 方法。然后,java 方法使用 for 循环创建一个名称数组(abcd_1、abcd_2 等),无论数据库在其当前状态下需要多少名称,然后返回该数组。

所以我在调用中有我的变量定义,然后记录结果变量以查看它包含它应该包含的内容:

* def ruleNameArray = objUtility.createRuleNameArray(newRuleBase, maxDiffParse)
* karate.log(ruleNameArray)

不过我的问题是空手道中的数组通常打印如下:

[
  1,
  2
]

返回的数组打印如下:

Automation_Rule-botrrxyo_1 Automation_Rule-botrrxyo_2 Automation_Rule-botrrxyo_3

它在一行中打印,几乎就像是一个大字符串,而不是像数组一样出来。当我尝试使用该数组来构建要传递给我的 API 以添加新数据库条目的请求主体时,我收到以下错误消息:“java.lang.RuntimeException: not map-like or list-like”

这可能是一个很长的解释,但本质上我的问题是为什么我的 Java 方法返回没有被作为数组接收?我该如何解决这个问题?

如果需要上下文/确保我的方法编写正确,这里是 Java 方法:

public String[] createRuleNameArray(String nameBase, int numOfNamesNeeded) {
        String[] ruleNameArray;
        ruleNameArray = new String[numOfNamesNeeded];

        for(int i=0; i < numOfNamesNeeded; i++) {
            ruleNameArray[i] = nameBase+(i+1);
            System.out.println(ruleNameArray[i]);
        }
        return ruleNameArray;
    }
4

1 回答 1

0

我猜您使用的是 1.0.1 版本,并且该版本可能存在 Java 字符串数组未正确转换为 JSON 数组的限制。

应该立即工作的解决方案是 - 请您尝试List<String>从 JavacreateRuleNameArray()函数返回 - 然后事情应该可以工作。

如果您可以尝试空手道 1.1.0.RC5 并让我们知道这是否解决了上述限制,这也将非常有帮助。

于 2021-07-27T05:42:56.053 回答