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

如何在Karate主功能文件中访问Mock服务器变量或请求记录

Karate中跨Feature共享Mock服务器捕获的变量解决方案

你需要验证API1响应中的transactionId与Mock服务器收到的API2请求中的transactionId一致,但Mock Feature里定义的tranRef无法在主Feature中访问——这是因为Karate默认隔离不同Feature的变量作用域,得通过全局状态存储来实现跨Feature的变量共享,以下是两种可行方案:

方案1:用karate.set()存储全局变量

修改Mock Feature,把捕获到的tranRef存入Karate全局作用域:

Feature:  stateful mock server

Background: Mock

Scenario: pathMatches('/abcd') && bodyPath('/Envelope/Body/infoRequest')!= null
    
    * match karate.typeOf(request) == 'xml'
      
    * xml respInfo = read('classpath:org/xbspro/hos/payloads/infoResponse.xml')
    * def tranRef = $request/Envelope/Body/infoRequest/transactionId
    # 将变量存入全局作用域
    * karate.set('globalTranRef', tranRef)

    * set respInfo/Envelope/Body/infoResponse/transactionId= tranRef 
 
    * def response = respInfo

主Feature中从全局作用域取变量并断言:

* call read('classpath:Abstract.feature')
* xml remResp = response
# 获取Mock捕获的transactionId
* def mockTranRef = karate.get('globalTranRef')
# 验证两个值一致
* match remResp //transactionId == mockTranRef

方案2:通过callSingle返回值传递变量

如果Mock服务器是用callSingle启动的,可直接通过返回值传递变量:
修改Mock Feature,把tranRef作为返回结果的一部分:

Feature:  stateful mock server

Background: Mock

Scenario: pathMatches('/abcd') && bodyPath('/Envelope/Body/infoRequest')!= null
    
    * match karate.typeOf(request) == 'xml'
      
    * xml respInfo = read('classpath:org/xbspro/hos/payloads/infoResponse.xml')
    * def tranRef = $request/Envelope/Body/infoRequest/transactionId

    * set respInfo/Envelope/Body/infoResponse/transactionId= tranRef 
 
    * def response = respInfo
    # 返回捕获的transactionId
    * def result = { tranRef: tranRef }

主Feature启动Mock时接收返回值:

# 启动Mock并接收返回的变量
* def mockResult = callSingle('classpath:your-mock.feature')
* call read('classpath:Abstract.feature')
* xml remResp = response
# 验证一致性
* match remResp //transactionId == mockResult.tranRef

注意事项

  • 用全局变量时,若涉及并行测试可能出现变量冲突,建议测试结束后用karate.remove('globalTranRef')清理变量。
  • 确保Mock服务器在API1请求前已启动,且请求能正确路由到Mock。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:25:28