簡體   English   中英

多語言堆棧的集成測試(Java / MongoDB / RabbitMQ ...)

[英]Integration tests of a polyglot stack (Java/MongoDB/RabbitMQ…)

我知道RabbitMQ是用Erlang編寫的,因此無法像在ActiveMQ JMS代理中那樣嵌入到JVM中。

但實際上有些項目是用另一種語言完成的,可以很容易地嵌入到集成測試中。

例如,使用C ++編寫的MongoDB可以在JVM集成測試的上下文中輕松啟動/停止: https//github.com/flapdoodle-oss/embedmongo.flapdoodle.de

也有人把它移植到Java: https//github.com/thiloplanz/jmockmongo/


所以我只是想知道當我的應用程序是用Java編寫時,我們如何進行集成測試,另一種技術是另一種技術(如Erlang for RabbitMQ)?

一般來說,什么是良好做法?

我看到3個主要解決方案:

  • 開始真正的RabbitMQ
  • 在當前使用的Langage中嵌入該技術的JVM端口
  • 使用標准技術,以便Erlang中的技術可能具有與Java中的另一個相同的行為和通信層(RabbitMQ / Qpid / StormMQ實現AMQP)

是否有Maven / Sbt / Ant插件來啟動臨時RabbitMQ代理? 在測試課之前支持Junit / TestNG RabbitMQ的任何項目?

我已經看到在Java中有一個AMQP的開源實現: Apache Qpid有沒有人使用這個實現進行集成測試的經驗,而在生產中有RabbitMQ? 它甚至可能嗎? 我正在使用Spring Integration。


順便說一下,我剛剛注意到Spring-AMQP項目提到了它的github自述文件:

這里的許多“集成”測試需要運行RabbitMQ服務器 - 如果未檢測到代理,它們將被跳過。

如果是我,我會考慮嘲笑有問題的堆棧組件。 什么是最好的Java模擬框架? (雖然不是一個很好的Stack Overflow問題)和模擬對象可能有助於你前進。

模擬組件使測試(恕我直言)比嘗試“實時測試”一切更容易。

在過去,我使用了一台運行全新RabbitMQ的虛擬機。 開發人員會不斷運行它,我們的CI服務器會為每個代碼版本啟動一個新的VM。 如果他們無法連接到服務器而不是跳過測試,我們的測試會失敗,因為缺少集成測試是一個嚴重的問題。

這往往可以很好地工作,並且可以防止需要啟動和停止RabbitMQ進行測試。 我們的測試被拆分為使用vhosts進行隔離,並根據需要調用一些vhosts,這樣我們就可以並行化測試了。

我會告訴你我對Apache QPid vs Rabbit MQ的看法,因為我同時使用它們。 我的觀點是他們'延伸'AMQP,但是非常不同。 如果在生產中你將擁有Rabbit MQ,那么在測試中使用相同的版本,也可以使用相同的版本,修補程序,修復程序等.Apache Qpid可以執行的操作和Rabbit MQ無法做到,反之亦然。

說明了明顯的集成測試,以便您可以測試應用程序的集成 我將啟動Rabbit MQ的一個實例。

基於Philip Christiano的回答說使用VM,現在我們有了Docker,我認為這是在docker容器中嵌入不同技術的方法。

可以啟動包含RabbitMQ服務器的docker容器,它比使用VM更快,因為docker容器是輕量級的,啟動時間要好得多。

有一些maven插件允許啟動docker容器,例如: http//www.alexecollins.com/content/docker-maven-plugin/

由於我處於完全相同的情況並且找不到一個好的解決方案,我自己開發了它(受Embedded-Redis,Embedded-Mongo等啟發)

這個庫是下載,提取,啟動和管理RabbitMQ的過程的包裝器,因此它可以像任何JVM項目控制的嵌入式服務一樣工作。

看看: https//github.com/AlejandroRivera/embedded-rabbitmq

它很簡單:

EmbeddedRabbitMqConfig config = new EmbeddedRabbitMqConfig.Builder()
    .version(PredefinedVersion.V3_5_7)
    // ...
    .build();
EmbeddedRabbitMq rabbitMq = new EmbeddedRabbitMq(config);
rabbitMq.start();
...
rabbitMq.stop();

適用於Linux,Mac和Windows。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM