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
相关产品推荐
相关产品推荐

