You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

场景失败时afterScenario钩子未执行的技术咨询

问题解答

核心问题分析

你当前的问题主要有两个关键点:

  1. 钩子配置代码未执行:你的afterScenario配置写在断言失败的步骤之后,当Then assert responseStatus =200失败时,场景直接终止,后面的JIRA连接配置代码根本没机会运行,钩子从未被注册,自然不会触发。
  2. 钩子配置被覆盖:即使配置代码能执行,多次调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:06:08