86 votes

Tester un service Web JAX-RS ?

Je suis actuellement à la recherche de moyens pour créer des tests automatisés pour un système de gestion de la qualité. JAX-RS (Java API for RESTful Web Services).

J'ai essentiellement besoin d'un moyen de lui envoyer certaines entrées et de vérifier que j'obtiens les réponses attendues. Je préférerais le faire via JUnit, mais je ne suis pas sûr de la façon dont cela peut être réalisé.

Quelle approche utilisez-vous pour tester vos services web ?

Mise à jour : Comme l'a souligné entzik, le fait de découpler le service web de la logique métier me permet de tester unitairement la logique métier. Cependant, je veux également tester les codes d'état HTTP corrects, etc.

6 votes

Bonne question - cependant, je dirais que si vous effectuez des tests via HTTP, il me semble qu'il s'agit de tests d'intégration.

0 votes

Tom. Vous avez tout à fait raison. Nous devrions injecter un émulateur HTTP factice/un conteneur léger pour cela. Dans le monde node.js supertest fait cela. Vous pouvez émuler express.js.

5voto

Vous pouvez trouver un exemple aquí .

3voto

Chris Dail Points 11406

J'utilise la fonction HTTPClient (http://hc.apache.org/) pour appeler les services Restful. La bibliothèque HTTP Client vous permet d'effectuer facilement les opérations get, post ou toute autre opération dont vous avez besoin. Si votre service utilise JAXB pour la liaison xml, vous pouvez créer un JAXBContext pour sérialiser et désérialiser les entrées et sorties de la requête HTTP.

3voto

Ashish Shinde Points 79

Jetez un coup d'œil à Générateur de client de repos Alchemy . Cela peut générer une implémentation de proxy pour votre classe de service web JAX-RS en utilisant le client jersey derrière la scène. Effectivement, vous appellerez vos méthodes de webservice comme de simples méthodes java à partir de vos tests unitaires. Gère également l'authentification http.

Il n'y a pas de génération de code impliquée si vous avez besoin de simplement exécuter des tests, ce qui est pratique.

Clause de non-responsabilité : Je suis l'auteur de cette bibliothèque.

2voto

keyoxy Points 3681

Restez simple. Jetez un coup d'œil à https://github.com/valid4j/http-matchers qui peut être importé depuis Maven Central.

    <dependency>
        <groupId>org.valid4j</groupId>
        <artifactId>http-matchers</artifactId>
        <version>1.0</version>
    </dependency>

Exemple d'utilisation :

// Statically import the library entry point:
import static org.valid4j.matchers.http.HttpResponseMatchers.*;

// Invoke your web service using plain JAX-RS. E.g:
Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();

// Verify the response
assertThat(response, hasStatus(Status.OK));
assertThat(response, hasHeader("Content-Encoding", equalTo("gzip")));
assertThat(response, hasEntity(equalTo("content")));
// etc...

1voto

Une chose importante à faire est de tester indépendamment votre logique d'entreprise.

Je ne supposerais certainement pas que la personne qui a écrit le code JAX-RS et qui cherche à tester unitairement l'interface est, pour une raison bizarre et inexplicable, inconsciente de la notion qu'elle peut tester unitairement d'autres parties du programme, y compris les classes de logique métier. Il n'est guère utile d'énoncer l'évidence et il a été dit à plusieurs reprises que les réponses doivent également être testées.

Jersey et RESTEasy ont toutes deux des applications clientes et dans le cas de RESTEasy, vous pouvez utiliser les mêmes annotations (même factoriser l'interface annotée et l'utiliser du côté client et serveur de vos tests).

REST pas ce que ce service peut faire pour vous ; REST ce que vous pouvez faire pour ce service.

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