範例測試情境

開發人員 > 整合測試 > 範例測試情境

ActiveMQ Classic 效能模組

範例測試情境

此頁面提供一個我們想做的事情的簡單範例。

假設所有的測試程式碼目前都在單一的 Maven POM 中 (例如 activemq-integration-test 版本 4.0),這將處理所有的類別路徑問題。

我們會嘗試描述其不同的運作方式,並為每個實作風格命名,以便我們開始修改不同的方法來解決這個問題…

無頭建置

在此版本中,沒有「控制器」;每個建置都被視為完全獨立的建置。

每個建置都知道要做什麼;每個測試案例都會產生一個 XML 檔案,該檔案會成為一個具名的部署成品。

例如,想像以下建置 (這些建置實際上只是在 POM 中執行 Java 可執行檔以處理類別路徑)

方塊 描述 命令列
hostB Broker(訊息代理器) java org.apache.activemq.broker.console.Main tcp://$hostA:61616
hostC 消費者 java org.apache.activemq.test.ConsumerMain –message-count=5000 –queue=true –destination=org.foo.bar tcp://$hostA:61616
hostD 生產者 java org.apache.activemq.test.ProducerMain –message-count=5000 –queue=true –destination=org.foo.bar tcp://$hostA:61616

在上面的範例中 - 每個建置都必須等待其他東西啟動一段時間。例如,生產者和消費者想要保持連線到訊息代理器約 5 分鐘,因為它們可以以任何順序啟動。

理想情況下,我們可能希望將其作為 3 個 maven 命令執行,如下所示…

mvn activemq:broker
mvn activemq:perf-producer -Dmessage-count=5000 -Dqueue=true -Ddestination=org.foo.bar -Durl=tcp://$hostA:61616
mvn activemq:perf-consumer -Dmessage-count=5000 -Dqueue=true -Ddestination=org.foo.bar -Durl=tcp://$hostA:61616

控制器建置

控制器版本的想法是,其中一個測試 (第一個啟動以嘗試協助) 嘗試協調測試節點之間的運作。

例如,我們可以先啟動控制器…

方塊 描述 命令列
hostA 控制器 mvn test

然後測試案例會啟動這些程序,同時與它們溝通…

方塊 描述 命令列
hostB Broker(訊息代理器) java org.apache.activemq.broker.console.Main tcp://$hostA:61616
hostC 消費者 java org.apache.activemq.test.ConsumerMain –message-count=5000 –queue=true –destination=org.foo.bar tcp://$hostA:61616
hostD 生產者 java org.apache.activemq.test.ProducerMain –message-count=5000 –queue=true –destination=org.foo.bar tcp://$hostA:61616

控制器工廠建置

很快地,我們將會啟動大量的建置。我們可能希望單一專案建置多種不同的測試套件。每個單一分散式整合/系統/效能測試可能有多個要執行的子建置 (程序)。

因此,我們可能希望執行單一的 JUnit 測試案例,該測試案例會啟動不同的遠端建置/程序。

例如:

public class PerformanceTestSuite {
   public void testSmallMessages() {
   	  buildQueue.start("broker", "");
   	  buildQueue.start("consumer", "--messageCount=1000");
   	  buildQueue.start("producer", "--messageCount=1000");
   	  buildQueue.join(5 * MINUTES);
   }

   public void testLargeMessages() {
   	  buildQueue.start("broker", "");
   	  buildQueue.start("consumer", "--messageCount=1000 --messageSize=1M");
   	  buildQueue.start("producer", "--messageCount=1000 --messageSize=1M");
   	  buildQueue.join(10 * MINUTES);
   }
}

因此,控制器建置中的這 2 個 JUnit 測試案例將各自在佇列中啟動 3 個獨立的遠端建置,並等待它們完成 - 或終止它們。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 The Apache Software Foundation 的商標。版權所有 © 2024,The Apache Software Foundation。依 Apache License 2.0 授權。