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

Karate框架:重试至条件满足时打印日志及重试前打印实际/预期值的方法

Karate框架重试时的日志打印与值输出实现方法

一、实现重试至条件满足时打印日志

Karate的retry关键字是实现重试逻辑的核心,你可以结合条件判断和日志语句,在重试满足条件后打印结果,甚至在重试过程中输出中间状态:

方式1:满足条件后打印最终日志

直接在重试完成后添加print语句,仅在条件达成时输出成功日志:

Scenario: 重试直到请求成功并打印结果
Given url 'http://target-api.com/status'
When method get
Then retry until response.status == 200
And print "重试成功!当前接口状态码: ", response.status

方式2:重试过程中打印中间状态

如果需要监控每次重试的失败情况,可以在重试块内添加条件判断,失败时打印日志并触发继续重试:

Scenario: 重试过程中输出状态,成功后打印结果
Given url 'http://target-api.com/status'
When method get
Then retry 5 times every 1000 ms  # 指定最多重试5次,间隔1秒
And if response.status != 200
    print "重试中... 当前状态码: ", response.status, ",未达到预期200"
    karate.fail("状态码不符合要求,触发下一次重试")
And print "最终重试成功,接口状态码: ", response.status

二、重试执行前打印实际值与预期值

要在每次重试开始前输出实际值和预期值,推荐使用Karate的脚本式重试(karate.retry()函数),这样能更灵活地控制重试前后的逻辑:

Scenario: 每次重试前打印实际与预期值
* def expectedStatus = 200
* def retryResult = karate.retry(3, 500, function() {
    // 重试前先打印预期值
    karate.log("即将执行重试:预期状态码 =", expectedStatus)
    // 发送请求获取实际值
    var res = karate.get('http://target-api.com/status')
    // 打印当前实际值
    karate.log("重试前实际状态码 =", res.status)
    // 返回判断结果,true则停止重试,false则继续
    return res.status == expectedStatus
})
* print "重试成功!最终状态码: ", retryResult.response.status

如果偏好Gherkin风格,也可以将打印逻辑嵌入重试的判断流程中,确保每次重试判断前执行输出:

Scenario: Gherkin风格重试前打印值
Given url 'http://target-api.com/status'
* def expected = 200
When method get
Then retry 3 times every 500 ms
And print "重试检查:预期值 =", expected, ",当前实际值 =", response.status
And match response.status == expected

内容的提问来源于stack exchange,提问作者Nagulan S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:23:32