【问题标题】:Karate Retry Logic and Configuration空手道重试逻辑和配置
【发布时间】:2020-03-09 13:32:19
【问题描述】:

我正在寻找有关 retry until 和 karate.configure 重试行为的一些说明。

当我在空手道配置中设置全局重试时: karate.configure('retry', { count: 3, interval: 5000 }); karate.configure('connectTimeout', 5000); karate.configure('readTimeout', 10000);

我希望这可以重试任何失败的 HTTP 请求,而无需在功能级别上进行任何“重试直到逻辑/代码”。

当我运行测试套件并且请求获得读取超时时,我没有看到套件运行重试:

2:53:42.491 [main] 错误 com.intuit.karate - java.net.SocketTimeoutException:读取超时,URL 的 http 调用在 10008 毫秒后失败:http://sports/list 12:53:42.495 [main] 错误 com.intuit.karate - http 请求失败:

java.net.SocketTimeoutException: 读取超时

特征:类路径:features/list.feature

场景:11 |通过:10 |失败:1 |时间:55.7829

HTML 报告:(粘贴到浏览器查看)|空手道版本:0.9.4 文件:/usr/src/app/test/functional/target/surefire-reports/features.list.html

即使我添加了Background: * retry until responseStatus == 200 在此功能中,测试仍然不会运行重试。

【问题讨论】:

    标签: karate


    【解决方案1】:

    retry until 仅在建立连接并且服务器返回 HTTP 响应后才起作用。它旨在处理需要轮询特定 responseStatusresponse 数据元素的情况。

    因此它不包括无法建立连接的情况 - 或者在您的情况下服务器响应时间过长的情况。您可能需要增加readTimeout

    【讨论】:

    • 谢谢,如果无法连接到服务器,有没有办法让场景重试?
    • @NathanGouldman 老实说,从来没有人要求过这个,通常如果你无法连接,所有的赌注都会被取消。另请注意,幕后使用的 apache-httpclient 将重试 3 次(与空手道的重试完全不同),因此您可能会在日志中看到这一点,这可能会造成混淆。我相信正因为如此,没有人需要更多的方法来重试
    • 如果您连接的服务器可能由于防火墙等各种原因或性能问题而变慢,该怎么办?我遇到过服务器中的某些端点出现问题并导致该测试超时甚至失败的情况。并且其他端点可用且性能更高。
    • @KonstantinosKollias 是的!在 0.9.6.RC4 中,我们在 karate JS API 上有两个方法,称为 karate.waitForHttp(url)karate.waitForPort(hostname, portnumber) 让我知道这是否有效:github.com/intuit/karate/tree/develop#karate-waitforhttp
    • @KonstantinosKollias 当然。你可以使用waitForPort()。是的,它不可配置,但足以满足 99% 的用例。它背后的代码非常简单,如果需要,可以编写自己的 Java util。当然,欢迎 PR :P
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多