Как разделить переменные между бегами по каратэ? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение, которое создает токен один раз, используя karate.callSingle() в моем файле karate-config.

Срок действия этого токена истекает через некоторое время, поэтому мне может потребоваться воссоздать его после некоторых тестов.

Моим планом было бы установить время создания в переменной, которая может использоваться в последующих итерациях файла karate-config, чтобы я мог воссоздать токен, если разница во времени достаточно велика.

Есть ли способ в каратэ, в котором я могу установить переменную в karate-config, которой можно поделиться в последующих итерациях?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

В конце концов я последовал совету Питера Томаса и использовал 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'));
}

с этим простым Java-классом KarateCache

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);
}
0 голосов
/ 28 ноября 2018

Сохраняете ли вы результат callSingle() в переменной?Например:

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

Если вы сохраните время истечения в переменную expirationTime внутри createToken.feature, вы можете получить к нему доступ в karate-config.js как tokenResult.expirationTime.

...