我想在feature文件后台调用一次java方法,将该方法的值赋给一个变量并跨场景共享

问题描述 投票:0回答:1

java类

public class Utilities {


    public static String generateRandomString(int length) {
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int index = (int) (Math.random() * chars.length());
            sb.append(chars.charAt(index));
        }
        return sb.toString();
    }
}

功能文件

Background:
    * def RandomStringGenerator = Java.type('Utilities')
    * def randomString = callonce RandomStringGenerator.generateRandomString(10)
    * print 'a'+randomString

  Scenario: Use Random String
    * print 'b'+randomString

  Scenario: Use Random String in scenario2
    * print 'c'+randomString

randomString 打印 null 而不是生成的字符串。我正在使用空手道 0.9.5 版本,如果有帮助的话

karate karate-call-single
1个回答
0
投票

callonce 理想地仅用于“纯”JSON。如果您尝试混合 JS 函数或 Java,您可能会遇到问题。 如下所示替换功能文件。您错过了添加 java 类 Utilities 的包名称。

Feature: call java static method

  Background: 
    * def JavaDemo = Java.type('com.tests.Utilities')
    * def result = JavaDemo.generateRandomString(10)
    * print 'a'+result

  Scenario: Use Random String
    * print 'b'+result

  Scenario: Use Random String in scenario2
    * print 'c'+result

官方空手道文档:https://github.com/karatelabs/karate#calling-java

© www.soinside.com 2019 - 2024. All rights reserved.