Hi,
Attached is the text documents for codes and log error. I am a beginner in
Jmeter. First time I am doing IBM MQ performance testing. So, I am not able
to understand the error. Please guide me on how to do IBM MQ testing.
As I previously mentioned, I referred below site code to do the testing. I
just changed Configuration parameters for IBM Services.
https://www.blazemeter.com/blog/ibm-mq-testing-with-jmeter-learn-how/
Thanks & Regards,
Smruti Koyande
On Mon, Jan 10, 2022 at 10:48 AM Dmitri T <[email protected]> wrote:
> How we are supposed to help without:
>
> 1. Seeing your full code in form of text, not the screenshot
> 2. Seeing jmeter.log file contents (preferably with debug level
> verbosity
> <https://www.blazemeter.com/blog/how-to-configure-jmeter-logging>)
>
> The error means that you're trying to call *createProducer()* function of
> the object which doesn't exist which in its turn means that Session
> <https://docs.oracle.com/javaee/7/api/javax/jms/Session.html> interface
> instance is null
> <https://dev.to/dj_devjournal/understanding-null-in-java-4o31> so you
> need to re-visit your code and double check the place where you're creating
> the JMS Session object.
>
>
> On 1/10/2022 4:51 AM, Smruti Koyande wrote:
>
> Hi,
>
> Can anyone help out with the above query.
>
> On Fri, Jan 7, 2022 at 9:18 PM Smruti Koyande <[email protected]> wrote:
>
>> Hii,
>>
>> Anyone help me to create the test plan in Jmeter for the IBM MQ message
>> test?
>>
>> Below is the scenario for our project :
>> [image: image.png]
>> I referred link :
>> https://www.blazemeter.com/blog/ibm-mq-testing-with-jmeter-learn-how/
>>
>> As per link,
>> Step 1 : Downloaded the jar files and pasted the same in /lib folder and
>> restarted the Jmeter.
>> Step 2 : Created a test plan as suggested in the link but getting below
>> errors . I used our configuration parameters for the IBM MQ service.
>>
>>
>>
>> [image: image.png]
>> [image: image.png]
>> [image: image.png]
>>
>>
>>
>> --
>> Thanks & Regards,
>> Smruti Koyande
>>
>>
>>
>
> --
> Thanks & Regards,
> Smruti Koyande
> Junior Software Tester
>
>
--
Thanks & Regards,
Smruti Koyande
Junior Software Tester
2022-01-10 14:23:39,069 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223
script JSR223 Sampler, message: javax.script.ScriptException:
java.lang.NullPointerException: Cannot invoke method createProducer() on null
object
javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke
method createProducer() on null object
at
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)
~[groovy-jsr223-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71)
~[groovy-jsr223-3.0.7.jar:3.0.7]
at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_301]
at
org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217)
~[ApacheJMeter_core.jar:5.4.2]
at
org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72)
[ApacheJMeter_java.jar:5.4.2]
at
org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:638)
[ApacheJMeter_core.jar:5.4.2]
at
org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558)
[ApacheJMeter_core.jar:5.4.2]
at
org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489)
[ApacheJMeter_core.jar:5.4.2]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
[ApacheJMeter_core.jar:5.4.2]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_301]
Caused by: java.lang.NullPointerException: Cannot invoke method
createProducer() on null object
at
org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:44)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
~[groovy-3.0.7.jar:3.0.7]
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
~[groovy-3.0.7.jar:3.0.7]
at Script1.run(Script1.groovy:8) ~[?:?]
at
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)
~[groovy-jsr223-3.0.7.jar:3.0.7]
import com.ibm.msg.client.jms.JmsConnectionFactory
import com.ibm.msg.client.jms.JmsFactoryFactory
import com.ibm.msg.client.wmq.WMQConstants
import javax.jms.Session
// 1 : The configuration parameters for the IBM MQ service are centralized here.
def hostName = "quickstart-cp4i-test-ibm-mq.cp4i-portall.svc"
def hostPort = 1414
def channelName = "SB.SVRCONN"
def queueManagerName = "QUICKSTART"
def queueName = "Testing.IN"
// 2 : Creates a factory object connection
def ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER)
def cf = ff.createConnectionFactory()
// 3 : Sets the properties of the factory object connection
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, hostName)
cf.setIntProperty(WMQConstants.WMQ_PORT, hostPort)
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channelName)
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT)
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName)
// 4 : Creates a connection with the connection credentials and sets up the
Session object
def conn = cf.createConnection("app", "test")
def sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE)
// 5 : Creates a Destination object
def destination = sess.createQueue(queueName)
conn.start()
log.info("#### Start completed!")
// 6 : Saves the object that will be shared among thread groups
System.getProperties().put("Session", sess)
System.getProperties().put("Connection", conn)
System.getProperties().put("Destination", destination)
// 7 : Set the “setupDone” to “true” so the “If Controller” cannot be executed
two times in this run.
vars.put("setupDone", "true")import javax.jms.TextMessage
import javax.jms.BytesMessage
import java.time.LocalDate
import java.time.LocalTime
import java.time.Instant
import java.time.format.DateTimeFormatter
// 1 : Take reference of the shared objects: Session and MQ Destination
def sess = System.getProperties().get("Session")
def destination = System.getProperties().get("Destination")
// 2 : Create a new consumer
def consumer = sess.createConsumer(destination)
def start = Instant.now()
// 3 : Look for an incoming message from the consumer using a 1 second timeout
def msg = consumer.receive(1000)
def stop = Instant.now()
// 4 : Receive API with timeout can return “null” when no message is available
if (msg != null) {
// 5 : Take the data from the incoming message, format a String
with the data and place into a SampleResult so it can be seen in a JMeter
listener (this is a sample piece of code).
if (msg instanceof BytesMessage) {
def tmp = msg.asType(BytesMessage)
log.debug("#### Incoming BytesMessage contains " +
tmp.getBodyLength() + " bytes")
} else if (msg instanceof TextMessage) {
def tmp = msg.asType(TextMessage)
log.debug("#### Incoming TextMessage contains -> " +
tmp.getText())
} else
log.debug("#### Incoming message has unexpected format!")
// 6 : Parse IBM MQ properties related to the timestamp of the “put
message” (this is a sample piece of code).
LocalDate date =
LocalDate.parse(msg.getStringProperty("JMS_IBM_PutDate"),
DateTimeFormatter.ofPattern("uuuuMMdd"))
LocalTime time =
LocalTime.parse(msg.getStringProperty("JMS_IBM_PutTime"),
DateTimeFormatter.ofPattern("HHmmssSS"))
// 7 : Display the message put time in IBM MQ and in UTC (Universal
Time Coordinated).
def timestampDetail = String.format("#### Incoming message was
placed in queue @ %s - %s", date, time)
log.info(timestampDetail)
// 8 : Add information to the SampleResult object that can be seen in
the Listeners
SampleResult.setResponseData(msg.toString() + "\n\n" +
timestampDetail)
SampleResult.setDataType( org.apache.jmeter.samplers.SampleResult.TEXT )
SampleResult.setLatency( stop.toEpochMilli() - start.toEpochMilli() )
} else {
log.info("#### Nothing to fetch!")
}
// 9 : Close the consumer
consumer.close()// 1 :Invoke the close Session and Connection objects (for saving machine
resources)
System.getProperties().get("Session").close()
System.getProperties().get("Connection").close()
log.info("#### Stop completed!")
// 2 : Set the “stopDone” to “true” in manner that “If Controller” cannot be
executed two times into this run
vars.put("stopDone", "true")import java.time.Instant
// 1 : Take reference of the shared objects: Session and MQ Destination. These
objects are used to establish a connection to the IBM MQ service.
def sess = System.getProperties().get("Session")
def destination = System.getProperties().get("Destination")
// 2 : Create a new producer
def producer = sess.createProducer(destination)
// 3 : Used just to add a random time value (for differentiating the messages
in the results)
def rnd = new Random(System.currentTimeMillis())
// 4 : Create a TextMessage and assign it a payload
def payload = String.format("{
"Name":"ABCD"
"ID":"12345"
}", rndnextInt(Integer.MAX_VALUE))
def msg = sess.createTextMessage(payload)
def start = Instant.now()
// 5 : Send message to IBM MQ
producer.send(msg)
def stop = Instant.now()
// 6 : Close the producer
producer.close()
// 7 : Add information to the SampleResult object that can be seen in Listeners
SampleResult.setResponseData(msg.toString())
SampleResult.setDataType( org.apache.jmeter.samplers.SampleResult.TEXT )
SampleResult.setLatency( stop.toEpochMilli() - start.toEpochMilli() )
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]