You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate执行期间能否维护可设置与清除的全局hash map?

Karate中维护可设置/重置的全局哈希表

当然可以,Karate提供了几种实用方式实现这种可操作的全局哈希表,以下是具体方案:

1. 利用Karate内置全局变量

Karate的karate.set()和karate.get()方法可直接操作全局变量,用来维护哈希表十分便捷:

  • 初始化全局哈希表:
* karate.set('globalMap', {})
  • 设置哈希表键值对:
* karate.set('globalMap.username', 'testUser')
* karate.set('globalMap.token', 'abc123')
  • 获取哈希表中的值:
* def username = karate.get('globalMap.username')
* print '当前用户名:', username
  • 重置哈希表:
    直接重新赋值为空对象即可清空所有数据:
* karate.set('globalMap', {})

2. 封装公共工具脚本(跨场景共享)

如果需要在多个feature文件中共享这个全局哈希表,可以创建公共工具脚本,通过karate.callSingle()确保只初始化一次:

比如创建global-store.feature:

Feature: 全局哈希表工具

Background:
* karate.set('globalMap', {})

Scenario: 设置键值
* def setGlobal = (key, value) => karate.set('globalMap.' + key, value)

Scenario: 获取值
* def getGlobal = (key) => karate.get('globalMap.' + key)

Scenario: 重置哈希表
* def resetGlobalMap = () => karate.set('globalMap', {})

然后在测试脚本中引入使用:

* def globalStore = karate.callSingle('classpath:global-store.feature')
* globalStore.setGlobal('orderId', '12345')
* def orderId = globalStore.getGlobal('orderId')
* globalStore.resetGlobalMap()

注意事项

  • 并行测试时,Karate会为每个线程维护独立的全局上下文,全局哈希表不会在并行线程间互相干扰,无需额外处理线程安全。
  • 如果在Background中初始化哈希表,确保逻辑只执行一次,避免重复覆盖数据。

内容的提问来源于stack exchange,提问作者Deepak Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:53:15