On Monday 16 February 2009 17:02:32 sebb wrote:
> On 16/02/2009, Noel O'Brien <[email protected]> wrote:
> > On Monday 16 February 2009 16:35:56 sebb wrote:
> >  > On 16/02/2009, Noel O'Brien <[email protected]> wrote:
> >  > > On Monday 16 February 2009 15:42:46 sebb wrote:
> >  > >  > On 16/02/2009, Noel O'Brien <[email protected]> wrote:
> >  > >  > > Hi All,
> >  > >  > >
> >  > >  > >  The web application I'm testing uses JMS queues for
> >  > >  > > communicating externally when certain events occur. The JMS
> >  > >  > > point to point sampler in JMeter only provides for Request and
> >  > >  > > Request/Response tests, however almost all of the messaging I
> >  > >  > > will be testing will be driven by a HTTP request, i.e. make a
> >  > >  > > HTTP request and there should be a corresponding message on a
> >  > >  > > JMS queue.
> >  > >  > >
> >  > >  > >  What is the best way to (at least) functionally test this? I
> >  > >  > > was thinking of writing a JMS Assertion that I could add to the
> >  > >  > > HTTP Request sampler, does that sound reasonable? The JMS
> >  > >  > > message occurs as a result of the HTTP request being made so to
> >  > >  > > me it makes sense for it to be an assertion.
> >  > >  >
> >  > >  > Is the JMS message sent before the HTTP response is returned? Can
> >  > >  > one guarantee this?
> >  > >  > I thought JMS was asynchronous.
> >  > >
> >  > > JMS is indeed asynchronous. The HTTP response will always return
> >  > > first, and the logic that puts the message on the queue is run in a
> >  > > background thread which has a default pause interval or 30 seconds.
> >  > > So there would be a maximum 30 second delay between the http request
> >  > > completing and the message appearing on the queue
> >  > >
> >  > >  > I would expect the HTTP Response Assertion to be used for
> >  > >  > checking that the HTTP response is OK, i.e. the page contains
> >  > >  > "message sent OK" or whatever.
> >  > >  >
> >  > >  > >  Is there any other way of having a "Response" only JMS
> >  > >  > > sampler?
> >  > >  >
> >  > >  > I've never used JMS, but isn't that what JMS Subscriber does?
> >  > >
> >  > > We are not using topic/subscriber model for JMS, but queues (FIFO).
> >  > > Will the JMS Subscriber sampler work with queues?
> >  >
> >  > No idea, sorry.
> >  >
> >  > >  > i.e what does the intended JMS recipient do?
> >  > >
> >  > > The intended JMS recipient parses the message and does further
> >  > > processing. In our example, it's an SMS gateway, but is outside the
> >  > > scope of our app, so I do not need to test it. I do need to test
> >  > > that the correct messages are coming off the queue (in quantity and
> >  > > content) and will need to performance test it in future
> >  >
> >  > I meant - what JMS actions does the recipient do to acquire the
> >  > message, not what it does with the message once received.
> >
> > I have no idea how the SMS gateway interacts with the queue, but as it's
> >  written in Java I assume it would use the onMessage() function.
>
> Presumably it will have to do something first in order to use that
> function.
>
> >  I will investigate further the JMS Subscriber sampler and report my
> > findings.
>
> Thanks.
>
> If it turns out that there is a missing aspect of JMS that JMeter
> could implement, then we can see about adding it for a future release.

I  tried using a JMS Subscriber sampler to take some messages off a queue, but 
the following exception happened in jmeter.log:

2009/02/16 17:04:20 ERROR - jmeter.threads.JMeterThread:  
java.lang.ClassCastException: com.swiftmq.jms.QueueImpl cannot be cast to 
javax.jms.Topic
        at 
org.apache.jmeter.protocol.jms.client.InitialContextFactory.lookupTopic(InitialContextFactory.java:80)
        at 
org.apache.jmeter.protocol.jms.client.OnMessageSubscriber.initConnection(OnMessageSubscriber.java:119)
        at 
org.apache.jmeter.protocol.jms.client.OnMessageSubscriber.<init>(OnMessageSubscriber.java:79)
        at 
org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.initListenerClient(SubscriberSampler.java:105)
        at 
org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.sampleWithListener(SubscriberSampler.java:162)
        at 
org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.sample(SubscriberSampler.java:150)
        at 
org.apache.jmeter.protocol.jms.sampler.SubscriberSampler.sample(SubscriberSampler.java:137)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:290)
        at java.lang.Thread.run(Thread.java:619)

It looks like the sampler is trying to get a reference to a topic but the 
instance hosted by SwiftMQ is a queue, so no dice.

> If none of the existing JMS samplers do what you want, then some code
> will have to be written in order to solve your problem - whether as an
> Assertion or a Sampler.

I'm going to extend the existing JMS sampler to work in Response mode. I'm 
interested in contributing back to the project too :)

I've already modified it to work with MapMessage as opposed to just  
TextMessage types.

> The BeanShell elements may be useful for prototyping.

Thanks for the tip :)

Noel

> >  Thanks for your help,
> >
> > Noel
> >
> >  > >  Regards,
> >  > >
> >  > > Noel
> >  > >
> >  > >  > >  Regards,
> >  > >  > >  Noel
> >  > >  > >
> >  > >  > >
> >  > >  > > ---------------------------------------------------------------
> >  > >  > >----- - To unsubscribe, e-mail:
> >  > >  > > [email protected] For additional
> >  > >  > > commands, e-mail: [email protected]
> >  > >  >
> >  > >  > -----------------------------------------------------------------
> >  > >  >---- To unsubscribe, e-mail:
> >  > >  > [email protected] For additional
> >  > >  > commands, e-mail: [email protected]
> >  >
> >  > ---------------------------------------------------------------------
> >  > To unsubscribe, e-mail: [email protected]
> >  > For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to