2012-04-10 9 views
3

Ich entwickle eine Anwendung mit Spring Integration und RabbitMq und frage mich, wie ich es testen kann (Integrationstests).Testen von RabbitMQ und Spring Integration

Ich denke, SoapUI kann eine großartige Lösung sein, aber es unterstützt RAbbitMq nicht, hermesjms.com hat Unterstützung für Qpid, also dachte ich, dass es leicht sein könnte, ein neues Plugin zur Unterstützung von Rabbitmq zu machen, aber es ist schwieriger als ich dachte Aufgrund des Projekts ist es ein wenig alt und hat eine Reihe von Abhängigkeiten. So beginne ich in etwas zu tun, mich, wie ein DSL in Python, um so etwas zu denken:

tests = [{ 'name': 'start', 
    'routing_key': 'returned', 
    'payload' : "xxxxx", 
    'timeOut' : '10000', 
    'expected': '', 
    'threads': '1' 
}, 
{ 'name': 'second',..... 
] 

Und dann mit Pika die Aktionen auszuführen und die Ergebnisse überprüfen.

Ich weiß, es ist sehr dumm und Sopaui ist riesig und fantastisch, aber zumindest würde es mir erlauben, kleine Tests zu machen.

Was würden Sie empfehlen?

Antwort

1

RabbitMQ bietet Ihnen ein Webfrontend (so genannte Management View 1).

Also: Was genau wollen Sie testen? Lassen Sie uns sagen, Sie, dass eine eingehende Nachricht auf requestChannel bis auf den Service und zurück, um überprüfen möchten, können Sie einfach autowire der Kanal direkt (das heißt @Autowired privaten Kanal requestChannel;) und eine Nachricht in sie gesetzt.

Allerdings nur, wenn Sie Ihre Architektur richtig auslegen: Jeder Schritt Ihres Prozesses kann mit Mocks oder speziell modifizierten injizierten Abhängigkeiten getestet werden.

Diese Testbarkeit gilt neben Ihren eigenen Komponenten auch für die Federkomponenten (Interfaces). Nehmen wir an, Sie haben Ihren eigenen Router implementiert: Testen und überprüfen Sie die Ein- und Ausgabe. Das Gleiche gilt für einen Transformator.

Wenn Sie versuchen, das "Bic-Bild" zu überprüfen, müssen Sie das komplette Szenario neu erstellen. Dies sollte jedoch bei nicht persistenten und nicht dauerhaften Warteschlangen und Nachrichten nicht so kompliziert sein.

Gibt es noch etwas, das Sie testen möchten?

+0

Hallo, Danke für die Antwort. Was ich wollte, war es automatisch zu überprüfen, ob eine Nachricht in der Warteschlange war und der Inhalt dort, ich wollte Rabbimtq nicht testen. Ich kenne das Web Plugin aber ich wollte es automatisch testen. Sie senden beispielsweise eine Nachricht an die Warteschlange A und warten eine Nachricht in B ab, und Sie können nicht nur prüfen, ob diese Nachricht vorhanden ist, sondern auch die Header und die Nutzdaten. Und mehr Zeug mag Nachricht eine Rate zu senden, usw. Ich habe endlich ein Miniframework in Python, die all die Sachen, die wir brauchen, ich möchte es eines Tages in github veröffentlichen möchten –

+0

Möchten Sie Ihre Nachricht Broker "überwachen" Handhabung? Welche Nachrichten sind in der "Warteschlange" und müssen warten? – knalli

0

Für rabbitMq, mein Rat ist, eine echte RabbiMQ zu verwenden: dies kann mit Vagrant mit Chef für die Bereitstellung der RabbitMq und der Vagrant Maven-Plugin getan werden, um die Box vor Integration Tests zu starten und in der Post-Phase der Integration zu stoppen Tests:

Der Vagrant Maven Plugin: http://nicoulaj.github.io/vagrant-maven-plugin/

Vagrant WebSite: http://www.vagrantup.com/

Kochbuch Chef für RabbitMQ: https://github.com/opscode-cookbooks/rabbitmq

Um es zusammenzufassen:

  1. Installieren Sie Vagrant und erstellen Sie eine leere Box (Centos oder Ubunutu).
  2. Bereitstellung der VM mit RabbitMQ Kochbuch.
  3. Platzieren Sie .box in Ihren Home-Ordner (rabbitMQ.box).
  4. Konfigurieren Sie maven Project, um die VM mit vagrant up zu starten (~/rabbitMQ.Box) in der Vorphase der Integrationstests.
  5. Konfigurieren Sie maven Project, um die VM mit vagrant halt (~/rabbitMQ.box) in der Vorphase der Integrationstests zu stoppen.

Hoffnung, dass diese Hilfe