29
M Evandro Grezeli [email protected] Maio/2016 Abrindo a Caixa de Ferramentas Atirando Pedras com Jmeter Maio de 2016

Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Embed Size (px)

Citation preview

Page 1: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

M

Evandro Grezeli

[email protected]

Maio/2016

Abrindo a Caixa de Ferramentas

Atirando Pedras com Jmeter

Maio de 2016

Page 2: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Sobre

Entusiasta em assuntos que tangem a desempenho de aplicação

+10 anos de experiência com desenvolvimento de software Java e otimização de sistemas em baixa plataforma

Manutenção e desenvolvimento de componentes para o Jmeter

Colunista no site http://jmeter.com.br

Especialista em capacidade e desempenho na maior companhia de meios de pagamento do Brasil

Page 3: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

ANTERIORMENTENO CMG 2015...

Page 4: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Em 2015...

Falando de testes de desempenho

Importância de testes de desempenhoO conceito do tempo de resposta

Reconhecimento do AmbienteTipos de testes de desempenho

Metodologia e Planejamento

Page 5: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Agenda

Configurando o ambienteModos de usar o Jmeter

Melhores práticas para criar, testar e atirarCasos complexos e saídas (MQ e Framework

com visão)

Page 6: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Configurando o ambiente

Page 7: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Configurando o ambiente

Pré requisitos mínimos*:

* fonte oficial: http://jmeter.apache.org/usermanual/get-started.html

OK, e...?… se eu quiser simular 1.000 usuários virtuais?… utilizar recursos visuais durante o teste?… trafegar todos os elementos da página?… utilizar beanshell durante o teste?… realizar validações em todos os passos do teste?

Page 8: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Configurando o ambiente

Jmeter é uma ferramenta que precisa de uma caixa dentro de uma caixa

SO 2.5 GB

Jmeter JVM1.5 GB

Ligado diretamente com a capacidade de memória (alocação de thread)

E CPU (velocidade que as threads trabalham)ExemploIntel Core i7 @ 2.20GHz4 GB RAM DDR3100 GB disco

Cenário simplesexpressões regulares; output em arquivo;

distribuição de peso nativa

Na prática, a conta* é para cada thread criada no Jmeter, é necessário 2,5 MB disponível na JVM

* pode variar de acordo com a forma que o Jmeter é inicializado, para mais!

Page 9: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Modos de usar o JMeter

GUI (para testes e criação)

Linha de comando (apenas para teste)

Onde:-n: indica que não deve ser aberta a GUI-t: o caminho do script que será executado-l: arquivo gerado com informações do teste

DICAInterrompa os testes no

modo non-gui utilizando os scriptsstoptest.sh ou stoptest.cmd

Page 10: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Modos de usar o JMeter

Mestre e EscravoCertifique-se que:

Mesma versão de JmeterMesma versão de JVM

Massa de dados estão no local correto

Iniciando o(s) escravo(s)

Adicione o endereço do escravo no mestre No arquivo jmeter.properties

Page 11: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Modos de usar o JMeter

Mestre e EscravoCertifique-se que:

Mesma versão de JmeterMesma versão de JVM

Massa de dados estão no local correto

Iniciando o(s) escravo(s) de forma non-GUI

Onde:-n: indica que não deve ser aberta a GUI-t: o caminho do script que será executado-r: endereços dos servidores escravos presentes no properties

Page 12: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasCriar

Basicamente, Jmeter se divide em duas áreasTestplan: Área destinada a colocar os elementos referentes ao teste Workbench: Área destinada a colocar os elementos que gravam requisições HTTP

O que deve se atentar:Para facilitar na criação, na área “TestPlan”, adicione um “Thread Group” e use-o

como “Target Controller”

Agrupe as transações, definindo no combo box “Grouping” a opção “Put each groupin a new transaction controller”

Adicione as exclusões sugeridas, clicando no botão “Add suggested excludes”

View results tree servepara visualizar a navegação

já realizada

Page 13: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasTestar

