Verwendung von WireMock mit SOAP Web Services in Java

8

Ich bin ganz neu bei WireMock .

Bis jetzt habe ich Pseudo-Antworten mit SOAPUI verwendet. Mein Anwendungsfall ist einfach:

Nur SOAP-XML-Anfragen werden an verschiedene Endpunkte ( Ссылка ) abgefeuert und die vorgefertigte XML-Antwort zurückerhalten. MockWrire muss jedoch als eigenständiger Dienst auf einem dedizierten Server bereitgestellt werden, der an einem zentralen Ort agiert, von dem Scheinantworten geliefert werden.

Ich wollte nur ein paar Startvorschläge. Wie ich sehen kann, ist WireMock besser geeignet für REST-Webdienste. Also meine Zweifel sind:

1) Muss ich es auf einem Java-Webserver oder -Container bereitstellen, um als eigenständiger Dienst zu fungieren. Ich habe gelesen, dass Sie einfach mit

abspalten können %Vor%

2) Muss ich MockWire-APIs verwenden? Muss ich Unterricht für meinen Anwendungsfall machen? In meinem Fall werden Anfragen über JUnit Testfälle zum Mocking ausgelöst.

3) Wie erreiche ich einen einfachen URL-Musterabgleich? Wie oben erwähnt, brauche ich nur einfache Spott, d. H. Antwort erhalten, wenn die Anfrage an Ссылка

gestellt wird

4) Gibt es einen besseren / einfacheren Rahmen für meinen Anwendungsfall? Ich habe über Mockable gelesen, aber es hat Einschränkungen für 3 Teammitglieder und eine Demo-Domain im kostenlosen Tier.

    
Anurag 13.03.2016, 18:46
quelle

2 Antworten

18

Ich bin der Schöpfer von WireMock.

Ich habe mit WireMock vor kurzem eine Sammlung von SOAP-Interfaces in einem Client-Projekt gespielt, also kann ich bestätigen, dass es möglich ist. Ob es besser oder schlechter als SOAP UI ist, würde ich sagen, dass es bestimmte Vorteile gibt, aber mit einigen Kompromissen. Ein großer Vorteil ist die relativ einfache Bereitstellung und der programmgesteuerte Zugriff / Konfiguration sowie die Unterstützung von Dingen wie HTTPS und Low-Level-Fault-Injection. Allerdings müssen Sie ein wenig mehr Arbeit für das Parsen und Generieren von SOAP-Nutzdaten leisten - es wird keine Code- / Stub-Generierung von WSDL wie SOAP UI durchführen.

Meine Erfahrung ist, dass Tools wie SOAP UI Sie schneller zum Laufen bringen, aber auf lange Sicht zu höheren Wartungskosten führen, wenn Ihre Testsuite trivial wird.

Um Ihre Punkte nacheinander zu adressieren: 1) Wenn Sie möchten, dass Ihre Mocks irgendwo auf einem Server laufen, ist es am einfachsten, das eigenständige JAR wie beschrieben auszuführen. Ich rate davon ab, es in einem Container zu implementieren - diese Option existiert nur, wenn es keine Alternative gibt.

Wenn Sie jedoch nur Integrationstests oder vollständig unabhängige Funktionstests durchführen möchten, sollten Sie die JUnit-Regel verwenden. Ich würde sagen, es ist nur eine gute Idee, es in einem dedizierten Prozess auszuführen, wenn entweder a) Sie andere bereitgestellte Systeme in das System einbinden oder b) Sie es aus einer Nicht-JVM-Sprache verwenden.

2) Sie müssen es auf eine von drei Arten konfigurieren: 1) die Java-API, 2) JSON über HTTP oder 3) JSON-Dateien. 3) ist wahrscheinlich am ehesten dem, was Sie mit SOAP UI gewohnt sind.

3) Siehe Ссылка für viele Beispiele, die sowohl JSON als auch Java verwenden. Da SOAP dazu neigt, an feste Endpunkt-URLs zu binden, möchten Sie wahrscheinlich urlEqualTo(...) . Wenn ich in der Vergangenheit SOAP ausgedruckt habe, habe ich eine XML-Übereinstimmung für den gesamten Anfragetext gefunden (siehe Ссылка ). Ich schlage vor, in das Schreiben einiger Java-Builder zu investieren, um den benötigten XML-Code für die Anfrage und den Antworttext auszugeben.

4) Mock Server und Betamax sind beide Alternativen zu WireMock, aber AFAIK bieten keine explizite SOAP-Unterstützung mehr.

    
Tom 13.03.2016, 20:43
quelle
8

Ich bin über drei Jahre zu spät zu dieser Party, aber es hat eine Weile gedauert, bis ich das gleiche Problem durcharbeiten konnte, so dass ich meine Lösung als Antwort dokumentieren konnte, damit jemand anderen die Kopfschmerzen des manuellen Umgangs ersparen kann SOAP-Payloads von Grund auf neu.

Ich habe eine vernünftige Recherchearbeit unternommen, um dieses Problem für meine Integrationstest-Suite zu lösen. Versuchte alle möglichen Dinge, einschließlich benutzergenerierte CXF-Server, SOAP-UI, eine CGLIB-beeinflusste Bibliothek, die den echten Client in einem Testkontext ersetzt.

Am Ende nutzte WireMock benutzerdefinierte Anforderungsanpasser , um alle SOAP zu bearbeiten. -Yyness.

Der Kern davon war eine Klasse, die das Unmarshaling von SOAP-Anfragen und das Marshalen von SOAP-Antworten behandelte, um Autoren, die nur von JAXB generierte Objekte benötigten und sich nie mit den Details von SOAP befassen mussten, einen praktischen Wrapper zu bieten.

Antwort Marshalling

%Vor%

Anfrage Unmarshalling

%Vor%

Darüber hinaus gab es einige XPath-Dienstprogramme, die in die Nutzdaten der Anfrage hineingingen und sich anschauten, welche Operation angefordert wurde.

All das SOAP-Handling war der fiddliest Teil, um arbeiten zu können. Von dort erstellen Sie einfach Ihre eigene API, um WireMocks zu ergänzen. Zum Beispiel

%Vor%

und als Ergebnis erhalten Sie einen schönen, schlanken Test.

%Vor%     
markdsievers 23.10.2016 11:54
quelle