场景失败时afterScenario钩子未执行的技术咨询
问题解答
核心问题分析
你当前的问题主要有两个关键点:
- 钩子配置代码未执行:你的
afterScenario配置写在断言失败的步骤之后,当Then assert responseStatus =200失败时,场景直接终止,后面的JIRA连接配置代码根本没机会运行,钩子从未被注册,自然不会触发。 - 钩子配置被覆盖:即使配置代码能执行,多次调用
configure afterScenario会覆盖之前的配置,最终只有最后一行的CreateTestExecution会生效,前两个Jira操作不会被执行。
关于公开Bug
你提到的相似问题确实存在于Karate早期版本中,当时场景失败时afterScenario钩子不会执行,但该问题已在后续版本(如v1.3.0及以上)中修复,建议你升级到最新稳定版的Karate。
修复方案
1. 提前配置钩子
将afterScenario的配置移到场景执行前的背景块中,确保无论场景成功还是失败,钩子都已被注册:
背景: # 输入用户故事编号 def userStory = 'MMM-3781' # 测试变量初始化 def util = call read('classpath:common.feature') def readId = util.UUID() # 提前配置Jira同步钩子 def JavaD = Java.type('com.amex.api.automation.JavaIntegration_QA') # 合并所有Jira操作到一个钩子函数 configure afterScenario = function(){ // 创建测试用例 JavaD.CreateTestCase(userStory, karate.scenario.name, scenarioDescription); // 创建测试步骤 JavaD.CreateTestStep(step_1, read('../request/Payload.json'), createWorkspace.response, userStory, karate.scenario.name); // 创建测试执行记录 JavaD.CreateTestExecution(karate.scenario.name, userStory, karate.scenario.message); } @MMM-3781 场景:BlackBeltFramework连接测试第七部分 def scenarioDescription = '验证Black-Belt Framework与MMM Jira Board的连接,测试函数为CreateControlTowerCashTransferBST' def step_1 = '创建控制层现金转账' def createWorkspace = call read('../API_calls/CreateControlTowerCashTransferBST.feature') {Authorization: 'a2a', id: 'readId'} Then assert responseStatus == 200
2. 合并Jira操作(可选)
如果觉得Karate函数里写多个Java调用不够简洁,可以在你的JavaIntegration_QA类中新增一个统一的同步方法,比如:
public static void syncAllToJira(String userStory, String scenarioName, String scenarioDesc, String stepName, String payload, String response, String scenarioMessage) { CreateTestCase(userStory, scenarioName, scenarioDesc); CreateTestStep(stepName, payload, response, userStory, scenarioName); CreateTestExecution(scenarioName, userStory, scenarioMessage); }
然后在Karate中简化配置:
configure afterScenario = JavaD.syncAllToJira(userStory, karate.scenario.name, scenarioDescription, step_1, read('../request/Payload.json'), createWorkspace.response, karate.scenario.message)
3. 升级Karate版本
确保你使用的Karate版本是v1.3.0及以上,避免旧版本中场景失败不触发钩子的Bug。
内容的提问来源于stack exchange,提问作者Lizzi Diaz Lopez
相关产品推荐
相关产品推荐

