47 votes

Mocking serveur HTTP

Je voudrais écrire des tests pour mon code client qui accède à un Serveur HTTP. Je suis à la recherche pour un simple Serveur HTTP, ce qui permettrait de simuler les réponses de serveur réel.

Un tel Serveur HTTP (pseudo serveur :-))

  1. de vérifier toutes les demandes vraiment venu de mon code client
  2. vérifier que les demandes avaient tous les paramètres requis
  3. envoyer une réponse à l', idéalement basé sur les paramètres de la demande
  4. il convient également de prendre en charge l'envoi des codes d'erreur, ou de réponses multiples pour plusieurs requêtes sur une URI

Mon but est de vérifier que 1) le code du client est de travailler sur OK à partir du serveur de point de vue, l'envoi de toutes les demandes, il doit, avec des paramètres valides, avec l'utilisation correcte de la méthode (GET/POST), et 2) le client peut traiter les réponses, et il permet même de gérer certaines conditions d'erreur.

Je suis en utilisant jUnit 4 pour mes tests. Pour l'instant, j'utilise incorporé Jetée Serveur HTTP comme mon "mock serveur", mais je voudrais éviter de support d'écriture pour les exigences ci-dessus. Connaissez-vous une bibliothèque, qui agira en tant que serveur http et de m'aider avec décrites ci-dessus, les tests?

Je vous remercie.

37voto

Sandarenu Points 389

J'ai trouvé ce fil alors que je cherchais un moyen de me moquer des services HTTP.

Pendant ma recherche, j'ai trouvé un très bel outil appelé WireMock https://github.com/tomakehurst/wiremock . C'est un outil vraiment sympa et qui a une intégration directe avec JUnit.

13voto

raupach Points 1443

Jetez un coup d'œil à Simple . C'est un serveur HTTP intégrable. Vous pouvez déboguer toutes les demandes entrantes à une échelle beaucoup plus petite que la jetée.

10voto

Viktor Nordling Points 1736

Il y a de vraiment génial MockHttpServer dans le Clin d'oeil du projet. Voir http://incubator.apache.org/wink/1.1.1/api/org/apache/wink/client/MockHttpServer.html.

Juste comme une modification, dans le cas où quelqu'un a décidé d'utiliser ce:

Maven dependency:

    <dependency>
        <groupId>org.apache.wink</groupId>
        <artifactId>wink-component-test-support</artifactId>
        <version>1.3.0</version>
        <scope>test</scope>
    </dependency>

Dans votre test:

    MockHttpServer mockServer = new MockHttpServer(3333);
    mockServer.startServer();
    String url = "http://localhost:" + mockServer.getServerPort() + "/somewhere";
    MockHttpServer.MockHttpServerResponse response = new MockHttpServer.MockHttpServerResponse();
    response.setMockResponseContent("some response");
    response.setMockResponseCode(200);
    mockServer.setMockHttpServerResponses(response);

    unitUnderTest.connectTo(url);

Notez que pour une raison quelconque, le port de l'initialisation de l'MockHttpServer n'est pas le port, vous devez vous connecter à. Il semble être port+1, mais en utilisant mockHttpServer.getServerPort() pour être sûr.

Cependant, Wiremock (tel que recommandé par Sandarenu) est de loin supérieur à ce. Voici ce que le même test pourrait ressembler à Wiremock:

@Rule
public WireMockRule wireMockRule = new WireMockRule(3333);


@Test
public void testHttpClient() {
    stubFor(get(urlMatching("/somewhere")).willReturn(aResponse().withStatus(200).
        withBody("some response")));
}

5voto

TomA Points 5600

NanoHTTPD est une autre option. Il s'agit d'un fichier du serveur HTTP écrit en Java.

Caractéristiques:

  • Un seul fichier Java
  • Pas de fixe, fichiers de configuration, d'enregistrement, d'autorisation, etc.
  • Prend en charge le paramètre de l'analyse de méthodes GET et POST
  • Supporte à la fois le contenu dynamique et la distribution de fichiers
  • Code par défaut sert les fichiers et affiche tous les paramètres HTTP et les en-têtes
  • Fichier server prend en charge l'inscription à l'annuaire, index.html et index.htm
  • Serveur de fichier utilise le répertoire courant comme une racine du site web

Je l'ai utilisé avec succès pour les tests unitaires client HTTP code - car il est un seul .fichier java, vous pouvez le mettre n'importe où vous en avez besoin, sans aucun classpath maux de tête et même le garder dans la release.

4voto

prasopes Points 1579

J'ai fini par utiliser Mock Http Server de jharlap . Contrairement à MockHttpServer de Wink, il peut être préchargé avec plusieurs réponses différentes aux demandes attendues.

Exemple:

 server
    .expect( Method.GET, CONTENT_BASE_URL )
    .respondWith( 200, "text/plain", firstRespBody );
server
    .expect( Method.GET, CONTENT_BASE_URL + "?from=2012-09-01" )
    .respondWith( 200, "text/plain", secondRespBody );
 

EDIT: Plus prometteur fourche de ce projet ici:

https://github.com/kristofa/mock-http-server

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X