Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Abrindo a caixa de ferramentas: atirando pedras...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Abrindo a caixa de ferramentas: atirando pedras com Jmeter

Jmeter é uma ferramenta livre e open source cujo objetivo é gerar carga para estimular plataformas online, independente do tipo de arquitetura. Dando continuidade a trilha sobre testes de desempenho, neste workshop será apresentado como é o funcionamento desta ferramenta e qual a melhor forma de utiliza-la, citando exemplos de utilização em uma arquitetura remota com agentes escravos; melhores práticas para não onerar a ferramenta; exemplos de scripts para testes baseados em filas MQ, frameworks com visão e simular navegação de usuários.

Avatar for Evandro Grezeli

Evandro Grezeli

May 17, 2016

More Decks by Evandro Grezeli

Other Decks in Technology

Transcript

  1. Abrindo a Caixa de Ferramentas Atirando Pedras com Jmeter 

    Evandro Grezeli  [email protected]  Maio/2016 Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 1
  2. 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 Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 2
  3. Em 2015... Falando de testes de desempenho Importância de testes

    de desempenho O conceito do tempo de resposta Reconhecimento do Ambiente Tipos de testes de desempenho Metodologia e Planejamento Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 4
  4. AGENDA Configurando o ambiente Modos de usar o Jmeter Melhores

    práticas para criar, testar e atirar Casos complexos e saídas (MQ e Framework com visão) Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 5
  5. 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?
  6. Configurando o ambiente Jmeter é uma ferramenta que precisa de

    uma caixa dentro de uma caixa SO 2.5 GB Jmeter JVM 1.5 GB Ligado diretamente com a capacidade de memória (alocação de thread) E CPU (velocidade que as threads trabalham) Exemplo Intel Core i7 @ 2.20GHz 4 GB RAM DDR3 100 GB disco Cenário simples expressõ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!
  7. Modo 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 DICA Interrompa os testes no modo non-gui utilizando os scripts stoptest.sh ou stoptest.cmd
  8. Modo de usar o JMeter Mestre e Escravo Certifique-se que:

    Mesma versão de Jmeter Mesma 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
  9. Modo de usar o JMeter Mestre e Escravo Certifique-se que:

    Mesma versão de Jmeter Mesma 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
  10. Melhores Práticas Criar Basicamente, Jmeter se divide em duas áreas

    Testplan: Á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 group in a new transaction controller” Adicione as exclusões sugeridas, clicando no botão “Add suggested excludes” View results tree serve para visualizar a navegação já realizada
  11. Melhores Práticas Testar User Defined Variables Sempre tenha váriaveis locais

    no script, para dar fácil manutenção no mesmo Exemplo Endereç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 Manager Permita que o Jmeter gerencie os cookies da aplicação de forma automática HTTP Header Manager Toda requisição Web deve ter um cabeçalho, com este componente o mesmo é padronizado para todas as requisições
  12. Melhores Práticas Testar CSV Data Set Config Com este componente

    é possível utilizar um arquivo CSV (comma-separated-value) para massa de dados das requisições HTTP Request Defaults Todas as requisições Web possuem um caminho padronizado Response Assertion Verifica na resposta da requisição através de padrões de buscar por um trecho de texto específico, URL, código de resposta HTTP e resposta de um header
  13. Melhores Práticas Testar Throughput Controller Através deste componente é possível

    definir o peso de cada umas das requisições, em percentual Regular Expression Extractor Através de um motor de expressão regular baseado em Perl, é possível extrair informações de uma resposta web e utiliza-la posteriormente
  14. Melhores Práticas Testar View Results Tree Uma 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 enviado e qual o seu response ATENÇÃO Este componente consome muita memória da JVM, portanto não esqueça de desabilita-lo antes de executar um teste pesado
  15. Melhores Práticas Atirar Ultimate Thread Group Uma biblioteca construída pela

    comunidade que permite o incremento de threads (ramp-up) ao longo de um tempo pré-determinado Exemplo
  16. Melhores Práticas Atirar Simple Data Writer Gerenciador de escrita em

    disco que não interage com a interface gráfica (leve) Exemplo de configuração DICA Por padrão, o Jmeter escreve o timestamp como epoch time, altere para uma forma mais legível alterando no jmeter.properties
  17. 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 criada Content O conteúdo da mensagem que será enviada Communication Style Conforme o teste, deve ser escolhido entre request ou request-response
  18. 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
  19. Caso 1: Teste com MQ O resultado de um teste

    para verificação, deve ser assim:
  20. Caso 2: Teste IceFaces e AjaxPush 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 do lado do servidor “The Horror!” Viewstate windowstate eventview Expressões regulares bem aplicadas, conhecimento da aplicação resolvem os problemas! AjaxPush
  21. Caso 2: Teste IceFaces e AjaxPush 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. DICA O 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:
  22. Caso 2: Teste IceFaces e AjaxPush 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. SOBRE O 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.
  23. Caso 2: Teste IceFaces e AjaxPush 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
  24. Caso 2: Teste IceFaces e AjaxPush 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 IMPORTANTE Ao 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)