Utilizando o JMeter para realizar testes de carga com requisições HTTP

Em nosso cenário atual de utilização do Manager Edoc sentimos a necessidade de realizarmos testes cada vez mais próximos da sua realidade de uso. Esse tipo de cenário exige que o Manager Edoc seja capaz de responder a um grande número de requisições Http simultâneas, sem aumentar a memória a ponto de causar um “estouro de memória”.

Uma suite de testes normal não consegue simular situações de grande demanda por determinada funcionalidade, como por exemplo a impressão. Para casos como esse utilizamos uma ferramente chamada Apache JMeter .

O Apache JMeter é uma aplicação desktop desenvolvida para realizar testes de desempenho e estresse em aplicações cliente/servidor tais como aplicações Web. Ele pode ser usado para simular cargas de trabalho de determinada funcionalidade do Manager Edoc, testando sua robustez.

Por ser uma ferramenta livre e inteiramente escrita em Java, o JMeter é compatível com qualquer ambiente capaz de suportar a máquina virtual Java versão 1.4 ou superior. O JMeter permite a criação de testes para diversos protocolos, como HTTP, JDBC, FTP e SOAP.

A execução dos testes com o JMeter, pode ser feita de duas formas: em uma máquina só ou de forma distribuída, onde o esforço do teste de determinada funcionalidade é dividido entre diversas máquinas. A partilha do esforço do teste de uma funcionalidade é uma característica necessária e muito importante para a correta execução dos testes de desempenho e estresse, pois através dela os testadores podem conseguir uma maior fidelidade na recriação de determinado cenário de teste. A divisão do esforço de teste vai evitar gargalos tanto de processamento quando de caminhos na rede do sistema sob teste.

No JMeter a estrutura dos testes e de seus elementos é feita através de uma estrutura de árvore hierárquica, onde a raiz é o Plano de Teste. Na figura 1 é mostrada a interface inicial do Apache JMeter. E na figura 1.2 é possível visualizar a estrutura em árvore hierárquica.

Figura 1.

Figura 1.2

Na figura 1.2 podemos observar a estrutura em árvore onde a raiz é o “Plano de Teste WorkFlows NFe” (Test Plan) e os Grupos (Thread Group) que pertencem a esse plano de teste.

  • Plano de Teste (Test Plan): representa o cenário global do plano de teste.
  • Grupo de Usuários (Thread Group): armazena as configurações do grupo de usuários virtuais, onde cada usuário corresponde a uma Thread que simula a navegação de um usuário utilizando determinada funcionalidade.
  • Área de trabalho: utilizada somente como uma área de armazenamento temporário para elementos dos testes que não serão executados.

Cada grupo é especifico para uma funcionalidade do Manager Edoc.

Dentro de cada Grupo temos os elementos:

  • Gerenciador de Cabeçalhos HTTP: armazena o cabeçalho da requisição Http. No cenário do Manager Edoc ele salva o campo authorization para fazer a autenticação básica do Edoc. (Figura 2)

Figura 2.

  • Requisição Http (Exporta NF-e HTTP): armazena as configurações gerais da requisição HTTP. Nesse componente colocamos o ip do servidor onde está o Manger Edoc, a porta, o método POST ou GET, o caminho a interface Web e no campo Parameters, colocamos os parâmetros necessários para a requisição que desejamos fazer, conforme figura 3.

Figura 3.

  • Ver Árvore de Resultados (Ouvintes ou Listeners): armazenam o resultado das requisições do grupo de usuários. Armazenam requisições com falha quanto as corretas. Conforme figura 4 e 5 podemos ver dois tipos de ouvintes. O ouvinte da figura 4 possui um estrutura em árvore para visualização dos resultados, enquanto o da figura 5 possui um estrutura em tabela.

Figura 4.

Figura 5.

O JMeter possui uma gama muito grande de componentes e controladores. Foi explicado somente os componentes que estão sendo utilizados no momento para fazer os testes de desempenho e estresse do Manager Edoc.

Criando um plano de testes para a função Modo do Manager Edoc

Primeiramente vamos fazer o download do Apache JMeter no site da Apache, no seguinte link: http://jmeter.apache.org/download_jmeter.cgi conforme figura 6. E faça o download do arquivo .zip. Lembrando que é necessário ter o Java instalado antes de executar esses passos a seguir.

Figura 6.

Após fazer o download do arquivo, faça a descompactação do seu conteúdo em uma pasta de sua preferência. Dentro do arquivo estará a pasta contendo todos os arquivos do JMeter. Figura 7.

Figura 7.

Com a pasta do JMeter extraida, localiza a pasta “bin” dentro da pasta raiz do JMeter. Figura 8.

Figura 8.

