示例测试场景

开发者 > 集成测试 > 示例测试场景

ActiveMQ Classic 性能模块

示例测试场景

此页面提供了一个关于我们想要做的事情的简单示例。

假设所有测试代码都位于单个 Maven POM 中(例如 activemq-integration-test 版本 4.0),它将处理所有类路径问题。

我们将尝试描述这可能工作的方式,并为每种实现方式命名,以便我们可以开始改进解决此问题的不同方法...

无头构建

在此版本中,没有“控制器”;每个构建都被视为完全独立的构建。

每个构建都知道该做什么;每个测试用例都会生成一个 XML 文件,该文件成为一个命名的部署工件。

例如,想象以下构建(实际上只是在 POM 中运行 Java 可执行文件以进行类路径)

描述 命令行
hostB 代理 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 代理 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);
   }
}

因此,控制器构建中的这两个 JUnit 测试用例将分别在队列上启动 3 个独立的远程构建,并等待它们完成 - 或者终止它们

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛标志和 Apache ActiveMQ 项目标志是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 获得许可。