INSTITUTO DE INFORMTICA PAPPE INTEGRAO Manual de Utilizao da Ferramenta JMeter <Verso v1.0> Goinia 2013 Esta obra est licenciada sob uma Licena Creative Commons Attribution 3.0. PAPPE Integrao Agradecimentos Esta conquista resultado de apoio e ajuda de muitas pessoas que contriburam para a realizao deste trabalho. FAPEG e ao INF-UFG pelo auxlio nanceiro e tcnico. s empresas participantes e patrocinadoras deste projeto: Canion Software, Deciso Sistemas, Meta Tecnologia e Tron Informtica. Aos nossos parceiros: Mowe Tecnologia, TupiLabs e CERCOMP-UFG. Aos colaboradores responsveis pela execuo deste projeto: Dr Auri Marcelo Rizzo Vincenzi, Dr Cssio Leonardo Rodrigues, Dr Celso Gonalves Camilo Junior, Msc Jacson Rodrigues Barbosa, Adailton Ferreira de Arajo, Andressa Martins, Guilherme Sampaio Soares, Jailton Alkimin Louzada, Malba Jacob Prudente, Paulo Marcos Soares Rodrigues e Vinicius Vieira Pessoni. Resumo Integrao, PAPPE. Manual de Utilizao da Ferramenta JMeter. Goinia, 2013. 29p. Manual Tcnico. Instituto de Informtica, Universidade Federal de Gois. Palavraschave Teste de software, Micro e Pequena Empresa de TI. Contedo Lista de Figuras 6 Lista de Tabelas 7 1 Introduo 8 1.1 Objetivos do manual 8 1.2 Organizao do Manual 8 2 Testes de Performance, Carga e Stress 9 2.1 Teste de Performance 9 2.2 Teste de Carga 9 2.3 Teste de Stress 10 3 JMeter 11 3.1 Requisitos de Instalao 11 3.1.1 Verso Java 11 3.1.2 Sistema Operacional 11 3.1.3 Instalao 11 3.1.4 Executando o JMeter 12 4 Utilizao da Ferramenta 13 4.1 Criando um Plano de Teste (Test Plan) 13 4.1.1 Adicionando usurios virtuais 13 4.1.2 Adicionando Requisies de Servios ao Thread Group 15 4.1.3 Utilizando o HTTP Request 15 4.1.4 Relatrios de execuo e Asseres 16 5 Executando os Testes 20 5.1 Preparando o Script de Teste 20 5.1.1 Setando a Quantidade de Usurios Virtuais 21 5.1.2 Aplicao Sob Teste 23 5.1.3 Apertando o Play 23 5.1.4 Relatrios 24 Summary Report 24 Graph Results 25 Assertion Results e Response Assertion 26 6 Concluso 28 Bibliograa 29 Lista de Figuras 3.1 Tela inicial do JMeter 12 4.1 Caminho para o Thread Groups 14 4.2 Thread Groups 14 4.3 Caminho para os controladores de requisies 15 4.4 HTTP Request 16 4.5 Caminho para os componentes Listener 17 4.6 Listener adicionados ao Test Plan 17 4.7 Caminho para os componentes de assero 18 4.8 Response Assertion 19 5.1 Caminho para abrir o script 20 5.2 Encontrando o script de teste 21 5.3 Script completo 22 5.4 Adicionando usurios virtuais 22 5.5 Informando a URL da aplicao sob teste 23 5.6 Executando o teste 24 5.7 Summary Report 25 5.8 Graph Results 26 5.9 Response Assertion 26 5.10 Exemplo de todas as amostras com retorno correto. 27 5.11 Exemplo de amostras com valores de retorno divergente. 27 Lista de Tabelas CAPTULO 1 Introduo 1.1 Objetivos do manual A proposta deste manual demonstrar a utilizao de uma importante ferramenta open source para teste de carga, stress e performance: Apache JMeter. Esta ferramenta auxilia no dimensionamento e avaliao dos limites dos sistemas web. 1.2 Organizao do Manual CAPTULO 2 Testes de Performance, Carga e Stress Nos dias de hoje a Internet tem um papel fundamental na disseminao de co- nhecimento e informaes diversas. Com isso, as aplicaes web tm obtido uma grande importncia no cotidiano das pessoas e por conseqncia, das empresas. A possibilidade de mltiplos usurios utilizando a aplicao, interface com sistemas heterogneos e aces- sos remotos dos mais variados tipos tm demandado cada vez mais esforos para manter a integridade da infra-estrutura intacta. Para aferir a capacidade, a disponibilidade em casos extremos ou apenas vericar o tempo de resposta de uma determina funcionalidade da aplicao, se faz necessrio a utilizao de ferramentas que permitam a simulao do uso e a devida documentao dos resultados obtidos. Diante desse cenrio a ferramenta de teste de performance Apache JMeter tem se desta- cado por sua facilidade de uso e versatilidade. 2.1 Teste de Performance Os testes de performance tem como nalidade vericar o desempenho do sistema em condies normais de uso, onde o foco obter informaes relevantes da utilizao das principais funes. 2.2 Teste de Carga Os testes de carga, diferentemente dos testes de performance, tem como objetivo a vericao do comportamento do produto com uma determinada quantidade de usu- rios. Dessa forma, o sistema observado sobre a utilizao de um nmero estimado de usurios prximo das condies reais. 2.3 Teste de Stress 10 2.3 Teste de Stress O objetivo de um teste de stress explorar os limites do sistema, aumentando a carga indenidamente at provocar um crash. A principal diferena entre o teste de carga e o teste performance que, enquanto o primeiro preocupa-se em determinar como o sistema se comporta em caso de um grande numero de acessos, o segundo tem por objetivo testar a quantidade mxima de usurios, determinando, assim, Seu limite de utilizao. CAPTULO 3 JMeter O Apache JMeter uma ferramenta desktop para testes de performance, desen- volvida utilizando a linguagem Java e licenciada sob os termos da Apache License, Ver- sion 2.0. Esta ferramenta foi primeiramente utilizada para realizar testes em aplicaes web, mas tem expandido suas funcionalidades, podendo realizar testes funcionais, testes em bancos de dados entre outros. 3.1 Requisitos de Instalao 3.1.1 Verso Java Devido ao fato do JMeter utilizar apenas as APIs padro do Java, ele requer uma JVM 6 (Java Virtual Machine) ou superior. 3.1.2 Sistema Operacional Como o JMeter desenvolvido 100% em Java, possvel rod-lo em qualquer sistema operacional que tenha uma implementao Java compatvel. 3.1.3 Instalao Para instalar o JMeter basta efetuar o download da verso mais recente (http://jmeter.apache.org/) e descompactar o arquivo no diretrio em que ser insta- lado. A verso 2.9, segue a seguinte estrutura de diretrios 1 : apache-jmeter-2.9 apache-jmeter-2.9/bin apache-jmeter-2.9/docs 1 Voc pode renomear o diretrio raiz (ou seja, apache-jmeter-2.9), se quiser, mas no altere os nomes de sub-diretrio. 3.1 Requisitos de Instalao 12 apache-jmeter-2.9/extras apache-jmeter-2.9/lib/ apache-jmeter-2.9/lib/ext apache-jmeter-2.9/lib/junit apache-jmeter-2.9/printable_docs 3.1.4 Executando o JMeter Para executar o JMeter, execute o arquivo ApacheJMeter.jar. Esse arquivo encontrado no diretrio bin. Aps uma breve pausa, a GUI (Graphical User Interface) JMeter deve aparecer (gura 3.1). Figura 3.1: Tela inicial do JMeter CAPTULO 4 Utilizao da Ferramenta 4.1 Criando um Plano de Teste (Test Plan) O TestPlan o componente bsico para a criao de qualquer script (.jmx) utilizando o JMeter e descreve uma srie de passos que a ferramenta ir executar quando rodar os testes. A ele adicionado os demais componentes pertinentes aos testes que sero executados. Os principais componentes adicionados ao TestPlan so: Listeners - elementos que capturam os resultados gerados pelo plano de testes e apresenta-os em um determinado formato, com vinculo ou no a um TestPlan; Assertions - possibilidade de adicionar pontos de armao para vericao se determinada resposta est de acordo com alguma armao colocada no elemento Sampler; Thread Groups - representao de um grupo de usurio executando determinada(s) solicitao (es); Samplers - representao de uma solicitao, que pode ser HTTP, FTP, SOAP, JDBC, LDAP e Java. 4.1.1 Adicionando usurios virtuais Para simular as aes dos usurios o JMeter permite a adio de um componente chamado Thread Groups. Este componente agrega todos os demais elementos neces- srios para a execuo de nossos testes, controlando as aes de pseudos usurios no sistema. Para adicion-lo ao Test Plan basta acionar: Edit/Add/Threads(Users)/Thread Groups. Conforme gura 4.1. 4.1 Criando um Plano de Teste (Test Plan) 14 Figura 4.1: Caminho para o Thread Groups Conforme podemos ver, gura 4.2, o Thread Group contm o Thread Proper- ties que permite controlar o nmero de usurios alterando o item Number of Threads (users) que por denio vem setado com o valor de 1 (um) usurio. Figura 4.2: Thread Groups 4.1 Criando um Plano de Teste (Test Plan) 15 4.1.2 Adicionando Requisies de Servios ao Thread Group Para efetuar uma requisio a um determinado servio que queremos testar o JMeter faz uso de controladores chamados, genericamente, de Sampler. Existem vrios tipos de Sampler, para os mais variados tipos de servios, sendo que, os mais comuns so: HTTP Request 1 , FTP Request, SOAP/XML-RPC Request , JDBC Request, LDAP Request e Java Request. O caminho para os controladores de requisio : Edit/Add/Sampler, conforme gura 4.3. Figura 4.3: Caminho para os controladores de requisies 4.1.3 Utilizando o HTTP Request Este componente responsvel por gerenciar as requisies HTTP enviadas a uma pgina web qualquer. O HTTP Request possui, na seo Web Server, um campo chamado Server Name or IP. Esse campo onde devemos informar a URL ou o IP para a pgina web que ser alvo dos testes. Existe, ainda, o campo Port Number onde deve-se informar a porta de comunicao para a pgina indicada, caso seja omitido esta informao o JMeter admite a porta como sendo a 80. Veja gura 4.4. 1 Este manual se limitar a mostrar o funcionamento do HTTP Request, por se tratar do controlador de requisio mais largamente utilizado. 4.1 Criando um Plano de Teste (Test Plan) 16 Figura 4.4: HTTP Request 4.1.4 Relatrios de execuo e Asseres Aps termos criando um Test Plan, adicionado um Thread Group para gerenciar a quantidade de usurios virtuais e adicionado um controlador de requisies HTTP Request, chegou a hora inserir componentes para a coleta e avaliao dos dados obtidos com a execuo do script. Para tanto, temos os elementos Listener que so elementos que monitoram a execuo do script, coletam e apresentam os dados em determinados formatos para uma analise em tempo de execuo e/ou analise posterior. O caminho para adicionarmos alguns desses elementos esto em: Edit/Add/Listerner. Conforme gura 4.5. 4.1 Criando um Plano de Teste (Test Plan) 17 Figura 4.5: Caminho para os componentes Listener Neste manual utilizaremos os seguintes Listener: Summary Report, Graph Results e o Assertion Results (gura 4.6). Figura 4.6: Listener adicionados ao Test Plan As vezes precisamos vericar se os testes que estamos executando atingiram uma meta pr-estabelecida, como por exemplo: responderam dentro de um dado limite de tempo ou responderam com um determinado cdigo de retorno. Para validar as respostas 4.1 Criando um Plano de Teste (Test Plan) 18 do servidor, existem os componentes de asseres, Assertions. Podemos introduzir um Assertion pelo caminho: Edit/Add/Assertion (gura 4.7). Figura 4.7: Caminho para os componentes de assero Para este manual utilizamos o elemento de assero Response Assertion, que permite congurar quais tipos de respostas HTML esperamos para os nossos testes. Perceba que o valor 200|302, no campo Patterns to Test, foi setado para dizer ao JMeter que esperamos como resposta os cdigos HTML 200 (o servidor retornou a pgina com sucesso) ou cdigo HTML 302 (pgina movida temporariamente ou sua pgina foi redirecionada), gura 4.8. 4.1 Criando um Plano de Teste (Test Plan) 19 Figura 4.8: Response Assertion Agora podemos salvar o script, preferencialmente em um servidor de controle de verso 2 assim, poder ter um total controle das alteraes ocorridas. 2 Existem vrios tipos de servidores de verso open source, onde os mais populares so: Servidores SVN, GitHub e CVS. CAPTULO 5 Executando os Testes Agora que j criamos o script para o JMeter, s nos falta executar os testes. Deve-se ter em mente que o ambiente para execuo dos testes de performance, carga e principalmente os testes de stress devem ser exclusivos para esta nalidade. Como a inteno criar um grande volume de usurios acessando a aplicao, a rede e o servidor sob teste estaro sobrecarregados impossibilitando o acesso por usurios reais. 5.1 Preparando o Script de Teste Em nosso exemplo faremos um teste de carga simples em um website qualquer. Para isso, usaremos o script criado no captulo anterior. Abra o JMeter e v em: File/Open, como podemos ver na gura 5.1. Figura 5.1: Caminho para abrir o script 5.1 Preparando o Script de Teste 21 O aplicativo abrir um pop-up para a escolha do script que usaremos nos testes, escolha o que criamos anteriormente e clique em open, gura 5.2. Figura 5.2: Encontrando o script de teste 5.1.1 Setando a Quantidade de Usurios Virtuais No capitulo 4 foi criado um script bsico com os seguintes componen- tes: Test Plan, Thread Group, HTTP Request,Summary Report,Graph Re- sults,Assertion Results,Response Assertion e WorkBench, conforme gura 5.3. 5.1 Preparando o Script de Teste 22 Figura 5.3: Script completo Vamos agora acrescentar 10 usurios virtuais, alterando o campo Number of Treads (Users) do componente Thread Group. Com isso, teremos uma carga de 10 usurios acessando nossa aplicao simultaneamente, gura 5.4. Figura 5.4: Adicionando usurios virtuais 5.1 Preparando o Script de Teste 23 5.1.2 Aplicao Sob Teste Foi criado um plano de teste contendo uma poro de componentes, cada qual com suas particularidades, mas ainda no dissemos ao JMeter qual o caminho para a aplicao que gostaramos de testar. O elemento que usaremos para informar qual a URL ou o IP do sistema sob teste o HTTP Request. Este componente contem um campo chamado Server Name or IP, onde setaremos o a URL da aplicao sob testes, gura 5.5. Figura 5.5: Informando a URL da aplicao sob teste Desta forma indicamos o caminho onde o JMeter deve efetuar os testes. Como no informamos a porta, ele utilizar a porta web padro 80. 5.1.3 Apertando o Play Agora que j indicamos a quantidade de usurios que iro acessar a aplicao e j informamos o caminho para o servidor web que est localizado o sistema, podemos executar nossos testes. Podemos executar os teste atravs do menu Run/Start ou simplesmente clicando no icone Start, conforme gura 5.6. 5.1 Preparando o Script de Teste 24 Figura 5.6: Executando o teste 5.1.4 Relatrios Ao executar os testes precisaremos coletar as mtricas necessrias para a analise do comportamento do sistema. A entra em ao os componentes Listener. Summary Report Este elemento apresenta um resumo do comportamento do servidor ao executar os testes, gura 5.7. As mtricas apresentadas por ele so: Label - Rotulo do elemento de requisio de servio adicionado ao Test Plan, em nosso caso HTTP Requeste. Samples - Quantidade de amostras, isto , pedidos de requisio HTTP que ocorreu para o determinado segmento. Average - Tempo mdio, em milissegundos, de resposta para determinado pedido de requisio HTTP. Min - Tempo mnimo, em milissegundos, de resposta para um determinado pedido de requisio HTTP. Max - Tempo maximo, em milissegundos, de resposta para um determinado pedido de requisiao HTTP. Std. Dev - O desvio padro apresenta os casos em que determinadas amostras se distanciam do comportamento mdio das demais amostras em razo do tempo de resposta. Quanto menor este valor mais consistente o padro de tempo das amostras coletadas. 5.1 Preparando o Script de Teste 25 Error % - Porcentagem de erros nas amostra executadas. Throughput - a medida da quantidade de requisies por unidade de tempo. KB/sec - Medida do Throughput em Kilobytes por segundo. Avg. Bytes - Tamanho mdio das respostas das amostras em bytes. Figura 5.7: Summary Report Graph Results O comportamento da aplicao pode ser analisado, tambm, de maneira grca em tempo de execuo. Para isto, usamos o elemento Graph Results, gura 5.8, que apresenta alguns dos seguintes parmetros: Average - Mdia entre o tempo e o nmero de requisies; Median - Mediana um valor que divide as amostras em duas partes iguais. Metade das amostras so menores que a mdia e a outra metade maior que a mdia, podendo ter algumas amostras com valor igual a mdia; Deviation - a medida da variao de um dado conjunto de dados; Throughput - Nmero de amostra por unidade de tempo. 5.1 Preparando o Script de Teste 26 Figura 5.8: Graph Results Assertion Results e Response Assertion Vimos no captulo 4 que possvel determinar valores para avaliarmos os resultados. Utilizando o elemento Response Assertion, podemos determinar os valores esperados e todos os outros sero considerados como incorretos, conforme gura 5.9. Figura 5.9: Response Assertion Aps indicarmos quais valores so esperados para uma correta execuo, preci- samos avaliar o resultado dos testes. Vericando se o comportamento do sistema est de 5.1 Preparando o Script de Teste 27 acordo com o especicado. Para efetuarmos esta vericao utilizamos o elemento As- sertion Results. A gura 5.10 mostra um exemplo onde todas as amostras obtiveram um valor de retorno igual ao esperado, conforme indicado no Response Assertion. Figura 5.10: Exemplo de todas as amostras comretorno correto. Em caso de obtermos valores de retorno diferente do indicado, o Assertion Results apresenta erro para cada amostra que obteve valor divergente do estabelecido, conforme gura 5.11. Figura 5.11: Exemplo de amostras com valores de retorno diver- gente. CAPTULO 6 Concluso O Apache JMeter uma excelente ferramenta para teste de performance, carga e stress. Mas ela no se limita apenas a estes tipos de testes, podendo ser utilizada para efetuar testes em bancos de dados, testes funcionais e vrios outros. Alm da grande variedade de componentes inclusos na ferramenta, ainda possvel adicionar extenses para desempenhar as mais variadas tarefas. Bibliograa