Каратэ 0.9.5.RC5 - функция «повторить до» почему-то не соответствует моей конфигурации «повторных попыток» в karate-config. js - PullRequest
2 голосов
/ 10 января 2020

У меня есть следующий тест:

Feature: News API

  Background:
    * url baseUrl

  Scenario: get news index
    Given path "/"
    And retry until responseStatus == 200
    When method get
    Then status 200
    And match response contains "News service up and running"

и следующий karate-config. js

function fn() {
    // get java system property 'karate.env'
    var env = karate.env;
    karate.log('karate.env system property was:', env);

    var config = {
        baseUrl: 'http://localhost:8080',
    };

    karate.configure('retry', {count: 5, interval: 6000});
    karate.configure('connectTimeout', 5000);
    karate.configure('readTimeout', 5000);

    return config;
}

и следующая ошибка в консоли после выполнения тестов с maven -failsafe-plugin:

...
[INFO] Running newsservice.NewsServiceIT
[main] INFO  o.a.http.impl.execchain.RetryExec - I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8080: The target server failed to respond
[main] INFO  o.a.http.impl.execchain.RetryExec - Retrying request to {}->http://localhost:8080
[main] INFO  o.a.http.impl.execchain.RetryExec - I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8080: The target server failed to respond
[main] INFO  o.a.http.impl.execchain.RetryExec - Retrying request to {}->http://localhost:8080
[main] INFO  o.a.http.impl.execchain.RetryExec - I/O exception (org.apache.http.NoHttpResponseException) caught when processing request to {}->http://localhost:8080: The target server failed to respond
[main] INFO  o.a.http.impl.execchain.RetryExec - Retrying request to {}->http://localhost:8080
[main] ERROR com.intuit.karate - org.apache.http.NoHttpResponseException: localhost:8080 failed to respond, http call failed after 2 milliseconds for URL: http://localhost:8080/
[main] ERROR com.intuit.karate - http request failed: 
org.apache.http.NoHttpResponseException: localhost:8080 failed to respond
---------------------------------------------------------
feature: classpath:newsservice/news/news-index.feature
scenarios:  1 | passed:  0 | failed:  1 | time: 0.7678
---------------------------------------------------------

HTML report: (paste into browser to view) | Karate version: 0.9.5.RC5
...

Перед началом тестов я загружаю свое приложение Spring Boot, и это занимает некоторое время (~ 5-7 секунд), и я знаю, что тест не прошел, потому что Sprint Загрузочное приложение еще не запущено.

Именно поэтому я попытался использовать эту функцию retry until Каратэ, чтобы убедиться, что она повторяется через определенные промежутки времени.

Но, похоже, retry config не соблюдается в соответствии с выводом консоли. Кажется, что он всегда пытается только 3 раза ...

Я также пытался установить конфигурацию retry в самом тестовом файле, как в документах по каратэ:

* configure retry = { count: 10, interval: 5000 }

но это тоже не сработало.

Может быть, у вас есть подсказка, почему оно не работает, или я все еще что-то пропускаю?

Спасибо за поддержку!

1 Ответ

1 голос
/ 10 января 2020

Проблема в том, что retry until входит в изображение только после Установлено HTTP-соединение. Вам нужно найти способ дождаться, пока ваш сервер сможет принимать соединения.

Почему вы видите 3 попытки, потому что это поведение по умолчанию базового Apache HTTP-клиента.

You должен быть в состоянии написать или повторно использовать какую-то утилиту для этого. Взгляните на этот код от внутренних органов каратэ, найдите метод waitForHttp:

https://github.com/intuit/karate/blob/develop/karate-core/src/main/java/com/intuit/karate/shell/Command.java#L112

И, на мой взгляд, лучшее место для этого «wait» находится в коде JUnit / Java, который запускает набор каратэ - который вы, вероятно, уже имеете для запуска Spring Boot.

...