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
相关产品推荐
相关产品推荐

