如何在空手道中的功能运行之间共享变量?

时间:2018-11-27 19:29:18

标签: karate

我有一个应用程序,可以通过在karate.callSingle()文件中使用karate-config来一次创建令牌。

该令牌在一段时间后会过期,因此我可能需要在进行一些测试后重新创建它。

我的计划是在karate-config文件的后续迭代中共享一个变量中设置创建时间,以便在时差足够大的情况下重新创建令牌。

空手道中是否有一种方法可以在karate-config中设置一个可以在后续迭代中共享的变量?

2 个答案:

答案 0 :(得分:2)

最后,我遵循了Peter Thomas的建议,并通过在功能之间“缓存”属性来使用Java。这是我的实现:

var tokenRefreshTimeInMinutes = 5;
var myToken = {};
var KarateCache = Java.type('KarateCache');
var lastRefreshTime = KarateCache.get('lastRefreshTime');

if (!lastRefreshTime || differenceInMinutes(new Date(lastRefreshTime), new Date()) >= tokenRefreshTimeInMinutes) {
    myToken = karate.call('theFileRefreshingTheToken');
    KarateCache.add('lastRefreshTime', new Date().toUTCString());
    KarateCache.add('myToken', JSON.stringify(myToken));
} else {
    myToken = JSON.parse(KarateCache.get('myToken'));
}

通过这个简单的KarateCache Java类

private static final Map<String, String> KARATE_CACHE = new ConcurrentHashMap<>();

public static void add(String key, String value) {
    KARATE_CACHE.put(key, value);
}

public static String get(String key) {
    return KARATE_CACHE.get(key);
}

答案 1 :(得分:1)

您是否将callSingle()的结果存储到变量中?喜欢:

var tokenResult = karate.callSingle('createToken.feature', config);

如果将到期时间保存到expirationTime内的变量createToken.feature中,则可以在karate-config.js中以tokenResult.expirationTime的形式访问它。