Tutorial JMeter: Uso do JMeter para Testes de Desempenho em Plataforma Web
1. Introdução ao JMeter
Tutorial JMeter: O JMeter é uma aplicação desktop de código aberto, 100% feita em Java desenvolvida para executar testes funcionais e medir o desempenho de aplicações. Ele foi originalmente projetado para testar aplicações Web, mas seu uso se expandiu para outras funções de teste (http://jmeter.apache.org/index.html).
O JMeter pode ser usado para testar os seguintes tipos de servidores:
- Web – HTTP, HTTPS
- SOAP
- Database via JDBC
- LDAP
- JMS
- Mail – SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
O objetivo da estratégia do JMeter é prover cenários de testes mais reais a forma de uso dos sistemas testados. Portanto, os testes de carga devem simular o mais próximo possível da realidade de utilização, cenários realistas ajudam a minimizar os efeitos da subestimação ou superestimação dos tempos de resposta das aplicações.
Neste tutorial, iremos mostrar como o JMeter pode ser usado em nossa Metodologia de Testes, sendo utilizado para os testes de escalabilidade, como pode ser visto em: http://www2.decom.ufop.br/imobilis/?p=520.
Definições
Para que isso possa ser viável a ferramenta de teste de carga deve garantir os seguinte comportamentos
- Tempo pra pensar: Tempo para que o usuário pare (pense) durante suas interações com o sistema. Faz os usuários virtuais se comportarem como se fossem usuários reais. Por meio deste tempo, são injetados atrasos e paradas variáveis nos testes para simular cargas de utilização mais realistas.
- Cache de navegador: Permite que requisições estáticas como imagens, folhas de estilos, scripts entre outros sejam realizadas apenas uma vez por usuário, sabendo que o comportamento padrão dos navegadores de mercado fazem cache de arquivos que não são alterados com frequência.
- Concorrência:Significa vários usuários usando a aplicação em diversas funcionalidades no mesmo período.
- Requisições derivadas:Requisições feitas a partir de uma requisição HTTP principal, são elas as requisições para imagens, folhas de estilo e arquivos de script Javascript.
- Número de Iterações:Recomenda-se que haja mais de uma iteração para cada thread, preferencialmente que o teste seja feito por um período de tempo que permita a todos os usuários estarem utilizando o sistema concorrentemente. A repetição dos testes por várias iterações permite ao sistema de adaptar ao número de usuários concorrentes tornando os tempos de resposta mais próximos de um cenário real.
- Temporizador de Sincronização:O temporizador de sincronização deve ser utilizado em casos que se deseje garantir que uma requisição seja executada por todas as threads (usuários virtuais) ao mesmo tempo. Normalmente a requisição a ser sincronizada encontra-se entre outras requisições que podem tirar a sincronização dos usuários virtuais, como por exemplo o login no sistema, sendo que neste normalmente a funcionalidade que deseja-se testar esta após a entrada dos usuários no sistema.
2. Instalação e uso do JMeter
Segue abaixo, as instruções para instalar, criar um projeto e executar um plano de testes no JMeter:
Baixar o JMeter no endereço:
http://jmeter.apache.org/download_jmeter.cgi .Descompactar o arquivo “apache-jmeter-2.7.zip”, por exemplo, na pasta:
Criar um projeto no JMeter:
Para iniciar o JMeter basta executar o arquivo:
A tela abaixo irá aparecer
Edite o item “Plano de Teste” colocando um nome relacionado ao site que será testado, por exemplo “Teste Cocatrel”.
Criar um grupo de usuários.
Clicar com botão direito sobre o plano de testes “Teste Cocatrel” e navegar por: “Adicionar -> Threads (Users) -> Grupo de Usuários”.
No grupo “Propriedades do Usuário Virtual” pode-se indicar o número de usuários desejado no campo “Número de Usuários Virtuais (threads)”, a quantidade de execuções por usuário no campo “Contador de Iteração” ou indicar a execução por um período determinado selecionado o “Agendador”.
Clique no botão “Salvar” e salve o projeto no endereço desejado, por exemplo:
Configurações para gravar uma navegação em um site a ser testado.
Criar um proxy no JMeter.Clicar com botão direito sobre o item “Área de Trabalho” e navegar por: “Adicionar -> Elementos que não são de Teste -> Servidor HTTP Proxy”
Em “Global Settings / Porta” coloque uma porta não usada em seu computador, por exemplo “9191”.
Criar um proxy no navegador.
i. Deixe o JMeter “de lado” e abra o navegador de Internet “Internet Explorer”;
ii. Vá para o menu “Ferramentas -> Opções da Internet -> Conexões -> Configurações da LAN -> Servidor Proxy”
iii. Digite “localhost” em “Endereço” e “9191” (deve ser o mesmo valor inserido no JMeter) no campo “porta”.
Gravar a navegação a ser testada.
No JMeter, clique no botão “Iniciar” para gravar a navegação a ser testada:
Volte para o Internet Explorer e acesse o endereço “http://www.cocatrel.com.br/” e depois clique no botão “Mercado de Café”.
- Volte novamente para o JMeter e clique no botão “Interromper”, ao lado do botão “Iniciar”.
Observe que abaixo do item “Grupo de Usuários” que várias requisições foram gravadas relativas à navegação feita, muitas delas não tem relevância para teste real e poderiam ser desconsideradas.
- Vamos excluir todas as requisições gravadas e vamos adicionar padrões de URL a serem excluídos. Adicionaremos filtros para a não inclusão de requisições para folhas de estilo (CSS), arquivos de script de javascript (JS) e imagens (JPG, JPEG, GIF, PNG).
Exemplos:
.*\.js
.*\.png
.*\.gif
.*\.jpeg
.*\.css
.*\.swf
- Clicar em “Salvar” e repita o processo de gravação da navegação.
Como resultado tivemos um número menor de requisições gravadas e ainda podemos retirar mais alguma manualmente caso desejarmos. No nosso teste iremos tirar as duas requisições com nome “/__utm.gif” que não são relevantes para o teste.
É importante lembrar que o componente de proxy do JMeter não é gravado quando salvamos o projeto e é perdido quando fechamos a janela do JMeter. Se houver necessidade de gravar outra navegação para teste um novo componente “Servidor HTTP Proxy” precisará ser recriado.
Adicionar um temporizador
Um temporizador deve ser adicionado após uma requisição gravada para refletir a situação real em que o usuário pararia por alguns instantes antes de clicar em algum link para entrar em outra página.
- Vamos usar o “Temporizador Constante”. Clique com o botão direito do mouse sobre o item “/site/mercado-de-cafe” e navegue por “Adicionar -> Temporizador -> Temporizador Constante”.
- Vamos alterar o tempo de espera para 5.000 ( 5 segundos ) para representar o tempo em que usuário procuraria o link desejado na tela.
Adicionando ouvintes
É essencial adicionar “ouvintes” para obtermos relatórios automáticos após a execução dos testes. Existem vários tipos de “ouvintes” mas vamos usar apenas os três citados abaixo que foram criados clicando com o botão direito sobre o componente “Grupo de Usuários” e navegando em “Adicionar -> Ouvinte”.
- Gráfico Agregado
- Ver Resultados em Tabela
- Ver Árvore de Resultados
Executar o teste.
Para executar o teste basta clicar no botão iniciar, representado por uma seta verde no topo da tela do JMeter.
Nas imagens abaixo temos o resultado sendo exibido pelos três “ouvintes” que usamos.
Conclusão
O JMeter é uma ferramenta poderosa para automatizar testes essencialmente aqueles voltados para o mundo Web. Deve-se atentar para que os testes reflitam ao máximo a execução real do software tanto no que diz respeito às páginas navegadas, como no tempo de intervalo de acesso de uma página para outra e também ao número de usuários simultâneos.
Referências
[1] JMeter
Disponível em: http://jmeter.apache.org/index.html.
Acesso em: 20/08/2012.
[2] Uso do JMeter para Testes de Performance em Plataforma Web
Disponível em: http://juliancesar.com.br/j/2011/11/03/uso-do-jmeter-para-testes-de-performance-em-plataforma-web/.
Acesso em: 23/08/2012.
Boa tarde.
Estou realizando testes de performance e queria saber se o Jmeter apenas simula ou ele registra no servidor os usuarios virtuais?
Obrigado
Depende de como os usuários interagem com o sistema a ser testado.
Se você fizer um cenário de teste em que um usuário efetua um login na aplicação este usuário deverá ser registrado no servidor.
Obrigado pelo tutorial de aprendizagem do Jmeter! Ajudou a iniciar os testes!
Obrigado Eduardo!
Parabéns pelo artigo. Ótimo compartilhar para ajudar e incentivar quem deseja usar o JMeter.
Recentemente, usei o JMeter e o W3 Total Cache e comprovei excelentes reduções no tempo de carregamento das páginas: http://testedesoftware.com/teste-de-performance-com-jmeter-e-w3-total-cache/467/
Abraços!
Obrigado Fabrício!
Ótimo artigo!
Gostaria de saber se consigo realizar um teste de performance com o Jmeter em um servidor na nuvem? Tenho um cenário onde tenho uma aplicação .exe em Delphi que realiza requisições em um servidor na nuvem.
Cristiano,
Não vejo empecilho para que você crie um cenário de teste em que o JMeter faça requisições para um servidor HTTP na nuvem.
Agora, se você quer testar uma aplicação exe Delphi, quando eu utilizada o JMeter isso não era possível, não sei se seria possível em alguma versão mais nova.
Bom dia, excelente artigo!
Gostaria de saber, se consigo fazer várias requisições diferentes várias vezes(com n usuários).
Eu preciso certificar de que está chegando ao mesmo tempo no rabbit várias requisições ao mesmo tempo de vários usuários diferentes.