Karate Mock中Background变量是否线程安全?
Karate Mock中
testData变量的线程安全性问题 你的场景下不会出现键丢失,但testData本身并非线程安全的容器。
具体说明
- 你当前的三个并行请求操作的是不同的键(1、2、3),JavaScript普通对象对不同属性的赋值是独立操作,不会互相干扰,所以不会出现键丢失的情况。
- 但如果多个请求同时修改同一个键,普通JS对象的赋值是非原子操作,后执行的请求会覆盖先执行的,就会出现数据丢失。
- Karate Mock文档里说的线程安全,指的是框架本身对请求的处理是隔离的(比如每个请求的
request对象互不影响),但它不会自动让你定义的自定义变量变成线程安全的。你用的testData是普通JS对象,本身没有并发保护机制。
优化方案
如果之后有并发修改同一键的需求,或者想要更稳妥的线程安全保障,可以改用Java的ConcurrentHashMap:
* def ConcurrentHashMap = Java.type('java.util.concurrent.ConcurrentHashMap') * def testData = new ConcurrentHashMap()
这个容器本身支持原子性的读写操作,能避免并发修改带来的数据覆盖或丢失问题。
内容的提问来源于stack exchange,提问作者Egor
相关产品推荐
相关产品推荐

