The Grinder – Um Framework Java Para Testes de Carga

Postado em Atualizado em

The Grinder é um framework de testes de carga que facilita a execução de testes de carga distribuídas entre vários servidores. Os scripts de teste são escritos em Jython, fornecendo suporte para testar uma ampla gama de protocolos de rede. The Grinder também vem com um plug-in para testar serviços HTTP.

Características

  •     Distributed load testing
  •     Test script support for Java, Jython, and Clojure
  •     Mature HTTP support

Veja mais informações no link[1].

The Grinder e JBoss AS 7

Vamos realizar um simples teste com o The Grinder com uma aplicação que conta o número de requests realizados. Faça o deploy da aplicação web no JBoss AS 7. Vou deixar aqui a aplicação que utilizei para contar o número de requests.

package com.jbossdivers.loadtest;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(value="/RequestCounter")
public class RequestCounter extends HttpServlet{

   private static final long serialVersionUID = 1L;

   private int requestCount;

   public void init()
   {
      requestCount = 0;
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
   {

   response.setContentType("text/html");
   requestCount++;
   PrintWriter out = response.getWriter();
   String title = "Total de Requisições: ";
   String docType =
   "<!doctype html public \"-//w3c//dtd html 4.0 " +
   "transitional//en\">\n";
   out.println(docType +
   "<html>\n" +
   "<head><title>" + title + "</title></head>\n" +
   "<body bgcolor=\"#FFFFAA\">\n" +
   "<h1 align=\"center\">" + title + "</h1>\n" +
   "<h2 align=\"center\">" + requestCount + "</h2>\n" +
   "</body></html>");

   }
   public void destroy()
   {

   }
}

Ao realizar o deploy a aplicação responderá na seguinte url: http://servidor:8080/LoadTest/RequestCounter

Descompacte o arquivo  grinder-3.10-binary.zip que baixamos.  Para não precisarmos alterar muitas configurações crie um arquivo chamado request.py no diretório GRINDER_HOME/examples e adicione o conteúdo abaixo:

from net.grinder.script.Grinder import grinder
from net.grinder.script import Test
from net.grinder.plugin.http import HTTPRequest

test = Test(1, "Request resource")
request = test.wrap(HTTPRequest())

class TestRunner:
  def __call__(self):
    result = request.GET("http://servidor:8080/LoadTest/RequestCounter")

Esse script realizará  as requests na nossa aplicação web.

Edite também o arquivo GRINDER_HOME/examples/grinder.properties, e deixe-o como abaixo:

grinder.script = request.py
grinder.processes = 1
grinder.threads = 1
grinder.runs = 0

Crie um arquivo chamado setEnv.sh para setar as propriedades e iniciar o The Grinder:

#!/bin/sh
GRINDERPATH=/opt/grinder-3.10
export GRINDERPATH

JAVA_HOME=/opt/jdk1.6.0_35
export JAVA_HOME

USER_MEM_ARGS="-server -Xms512m -Xmx512m -XX:NewRatio=2 -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:MaxGCPauseMillis=200 -XX:GCTimeRatio=19 -XX:+UseParallelOldGC"
export USER_MEM_ARGS
GRINDERPROPERTIES=${GRINDERPATH}/examples/grinder.properties
export GRINDERPROPERTIES
CLASSPATH=${GRINDERPATH}/lib/grinder.jar:${CLASSPATH}
export CLASSPATH

PATH=${JAVA_HOME}/bin:${PATH}
export PATH

Podemos acompanhar todos as requests e métricas coletadas pelo The Grinder no console. Para iniciá-lo crie um script chamado startConsole.sh e adicione o conteúdo abaixo:

#!/bin/sh
source setEnv.sh
java ${USER_MEM_ARGS} -cp ${CLASSPATH} net.grinder.Console

E finalmente para iniciar o agent crie o script startAgent.sh e adicione o conteúdo abaixo:

#!/bin/sh
source setEnv.sh
java ${USER_MEM_ARGS} -cp ${CLASSPATH} net.grinder.Grinder ${GRINDERPROPERTIES}

Para testar,  primeiro inicie o scritp startConsole.sh.

Agora inicie o agent com o script startAgent.sh e clique em Start the worker processes no console que foi aberto anteriormente:

Você pode ver alguns detalhes sobre performance na aba Results:

Veja também  o count de requests da nossa aplicação:

Esse foi um simples teste de como podemos utlizar o The Grinder para testar as nossas aplicações.  Vou fazer mais alguns posts relacionados a isso.

Espero que tenha ajudado.

Arquivos desse post aqui.

Abraços

Referências:

[1] – http://grinder.sourceforge.net/
[2] – http://middlewaremagic.com/jboss/

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s