我最近将 Karate 从 1.2.0 和 Java 8 更新到 1.4.1 和 Java 11。之前我在 karate-config.js 中全局定义了 Javascript 函数和 Java 类型,这些都是经常使用的。
config.isValidDateTime = read('classpath:validators/datetime-validator.js')
config.TimestampObject = Java.type('utils.Timestamp')
对于 Java 类型,这似乎不再起作用,我无法执行这些方法。当我打电话时
* set userProfile.firstName = UserMockHelper.getRandomFirstName();
我收到错误消息:
org.graalvm.polyglot.PolyglotException: ReferenceError: "UserMockHelper" is not defined
场景中仍然可以直接执行Javascript函数,但在JSON验证中不起作用,例如
And match response.docs[0] contains { timestamp: "#? isValidDateTime(_)" }
我现在总是收到以下错误消息:
TypeError: execute on {} failed due to: Message not supported.
当您在配置中提到时间戳设置时,您的示例有点令人困惑,但您显示的错误是针对 UserMockHelper 的。 您似乎还在帖子中混合了 js 和 java 设置。
注意:最好将每个问题单独发布。 我将解决 java 设置问题,并要求将 js 问题发布在单独的票证中。
对于java类型问题,可以尝试这样的设置。 我们在 karate.config 中设置以下内容
config.commonUtils = Java.type('commonutilhelpers.CommonUtils')
config.dateUtils = Java.type('commonutilhelpers.DateTime')
config.fileUtils = Java.type('commonutilhelpers.FileUtils')
config.rndUtils = Java.type('commonutilhelpers.RandomUtils')
这些指向各种 java 文件,其中包含在众多测试中使用的常用函数。
日期时间的示例 java 文件
package commonutilhelpers;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class DateTime {
public static String customCalendar(String fromJs, Integer Year, Integer Month, Integer Day, Integer Hour,
Integer Minute, Integer Second) {
SimpleDateFormat sdf = new SimpleDateFormat(fromJs);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, Year);
cal.add(Calendar.MONTH, Month);
cal.add(Calendar.DAY_OF_MONTH, Day);
cal.add(Calendar.HOUR, Hour);
cal.add(Calendar.MINUTE, Minute);
cal.add(Calendar.SECOND, Second);
String dateAfter = sdf.format(cal.getTime());
return dateAfter;
}
}
功能内的使用
* def deferredUntilDate = dateUtils.customCalendarUTC("yyyy-MM-dd'T'HH:mm:ss'Z'", 0,0,7,0,0,0)