2009-12-23 4 views
4

Je n'ai pas testé deux services Web SOAP. Quels types de tests puis-je exécuter?Comment tester Webservices avec PHPUnit?

+0

Stubbing et Mocking Web Services http://www.phpunit.de/manual/current/en/test-doubles.html –

+0

Merci. Mais je cherchais des fonctionnalités pour tester le webservice lui-même et non le code PHP correspondant. – powtac

+0

alors vous devez implémenter ces webservices en PHP et appeler ces fonctions d'implémentation. –

Répondre

0

Le test d'un service web SOAP sera tout à fait identique au test d'une méthode "locale": vous devrez appeler cette méthode, lui passer certains paramètres, et chechink la valeur de retour, pour vérifier qu'elle correspond à la paramètres que vous avez donnés.

Bien sûr, avec les services Web, l'appel sera un peu plus compliqué, car vous devrez travailler avec SoapClient pour appeler la méthode, mais l'idée sera toujours la même.

Les plus gros problèmes que je vois sont:

  • appels de services Web sont lents (ils vont bien un réseau), ce qui signifie que vos tests prendront du temps pour exécuter - ce qui signifie que vous ne serez pas capable de les exécuter aussi souvent
  • Avec un service web, vous avez potentiellement plus d'une raison possible pour l'échec; ce qui signifie que vous aurez plus de mal à trouver pourquoi un test a échoué:
    • Il peut échouer parce qu'il ya un bug - qui est le cas idéal
    • Mais il peut aussi échouer parce que le serveur distant est en baisse
    • Ou parce que le réseau est en baisse
    • et sans doute pas mal d'autres raisons possile
  • Bien sûr, comme le code sera exécuté sur un serveur distant, et non sur la machine qui fonctionne PHPUnit, ce sera beaucoup plus difficile d'obtenir une couverture de code (par exemple)
+0

Merci, bonnes idées! – powtac

8

Il est de loin préférable de tester les classes de consommation locales se moque du SoapClient qui retournent XML résultat préenregistrée, puisque sont destinés tests unitaires pour courir vite et être indépendant de distance prestations de service.

  • Créer une classe Mock de votre classe Client (vous devez avoir une enveloppe d'objet pour la SoapClient pour pouvoir le tester à fond)
  • Utilisez $this->returnValue() pour retourner des réponses XML pré-enregistrés ou en-têtes que votre système attend

Voir: http://www.phpunit.de/manual/current/en/test-doubles.html

Si votre système dépend de la disponibilité de ces services à distance, vous pourriez mettre en œuvre un service de surveillance qui vérifie si la ressource est disponible, mais est pas quelque chose qui devrait être fait dans les tests unitaires eux-mêmes.

Cordialement, Thomas

+0

Cool, merci! Semble raisonnable. – powtac

Questions connexes