In brief, the Gatling JMS extension allows testing of JMS provider APIs using the nice Gatling DSL that you are familiar with.
You can get a pretty diagram, quite quickly, testing a JMS service, using the simulation script below.
package com.bluedevel.gatling.jms import net.timewalker.ffmq3.FFMQConstants import io.gatling.core.Predef._ import com.bluedevel.gatling.jms.Predef._ import scala.concurrent.duration._ import bootstrap._ import javax.jms.{ Message, TextMessage } class TestJmsDsl extends Simulation { val jmsConfig = JmsProtocolBuilder.default .connectionFactoryName(FFMQConstants.JNDI_CONNECTION_FACTORY_NAME) .url("tcp://localhost:10002") .credentials("user", "secret") .contextFactory(FFMQConstants.JNDI_CONTEXT_FACTORY) .listenerCount(1) .deliveryMode(javax.jms.DeliveryMode.PERSISTENT) val scn = scenario("JMS DSL test").repeat(1) { exec(jms("req reply testing").reqreply .queue("jmstestq") // -- four message types are supported; only StreamMessage is not currently supported .textMessage("hello from gatling jms dsl") // .bytesMessage(new Array[Byte](1)) // .mapMessage(new ListMap[String, Object]) // .objectMessage("hello!") .addProperty("test_header", "test_value") .addCheck(checkBodyTextCorrect) ) } setUp(scn.inject( rampRate(10 usersPerSec) to (1000 usersPerSec) during (2 minutes) )).protocols(jmsConfig) /** * Checks if a body text is correct. * <p> * Note the contract on the checks is Message => Boolean, so you can perform * any processing you like on the message (check headers, check type, check body, * complex checks, etc). */ def checkBodyTextCorrect(m: Message) = { // this assumes that the service just does an "uppercase" transform on the text val BODY_SHOULD_BE = "HELLO FROM GATLING JMS DSL" m match { case tm: TextMessage => (tm.getText.toString == BODY_SHOULD_BE) case _ => false } } }