User Defined VariablesSempre tenha váriaveis locais no script, para

dar fácil manutenção no mesmoExemploEndereço de diretórios para escrita de log, leitura de massa de dados; diferentes valores de endereços web (ambiente homologação, TI, produção)

HTTP Cookie ManagerPermita que o Jmeter gerencie os cookies da

aplicação de forma automática

HTTP Header ManagerToda requisição Web deve ter um cabeçalho, com este componente o mesmo é padronizado para todas as requisições

Page 14: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasTestar

CSV Data Set ConfigCom este componente é possível utilizar um

arquivo CSV (comma-separated-value)para massa de dados das requisições

HTTP Request DefaultsTodas as requisições Web possuem um caminho padronizado

Response AssertionVerifica na resposta da requisição através

de padrões de buscar por um trecho detexto específico, URL, código de resposta

HTTP e resposta de um header

Page 15: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasTestar

Throughput ControllerAtravés deste componente é possível

definir o peso de cada umas das requisições, em percentual

Regular Expression ExtractorAtravés de um motor de expressão regularbaseado em Perl, é possível extrairinformações de uma resposta web e utiliza-la posteriormente

Page 16: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasTestar

View Results TreeUma vez criado, editado e configurado o script, com este relatório é possível visualizar através de um simulador de navegador web como foi o request enviadoe qual o seu response

ATENÇÃOEste componente consome

muita memória da JVM, portantonão esqueça de desabilita-lo

antes de executar um teste pesado

Page 17: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasAtirar

Ultimate Thread GroupUma biblioteca construída pela comunidade

que permite o incremento de threads (ramp-up) ao longo de um

tempo pré-determinadoExemplo

Page 18: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Melhores práticasAtirar Simple Data Writer

Gerenciador de escrita em disco que não interage com a interface gráfica (leve)

Exemplo de configuração

DICAPor padrão, o Jmeter escreve o

timestamp como epoch time, altere para uma forma mais legível alterando no

jmeter.properties

Page 19: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 1: Teste com MQ

Nativamente, o Jmeter tem suporte ao protocolo MQ, no caso JMS

O JMS Point-to-Point envia uma mensagem única e exclusivamente para uma destinada fila de uma aplicação de maneira assíncrona.

QueueConnection Factory

Nome JNDI (definição de um contexto que específica aonde procurar um objeto, no nosso caso um objeto no Websphere MQ) da queue connection factory (direcionamentos do depósito de informações iniciais de filas) que será utilizado para conectar com o sistema de mensagem.

JNDI name Request queue

Nome JNDI da fila já previamente criadaContent

O conteúdo da mensagem que será enviada

Communication Style

Conforme o teste, deve ser escolhido entre request ou request-response

Page 20: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 1: Teste com MQ

Initial Context Factory

É a definição para o JNDI aonde ele deve começar a procura pelo contexto. Para contexto de arquivos de

sistema, preencha este campo com “com.sun.jndi.fscontext.RefFSContextFactory”.

Provider URL

Ao definir o contexto de busca por arquivos de sistema, neste campo é definido aonde este arquivo se encontra, neste caso citando que ele deve abrir o arquivo presente na pasta onde o arquivo binding foi gerado. Este campo deverá ficar preenchido da seguinte maneira: file:${caminho}.

Onde:

file: informo ao JMeter que ele deve abrir o primeiro arquivo que ele encontrar dentro de um caminho específico${caminho}: uma variável definida apontando o diretório onde o arquivo se encontra do gerenciador de fila está gerado, com os apontamentos devidos

Page 21: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 1: Teste com MQ

O resultado de um teste para verificação, deve ser assim:

Page 22: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 2: Teste IceFaces eAjaxPush

Componente de visão é uma forma que o desenvolvedor tem de armazenar a navegação do usuário entre “push” e “push back”, do lado do cliente ou dolado do servidor

“The Horror!”

Viewstate windowstate

eventview

Expressões regulares bem aplicadas, conhecimento da aplicação resolvem os problemas!

