Karate场景大纲与示例表中如何将变量作为字符串传入取值
问题核心说明
Karate 中 Scenario Outline 的 Examples 表格占位符替换是纯文本行为,不会自动解析表格内容里的变量或表达式,这是你之前所有写法都不生效的根本原因:<占位符>替换完成后,你写的#(userid)只是普通字符串,Karate的#()变量占位符仅在JSON/XML构造、匹配断言等场景自动解析,直接赋值为请求头时不会处理字符串内部的占位符。
可行解决方案
方案1:模板替换法(更直观易维护,推荐)
先在Examples的UA字符串里自定义简单占位符,再在步骤中替换为实际变量值即可:
Feature: Scenario outline with examples table Background: * url 'http://localhost:8080' * def dummy = Java.type(karatetests.attributes) * def test = new attributes() * def userid = test.getuserid() Scenario Outline: pass userid with string as parameter Given path '<path>' And Header Host = 'hostname' # 先拿到UA模板,再替换自定义占位符 * def uaTemplate = '<Ua-string>' * def finalUa = uaTemplate.replace('{userid}', userid) And Header User-Agent = finalUa When method POST Then status 200 Examples: | path | Ua-string | | api | AppleWebKit/537.36 (KHTML, like Gecko, {userid})|
方案2:表达式执行法(适合需要灵活写逻辑的场景)
在Examples里直接写合法的JS字符串拼接表达式,再用karate.eval()执行表达式拿到最终值:
Scenario Outline: pass userid with string as parameter Given path '<path>' And Header Host = 'hostname' # 执行Examples里的JS表达式得到最终UA And Header User-Agent = karate.eval('<Ua-string>') When method POST Then status 200 Examples: | path | Ua-string | | api | 'AppleWebKit/537.36 (KHTML, like Gecko, ' + userid + ')'|
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