Entre na pasta bin e localize o arquivo ApacheJMeter.jar e execute. Assim o JMeter será aberto e podemos começar a criar um plano de testes contendo um grupo de usuários que irá testar a funcionalidade do Modo do Manager Edoc.

Com a interface aberta click com o botão direito no Plano de Teste e escolha a opção Adicionar/Threads(Users)/Grupo de Usuários conforme figura 9.

Figura 9.

Com o grupo de usuários criados podemos visualizar suas propriedades, vamos alterar o nome para Grupo de Usuários Modo. Temos as seguintes propriedades:

  • Número de Usuários Virtuais (threads): indica o número de usuários virtuais que irão utilizar a funcionalidade em questão.
  • Tempo de inicialização (em segundos): indica o intervalo de tempo onde cada usuário vai iniciar o uso da funcionalidade.
  • Contador de Iteração: indica quantas vezes a funcionalidade em questão será disparada.

Por exemplo, se deixarmos os valores padrões para as três propriedades conforme Figura 10, estaremos dizendo que: um usuário vai iniciar a cada 1 segundo e irá repetir a operação 1 vez.

Figura 10.

Caso as configurações sejam trocadas para Threads 10, Tempo inicialização 5 e contador 100, estaremos dizendo que: 10 usuários irão iniciar a cada 5 segundos e irá acontecer 100 repetições da funcionalidade. Caso deixamos o check box Infinito marcado a funcionalidade será executada com 10 usuários iniciando a cada 5 segundos até o testado parar a execução do JMeter pelo botão “Stop” no menu principal. Conforme figura 11.

Figura 11.

Como grupo de usuários criado click com o botão direito sobre ele e escolha Adicionar/Elemento de Configuração/Gerenciador de Cabeçalhos HTTP conforme figura 12. Na tela de configurações do gerenciador de cabeçalho click no botão adicionar e coloque o nome e valor conform abaixo:

Nome = authorization

Valor = Basic YWRtaW46MTIzbXVkYXI=

Com a autenticação básica do Edoc preenchida click novamente no grupo de usuários com o botão direito e click em Adicionar/Testador/Requisição HTTP conforme figura 13.

Figura 13.

Com a tela das configurações da requisição HTTP aberta, configure as propriedades conforme 14. Com os seguintes valores:

  • Servidor ou IP: configure com o ip da máquina onde o Edoc está rodando.

  • Número da Porta: configure com o porta configurada no Edoc

  • Método: Será POST ou GET de acordo com a rota da APIWeb do Edoc. No caso será GET para Rota do MODO.

  • Caminho: caminho da rota da APIWebo do Edoc. Valor para rota MODO NFCe: /ManagerAPIWeb/nfce/modo

  • Na Aba Parameters click no botão Adicionar para incluir os parâmetros da requisição de acordo com manual do Manager Edoc. Nesse exemplo vamos alterar a propriedade AtualizaDataHoraEnvio que pode ter os valores ‘0’ e ‘1’. Preencha os parâmetros conforme abaixo

    Nome Valor

    AtualizaDataHoraEnvio 1

         cnpj                                        00819201004455            
    
         grupo                                      edoc
    

Figura 14.

Após a configuração da requisição HTTP vamos adicionar dois Ouvintes ou Listeners para visualizarmos as requisições e suas respostas. Click com o botão direito no grupo de usuário e escolha Adicionar/Ouvintes/Var Árvore de Resultados e depois da mesma forma escolha Adicionar/Ouvintes/Ver Resultados em Tabela conforme Figura 15.

Figura 15.

Após esses passos teremos o seguinte grupo:

2015-03-30 15_07_59-Grupo de Usuários Modo.jmx (C__apache-jmeter-2.11_bin_Grupo de Usuários Modo.jmx.png|354px;x162px;

Para iniciar os testes basta dar um click no botão Play conforme abaixo.

Figura 16.

Com o JMeter rodando sempre é possível para os testes com o botão STOP. Quando existem mais de um Grupo do plano de testes todos eles irão disparar ao mesmo quando quando o botão PLAY é acionado. Para rodar um único grupo basta desabilitar os grupos aos quais não se deseja disparar clicanco com o botão direto e escolhando a opção desabilitar.

Os botões com a vassoura em destaque na figura 16, servem para limpar o resultado das requisições dos Ouvintes. O primeiro limpa somente o resulta do grupo selecionado, o segundo limpa o resultado de todos os ouvintes de todos os grupos do plano de testes.

As imagens abaixo (Figura 17 e 18) mostram duas abas do Ouvinte de resultados em formato de árvore, na Aba Requisição é possível verificar como a requisição foi formada para envio e na Aba Dados da Resposta é possível verificar como foi a resposta da requisição.

Figura 17

Figura 18