Karate 1.3中@setup与@env执行顺序疑问:@setup是否无视@env触发?
Karate 1.3中@setup与@env注解的执行逻辑说明
是的,这是Karate 1.3版本的设计行为。
在Karate 1.3中,@setup场景的执行优先级高于@env注解的过滤逻辑。框架会先加载所有.feature文件中的@setup场景并执行,之后才会根据当前设置的环境变量评估@env注解,过滤掉不符合条件的普通场景(非@setup类型)。因此即使某个.feature文件的@env标签与当前运行环境不匹配,它的@setup场景依然会被执行。
以你的示例为例:当env设置为prod时,cb.feature的@env=Unit,itg,cat与当前环境不匹配,它的Scenario Outline会被过滤不执行,但@setup场景会先于@env评估步骤运行,所以你会看到对应的日志输出。
如果需要让@setup场景也受@env控制,可以通过以下两种方式处理:
在@setup内部添加环境判断:在
@setup场景开头加入环境校验逻辑,不匹配则终止执行:@setup Scenario: * def currentEnv = karate.env * if (!(currentEnv in ['Unit', 'itg', 'cat'])) karate.abort() * print '***** SETUP cb.feature ********' * json datesUnderTest = karate.properties['dates.under.test']升级到Karate 1.4+版本:Karate 1.4及后续版本调整了执行逻辑,
@env的过滤会先于@setup场景执行,只有符合环境条件的.feature文件,其@setup才会被触发运行。
内容的提问来源于stack exchange,提问作者TMac
相关产品推荐
相关产品推荐

