Karate中是否可以在afterScenario块内使用嵌入式表达式?
解决方法
直接在afterScenario的JS函数内使用karate.get() API获取当前场景的变量即可,无需依赖嵌入式表达式。
原因说明
Karate的嵌入式表达式#(xxx)仅会在feature文件的常规配置、请求体、变量定义等原生Karate解析上下文中被自动替换,afterScenario的函数体是作为纯JS逻辑运行的,不会触发嵌入式表达式解析,因此无法识别#(portfolio)写法。
修改后的配置代码
* configure afterScenario = """ function(){ // 直接通过karate.get获取当前场景的portfolio变量 var currentPortfolio = karate.get('portfolio'); var deleteData = { customerData: currentPortfolio }; karate.call('deleteData.feature@deletePortfolio', deleteData); } """
使用说明
你原有的scenario代码不需要做任何调整,每个场景运行结束后触发afterScenario时,karate.get('portfolio')会自动读取当前场景上下文内的portfolio变量值,不同场景的上下文天然隔离,不会出现变量串用的问题。
可选优化
如果部分场景不会生成portfolio变量,可以增加非空判断避免空值报错:
* configure afterScenario = """ function(){ var currentPortfolio = karate.get('portfolio'); // 仅当portfolio存在时执行删除 if (currentPortfolio) { var deleteData = { customerData: currentPortfolio }; karate.call('deleteData.feature@deletePortfolio', deleteData); } } """
内容的提问来源于stack exchange,提问作者hungryhippos
相关产品推荐
相关产品推荐

