Skip to content

Testes de Performace

João Guilherme Farias Duda edited this page Dec 22, 2015 · 3 revisions

#Testes de perfomace O teste de perfomance é utilizado para averiguar a carga de requisições que o servidor pode suportar. Para fazer estes testes será utilizado o Apache Jmeter que é uma aplicação para testes de perfomances. Para facilitar a criação de testes, é utilizado o ruby-jmeter, que é o Jmeter sendo rodado via Ruby. Todas os procedimentos aqui documentados são referentes a Mac.

##Instalação Após a instalação dos componentes do OpenRedu, basta rodar, para instalar a versão ruby do jmeter:
gem install ruby-jmeter

O ruby-jmeter não vem com todas as funcionalidades da versão base do jmeter, então é necessário instalá-lo:
brew install jmeter

##Utilização Para utilizar o jmeter é necessário antes criar um teste, um exemplo (comentado) pode ser encontrado em tests/StressTest/LoginTest.rb Para criar o teste a partir deste arquivo ruby basta bulidar como ruby (note que o teste será criado na pasta onde o comando estiver sendo chamado, no exemplo a seguir ela será criada no root do projeto):
ruby tests/StressTest/LoginTest.rb

Aparecerá uma mensagem confirmando a criação do teste (caso o jmeter não tenha sido instalado, poderá ocorrer um erro nesta etapa)
INFO -- : Test plan saved to: jmeter.jmx

Para rodar o arquivo de teste é necessário utilizar o Jmeter-GUI, para abrí-lo basta fazer: jmeter

Com o Jmeter-GUI aberto basta abrir o arquivo jmeter.jmx, para o teste de Login, neste momento é possível estar:

  • O número de threads - Este número NÃO representa a quantidade de requisições, pois depende como cada thread é representada.
  • Ramp up - O tempo demorado para que todas as threads sejam criadas, este número varia de acordo com a complexidade das threads.

Finalizado o set up, basta rodar o teste (seta verde no topo-centro da interface).

Ao fim do teste os resultados podem ser vistos do lado esquerdo.

##Explicando os testes

Existem dois resultados principais:

  • Summary Report - Este resultado é um dos mais importantes para mensurar o quanto o servidor suporta. Neste resultado existem as variáveis:

    • Label - O nome da amostra. Este serve para subdividir o teste
    • Samples - O número de amostras de uma dada label
    • Average - O tempo médio transcorrido de um conjunto de resultados
    • Min - O menor tempo transcorrido para amostras com o mesmo label
    • Max - O maior tempo transcorrido para amostras com o mesmo label
    • Std. Dev. - O Desvio Padrão do tempo transcorrido da amostra
    • Error % - A percentagem de requests com erros.
    • Throughput - este fator é medido em requests por segundo/minuto/hora. A unidade de tempo é escolhido de tal forma que o rate mostrado seja pelo menos 1.0. Este é o principal fator a ser observado pois ele mostra como o servidor está lidando com a quantidade de requisições (mas não é o suficiente para dizer o quão bem o servidor está).
    • Kb/sec - O throughput mensurado em kb por segundos.
  • View Results Tree - Este resultado serve para checar quais erros ocorreram durante o processamento do teste, o que pode ser útil tanto para descobrir erros no teste ou identificar quando o servidor recebeu requisições demais.

##Entendendo Para a maioria dos stress tests as variáveis mais importantes são Throughput (que mede a quantidade de requisições por tempo) e Error %(caso este valor fique muito alto, quer dizer que o servidor provavelmente não está conseguindo lidar com as requisições, ou que os testes foram feitos errados, neste caso seria 100%). Note que todas as outras variáveis também são relevantes para o processo, mas de forma geral elas variam muito de caso a caso.

##Teste em servidor Para testes em servidores reais é necessário que o teste funcione de maneira distribuída, porque de forma geral um único cliente iria parar de funcionar antes que o servidor passasse por uma situação de muitas requisições. Para ver mais sobre isso, basta checar a [página de testes distribuídos do jmeter].(http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf)

##Referências