Prepararando o ambiente para testes com o JMeter

Introdução ao JMeter

JMeter é um software criado pela Apache com o intuito de facilitar testes de carga, stress e performance. Por exemplo, se você é um administrador de um e-commerce, estamos em Novembro e logo chega a maior liquidação da Internet no ano – a Black Friday, o JMeter poderá ajudá-lo a mensurar a quantidade de acessos simultâneos que o site suportará sem degradação da performance para os usuários.

Para começarmos a trabalhar com o JMeter, deve-se definir primeiramente um arquivo de configuração .jmx. Dentro deste arquivo de configuração diremos quantos usuários acessarão o sistema simultaneamente, e que operações realizarão. O objetivo desse post não é mostrar a montagem de um arquivo de configuração .jmx – que irá depender de conhecimentos específicos sobre a aplicação alvo dos testes. Assim, passaremos à próxima etapa, que é a configuração das máquinas que receberão o arquivo .jmx e rodarão os testes.

Arquivos

Os seguintes arquivos serão necessários para a execução dos testes:

  • servers.txt: dentro desse arquivo teremos apenas o número do endereço IP das máquinas que realizarão o teste de carga.
  • install-all.sh: A partir da lista de endereços contida dentro do arquivo servers.txt, instalará o JMeter, assim como enviará o arquivo .jmx para as máquinas especificadas.
  • jmeter-all.sh: Inicia os testes em todas as máquinas.
  • ps-all.sh: Verifica se o processo que executa os testes ainda está rodando.
  • kill-all.sh: para o teste em todas as máquinas.
  • clean-all.sh: Remove todos os arquivos dos testes em todas as máquinas.

Agora listaremos o conteúdo de cada arquivo, começando com o servers.txt. Ele vai conter uma lista com todos os IPs que vão rodar o JMeter. Por exemplo:

#Lista de ips das maquinas que rodarão o jmeter
54.244.76.232
54.214.90.141
54.190.203.102
54.189.106.241
54.190.25.244
54.189.165.54
54.190.250.117
54.185.30.29
54.185.187.15
54.244.194.34

Procedimento

Após colocar a lista de IPs dentro do arquivo servers.txt, configuraremos o install-all.sh para instalar ou copiar tudo o que for necessário para todos os servidores. Lembrando que o arquivo plano_teste.jmx (arquivo que deve ser gerado na primeira etapa) e também o próprio executável JMeter devem estar na mesma pasta do servidor onde estão hospedados os scripts para que possam ser copiados para os servidores que rodarão os testes.

cat servers.txt | grep -v '^#.*$' | while read HOST

do
  echo $HOST
  scp  apache-jmeter-2.8.tar.gz user@$HOST:
  ssh user@$HOST tar xvfz apache-jmeter-2.8.tar.gz >$HOST.log </dev/null
  scp plano_teste.jmx user@$HOST:
done

O próximo arquivo principal será o jmeter-all.sh, responsável por rodar o processo também a partir da lista em servers.txt:

cat servers.txt | grep -v '^#.*$' | while read HOST
do
  echo $HOST
  scp plano_teste.jmx ec2-user@$HOST:
  ssh ec2-user@$HOST 'apache-jmeter-2.8/bin/jmeter -n -t plano_teste.jmx' </dev/null &
done

Os próximos arquivos são opcionais, porém também são importantes para mantermos um controle melhor do que está rodando:

O script ps-all.sh mostrará quantas instâncias do JMeter ainda estão rodando. O interessante é que esse comando também nos diz quanto de processador e memória RAM o processo do JMeter está utilizando em cada máquina. Caso o consumo esteja muito baixo, pode ser que o teste esteja travado por algum motivo e talvez seja necessário reiniciá-lo. Segue o conteúdo do script:

cat servers.txt | grep -v '^#.*$' | while read HOST
do
echo $HOST
ssh ec2-user@$HOST 'ps -ef | grep java; w' </dev/null
done

O script kill-all.sh matará todos os processos JMeter que estiverem rodando:

cat servers.txt | grep -v '^#.*$' | while read HOST
do
  echo $HOST
  ssh  user@$HOST 'ps -ef | grep java | while read a b c; do kill -9 $b; done' </dev/null
done

O script clean-all.sh removerá da máquina tudo o que for do JMeter:

cat servers.txt | grep -v '^#.*$' | while read HOST
do
  echo $HOST
  ssh user@$HOST rm apache-jmeter-2.8.tar.gz </dev/null
  ssh user@$HOST rm -rf apache-jmeter-2.8 </dev/null
  ssh user@$HOST rm plano_teste.jmx </dev/null
done

Após configurados os arquivos server.txt e os scripts .sh, chegou a hora de rodar os testes. Confira mais uma vez se todos os arquivos estão no mesmo diretório do servidor principal e rode o script install-all.sh. Terminado o processo, rode o script jmeter-all.sh e o teste começará a partir desse momento. Pode-se usar o comando ps-all.sh a qualquer hora para verificar o status dos processos ativos e acompanhamento do teste.

Extras

O arquivo Apache JMeter pode ser baixado em:

http://jmeter.apache.org/

Para finalizar, sugiro configurar previamente o ssh para que não peça senha, como pode ser visto nesse link:

http://www.vivaolinux.com.br/dica/SSH-sem-senha

O objetivo é que a execução dos scripts ocorra sem a necessidade de ficar digitando senha a todo momento.

Considerações Finais

Podemos concluir que a criação de scripts para automatização da tarefa de execução de testes de carga pode ser um pouco trabalhoso no começo, mas dispendendo um esforço inicial, economizamos um bom tempo lá na frente. Além disso, esses scripts podem ser reutilizados e até mesmo adaptados para novas situações ou necessidades de execução de rotinas em diversas máquinas.

Espero que esse artigo seja de valia para todos, pois o JMeter vem sendo cada vez mais utilizado em testes de carga – apresentando a vantagem de ser grátis e possibilitar diversas configurações. Vale a pena conhecer e tirar proveito das suas funcionalidades, se possível com o apoio de ferramental de automatização de tarefas, conforme explicamos em nosso post.

Por ANDERSON LIMA

Postado em: 02 de junho de 2015

Confira outros artigos do nosso blog

Estimando Custos na AWS

08 de março de 2016

Anderson Lima

Usando Amazon SQS como sistema de mensagens (2/2)

02 de março de 2016

Luis Sergio F. Carneiro

Cine Dojo: a mistura da MATERA de Coding Dojo, Cinema, Pipoca e TI!

04 de fevereiro de 2016

Valmir Massafera Jr

Documentação da sua Nuvem com Linha do Comando

15 de dezembro de 2015

Matias Schweizer

Deixe seu comentário