Programmazione:Java/Sampler Test for JMeter

Da WikiSitech.
Vai alla navigazioneVai alla ricerca

<< Back to Java

Questo è un esempio di implementazione di un Sampler di test per JMeter, nello specifico un Sampler per le notifiche JMS su ApacheMQ.

I passi sono pochi

  • Creare un progetto Java
  • Impostare il runtime in modo tale che il modulo possa funzionare da solo
  • Scrivere la classe Sampler

Per utilizzare successivamente il modulo bisogna esportare il jar nella cartella dei plugin di JMeter...e comparirà nell'elenco dei Sampler disponibili

ApacheMQ JMS Sampler code

public class JMeterJmsProducerSampler extends AbstractJavaSamplerClient {

  protected class JMeterJmsExceptionListener implements ExceptionListener {
     protected SampleResult result;
     public JMeterJmsExceptionListener(SampleResult r) {
        result = r;
     }
     /*
      * Funzione chiamata se arriva un eccezione
      */
     public void onException(JMSException e) {
        result.setSuccessful(false);
        result.setResponseMessage(e.getMessage());
     }
  }
  protected String topic, client, message;
  /*
   * Definizione dei parametri, con default, configurabili da JMeter
   */
  @Override
  public Arguments getDefaultParameters() {
     Arguments args = new Arguments();
     args.addArgument("topic", "NotifyTopic");
     args.addArgument("client", "");
     args.addArgument("message", "");
     return args;
  }
  /*
   * Inizializzazione per run
   */
  @Override
  public void setupTest(JavaSamplerContext context) {
     super.setupTest(context);
     topic = context.getParameter("topic", "NotifyTopic");
     client = context.getParameter("client", "");
     message = context.getParameter("message", "");
  }
  /*
   * Lancio del Sampler
   */
  public SampleResult runTest(JavaSamplerContext arg0) {
     SampleResult result = new SampleResult();
     try {
        result.sampleStart();
        Properties props = new Properties();
        props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        props.setProperty(Context.PROVIDER_URL, "tcp://localhost:61616");
        Context ctx = new InitialContext(props);
        TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
        TopicConnection connection = factory.createTopicConnection();
        connection.start();
        TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
        Topic _topic = session.createTopic(topic);
        MessageProducer producer = session.createProducer(_topic);
        TextMessage sms = session.createTextMessage();
        sms.setStringProperty("idclient", client);
        sms.setText(message);
        producer.send(sms);
     } catch (Throwable t) {
        result.setSuccessful(false);
        getLogger().fatalError(t.getMessage());
     } finally {
        result.sampleEnd();
     }
     return result;
  }

}