AjaxPush

Page 23: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 2: Teste IceFaces eAjaxPush

Jmeter e Javascript/Ajax?

Oficialmente, não é suportado pelo Jmeter requisições do tipo cliente side. Portanto, para poder atualizar as

requisições de uma post, é necessário extrair dados de um response.

DICAO Jmeter respeita hierarquia. Uma vez colocado expressão regular antes de

requisições, a mesma será aplicada toda vez que as condições forem atendidas

Exemplo de regex:

Page 24: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 2: Teste IceFaces eAjaxPush

Desafio é conseguir simular de maneira correta o Ajax Push.

A requisição que aguarda pela atualiazação do icepush é um servlet que bloqueia a requisição quando uma atualização da visão é realizada (tempo padrão para este mecanismo é de 55 segundos). Se nenhuma atualização estiver disponível após o tempo aguardado, uma resposta contendo o valor <noop/> retorna como resposta da requisição.

SOBREO Ajax Push permite a aplicação atualizar qualquer parte da página em qualquer

momento para qualquer grupo de usuários, através de requisições assíncronas disparada pelo cliente ao servidor.

Page 25: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 2: Teste IceFaces eAjaxPush

Para que seja visualizada uma atualização do pushId, é necessário enviar na requisição a ice.view daquele instante. Logo após esta requisição, é feita uma expressão regular para extrair a resposta da mesma

Page 26: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Caso 2: Teste IceFaces eAjaxPush

Logo após a extração da resposta da requisição, é feita uma verificação condicional através do If Controller. Caso a condição seja satisfeita uma requisição a aplicação é feita com os novos dados atualizados da página

IMPORTANTEAo final do ciclo da thread, deve ser enviado um submit

contendo o “dispose” da visão, para não sobrecarregar a memória do servidor (simular usuário real)

Page 27: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Abrindo a Caixa de Ferramentas

Evandro [email protected]

http://br.linkedin.com/pub/evandro-grezeli/6/b88/719/en

Page 28: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Teste de Desempenho:Para saber mais...

Referência bibliográficas:Myers, Glenford J. The Art of Software Testing. 2ª ed. New Jersey: John Wiley & Sons Inc, 2004.

Bartié, Alexandre. Garantia de Qualidade de Software. 3ª ed. São Paulo: Campus, 2002.

Pressman, Roger S. Engenharia de Software. 6ª ed. São Paulo: Pearson Makron Books, 2005.

Menascé, Daniel A., Almeida, Virgilio A. F. Planejamento de Capacidade para serviços na Web: Métricas, modelos e métodos. São Paulo: Campus Elsevier, 2003.

Miller, Robert B. Response time in man-computer conversational transactions. New York: International Business Machine Corporation, in press.

Almeida, Virgilio, Menascé, Daniel A., Dowdy, Larry W. Performance by Design: Computer Capacity Planning by Example. New Jersey: Prentice Hall, 2004.

Meier, J. D. et al. Performance Testing Guidance for Web Applications. Redmond: Microsoft Press, 2007.

Page 29: Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Teste de Desempenho:Para saber mais...

Referência web:Jmeter BR

http://www.jmeter.com.br

Performance Project Planning

http://www.wilsonmar.com/perfplan.aspx

Memory leaks in enterprise java applications

http://www.javaworld.com/javaworld/jw-03-2006/jw-0313-leak.html

Introducing Microsoft Web Application Stress Tool

http://www1bpt.bridgeport.edu/sed/projects/cs597/Fall_2002/jishah/web_application_stress.htm

Load testing web applications using microsoft web application stress tool

http://www.west-wind.com/presentations/webstress/webstress.htm

FAQ – Performance & Load Testing

http://www.sqaforums.com/showflat.php?Cat=0&Number=41861&an=0&page=0

User Experience, not metrics

http://www.ibm.com/developerworks/rational/library/4228.html

Top 25+ Reasons Web Applications don’t scale

http://whitepapers.techrepublic.com.com/abstract.aspx?docid=38871