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

Karate中如何仅在测试失败时打印请求响应及相关参数

Karate 测试失败时才打印参数/请求响应的实现方案

方案1:针对单场景自定义失败输出

针对你给出的加法测试场景,可以用try-catch包裹断言逻辑,仅断言进入异常分支时打印参数,随后重新抛出异常保证用例正常标记为失败,修改后的代码如下:

Feature: Validate Addition.
  Scenario Outline: Verify Addition
    * def sum = <num1> + <num2>
    * try {
        match sum == 10
      } catch (e) {
        print "断言失败,参数为:number1:" + num1 + " number2:" + num2
        throw e
      }
    Examples:
      | num1 | num2 |
      | 5    | 5    |
      | 7    | 3    |
      | 3    | 8    |
      | 1    | 5    |
      | 1    | 9    |

方案2:全局配置所有失败用例自动打印

如果是API测试场景需要统一在所有用例失败时打印请求、响应、自定义参数,可以在karate-config.js中配置全局afterScenario钩子,无需修改单个用例代码,配置示例如下:

function fn() {
  var config = {};
  // 全局场景后钩子
  karate.configure('afterScenario', function(){
    var scenarioInfo = karate.info;
    // 判断场景是否执行失败
    if (scenarioInfo.errorMessage) {
      // 打印API请求响应信息
      karate.log('--- 用例失败明细 ---');
      karate.log('请求地址:', karate.get('requestUrl'));
      karate.log('请求内容:', karate.get('request'));
      karate.log('响应状态码:', karate.get('responseStatus'));
      karate.log('响应内容:', karate.get('response'));
      // 按需打印自定义参数
      if (karate.exists('num1')) karate.log('num1:', karate.get('num1'));
      if (karate.exists('num2')) karate.log('num2:', karate.get('num2'));
    }
  });
  return config;
}

优化建议

Karate 默认生成的HTML测试报告(默认存放在target/karate-reports路径下)已经会自动记录所有失败用例的完整上下文、请求响应、变量值信息,不需要额外编写打印逻辑,可进一步提升测试执行效率,仅当你需要自定义控制台实时输出时再使用上述两种方案。

内容的提问来源于stack exchange,提问作者Sourabh Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:01