能否像callonce一样将callSingle的结果读取到当前作用域?
解决Karate中callSingle结果无前缀访问+全局单次调用的问题
1. 用callonce直接搞定(优先推荐)
如果所有测试用例共享同一套常量,直接在每个feature的Background里写:
Background: * callonce read('callonceVScallsingleInfo.feature')
别担心重复调用——Karate的callonce是整个测试进程只跑一次,哪怕100个feature都在Background里调用它,也只会执行一次。而且它会自动把被调用feature返回的所有变量直接丢进当前作用域,不用加任何前缀,完全符合你的需求。
2. 给callSingle的结果“拆包”
如果必须用callSingle(比如要传参数区分场景),可以用karate.set()把返回的JSON对象拆成顶级变量,省去前缀:
Background: * def constants = karate.callSingle('callonceVScallsingleInfo.feature') * karate.set(constants)
执行完这两行,constants里的baseUrl、token之类的变量,直接写变量名就能用,不用再写constants.baseUrl。
3. 按feature组区分常量的玩法
如果不同组的feature需要不同的常量值,同时要保证每组常量只加载一次,这么玩:
第一步:给feature打分组标签
比如给A组的feature加@groupA,B组加@groupB:
@groupA Feature: A组接口测试 # ...测试步骤
第二步:写支持分组的常量feature
创建constants.feature,根据传入的分组参数返回对应常量:
Feature: 分组常量配置 Scenario: * def group = __arg.group * def constants = group == 'A' ? { baseUrl: 'https://a.example.com', token: 'a-token-123' } : { baseUrl: 'https://b.example.com', token: 'b-token-456' } * return constants
第三步:在测试feature的Background里调用
Background: # 根据当前feature的标签判断分组 * def group = karate.tag('groupA') ? 'A' : 'B' # 同一分组的所有feature只会调用一次这个常量文件 * def constants = karate.callSingle('constants.feature', { group: group }) # 拆包常量到当前作用域 * karate.set(constants)
这样同一组的feature共享一套只加载一次的常量,还不用加前缀。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

