2017-03-02 2 views
1

J'utilise RestAssured pour déclencher des appels d'API et je voulais implémenter une nouvelle tentative si les appels REST échouaient. L'exigence est parce que nous obtenons des codes de réponse intermittents 500 pour certaines API qui fonctionnent habituellement après une nouvelle tentative.Comment implémenter une logique de réessai dans RestAssured pour un appel REST échoué

J'ai mis en œuvre le code suivant, mais il ne semble pas fonctionner -

HttpClientConfig.HttpClientFactory htc = new HttpClientConfig.HttpClientFactory() { 

    @Override 
    public HttpClient createHttpClient() { 
     DefaultHttpClient d = new DefaultHttpClient(); 

     d.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(restRetryCount, true)); 
     return d; 
    } 
}; 

RestAssuredConfig rac = RestAssured.config().httpClient(HttpClientConfig.httpClientConfig().httpClientFactory(htc)); 

De plus, étant donné que RestAssured ne répond pas l'enregistrement de niveau HTTPClient, j'ai essayé permettant l'enregistrement de l'apache httpclient en utilisant le java. util.logging mais que ne semble pas fonctionner non plus.

créé un fichier custom.logging.properties avec -

# Enables the header wire and context logging 
org.apache.http.level = FINEST 
org.apache.http.wire.level = SEVERE 

# Enables the context logging for connection management & request execution 
org.apache.http.impl.conn.level = FINEST 
org.apache.http.impl.client.level = FINEST 
org.apache.http.client.level = FINEST 

et écrit ce qui suit pour lancer l'enregistrement -

public static Logger initiateHttpTrafficLogging(){ 
    Logger log = Logger.getLogger("httptraffic.log"); 
    ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
    InputStream is = loader.getResourceAsStream("custom.logging.properties"); 
    try{ 
     LogManager.getLogManager().readConfiguration(is); 
     log.setLevel(Level.FINEST); 
     log.addHandler(new ConsoleHandler()); 
     log.setUseParentHandlers(false); 
     log.info("Initiating HTTP Traffic logging ::\n\n"); 
    } catch (IOException ie){ 
     Assert.fail("ERROR: Could not load the loggin properties !!!", ie.fillInStackTrace()); 
    } 
    return log; 
} 

Quelqu'un pourrait-il me s'il vous plaît fournir une direction à où je vais faux ou des pointeurs pour résoudre ce problème.

Appréciez vos réponses. Merci.

+0

Utilisez-vous une configuration à base de ressort? – user121290

Répondre

0

Il y a un pot-retry Spring u peut intégrer que votre application.And vous pouvez utiliser quelque chose comme ceci dans votre méthode

@Retryable(maxAttempts = 4, backoff = @Backoff(delay = 200), 
      include = {RetryableException.class}) 
    ResponseEntity<String> request(
      String url, HttpMethod method, HttpEntity<?> entity, Class<?> type, 
      Map<String, String> parameters 
    ) throws Exception{} 

et u besoin de faire @EnableAspectJAutoProxy et @EnableRetry dans votre classe de configuration