JBoss Tuning
Ferramentas de Benchmarking
2
Objetivo
Conhecer as principais ferramentas para
 simulação de carga em aplicacões web




                               ...
Cobaias
Exemplo de aplicativo sem
  manutencão de estado




Aplicações que serão usadas para demonstração
       das ferr...
Cobaias
              Exemplo de aplicativo com
                manutencão de estado
tela de
 login



           menu
   ...
netcat




         6
7
echo -e "GET / HTTP/1.0nn" | nc 127.0.0.1 8080




                                               8
$ echo -e "GET /VerySimpleStatelessWebApp/ HTTP/1.0nn" | nc 127.0.0.1 8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-C...
for ((i = 1; i <= 10; i++))
do
   echo "---------------------------------"
   echo -e "GET /VerySimpleStatelessWebApp/ HTT...
Apache Benchmarking
                                ab




‟
  ab is a tool for benchmarking your Apache
Hypertext Transfe...
12
13
14
10 requisições enviadas por 1 thread (10 req/th) ao aplicativo stateless
                                                 ...
1 requisição enviada por 10 threads (0.1 req/th) ao aplicativo stateless
                                 o.O             ...
10 requisições enviadas por 10 threads (1 req/th) ao aplicativo stateless
                                  :-)
          ...
Resultado em HTML
                    18
Resultado em HTML
                    19
Log
a cada requisição,
uma mensagem é
    impressa




                     Página principal do aplicativo stateful
      ...
Simulação da operacão de login do aplicativo stateful
                                                        21
Simulação de acesso à funcionalidade 1 do aplicativo stateful
                                                            ...
Nível 1 de verbosidade
                         23
Nível 2 de verbosidade
- cabeçalho da requisição HTTP -   24
Nível 1 de verbosidade
- códigos de resposta HTTP -   25
Nível 4 de verbosidade
- corpo da resposta HTTP -   26
Atributo ‘nome’ não sendo pego da sessão do usuário
                                                      27
Cada requisição está tentando criar uma nova sessão   28
?
Como armazenar o cookie JSESSIONID para utilizar
 sempre a mesma sessão do usuário no servidor?


                      ...
#fail


 Com o ‘ab’, isso não é possível :-(
Mas com um pouco de script, sim ;-)


                                       ...
Usar netcat e ab para teste de
aplicações web stateless e stateful.

    Verifique a limitação com sistemas stateful.
     ...
Apache JMeter




‟
 Apache JMeter is a 100% pure Java desktop
  application designed to load test functional
  behavior a...
Stateless



            33
Pivô de tudo




               GUI Java simples
                                  34
Dar nome ao
plano de teste




                 35
Definir o conjunto de
 threads que executará o
      plano de teste




10 threads que devem ser,
  todas, iniciadas em 5
 ...
Definir o tipo de
requisições que serão
 feitas pelas threads
        criadas           Vamos gerar
                       ...
Endereço do
                                                  Servidor HTTP




HTTP Request
  Sampler
                   ...
Iniciar a execução
do plano de teste




                  Log do servidor
                durante a execução
            ...
Coleta informacões
durante a execução
 do plano de teste




                    Apresenta os
                resultados d...
10 requisições   41
View Results Tree Listener   42
View Results Tree Listener
                             43
JUnit
                           revisão

•   Test Plan
    -   Base de toda a execução
•   Thread Group
    -   Conjunto ...
Usar JMeter para teste de
aplicações web stateless.

Compreenda seus principais conceitos.
                               ...
Stateful



           46
VerySimpleStatefulWebApp

tela de
 login



              menu
             principal




                         funcion...
VerySimpleStatefulWebApp

                                      HTTPSession



                               nome=”Alexan...
VerySimpleStatefulWebApp

tela de
 login



              menu
             principal




                         funcion...
VerySimpleStatefulWebApp

                                      HTTPSession



                               nome=”Alexan...
VerySimpleStatefulWebApp
          index.jsp




                           51
VerySimpleStatefulWebApp

                                      HTTPSession



                               nome=”Alexan...
VerySimpleStatefulWebApp
                            AutenticacaoServlet




  Parâmetro que será
enviado pela requisição
...
VerySimpleStatefulWebApp

                                      HTTPSession



                               nome=”Alexan...
VerySimpleStatefulWebApp
        funcionalidade1.jsp




                     Deve recuperar
                    atributo ...
Resultado do teste




       Resultado do teste
          da index.jsp




    VerySimpleStatefulWebApp
             - Te...
main.jsp gerado após
 invocação da Servlet de
      Autenticação.




VerySimpleStatefulWebApp
         - Menu principal -...
null




Resultado do teste de
 funcionalidade1.jsp



VerySimpleStatefulWebApp
         - Funcionalidade 1 -          58
Um sessão sendo criada pra cada requisição
          JSESSIONID=8287....                59
Um sessão sendo criada pra cada requisição
          JSESSIONID=126A...                 60
Um sessão sendo criada pra cada requisição
          JSESSIONID=58FC...                 61
O JSESSIONID era pra ser armazenado em um cookie no
    cliente, mas o cliente não sabia como fazer isso.   62
Atributo recuperado da sessão




HTTP Cookie Manager




                      Agora sim
                                ...
sem set-cookie na resposta

                             64
Usar JMeter para teste de
     aplicações web stateful.

Sinta na pele o problema da manutenção de estado.
               ...
Nosso teste sempre
 envia os mesmos
   parâmetros
                     66
Nossos testes não estão
    tão realistas....
    Alexandre




    Alexandre

                  WebApp
    Alexandre




...
Na prática, N usuário
diferentes farão o acesso

     Alexandre




       Túlio

                   WebApp
      Luciana
...
$ cat nomes.txt
Zezinho
Huguinho
Luizinho
Pato Donald



                  69
CSV Data Set Config




                     70
CSV Data Set Config
                    Arquivo CSV deve estar no
                   mesmo diretório que o arquivo
        ...
Uso da variávél
    definida no
CSV Data Set Config




                     72
Reexecutar os testes da aplicação Stateful com
um arquivo CSV para variar o usuário enviado.

                Enriqueça se...
JSF



      74
Buscador




           75
Buscador




           tamanho do cache
            de resultados no
                servidor
                           ...
Buscador




           77
Buscador
                                              StringBuffer


                                              CACHE
...
Buscador
index.jsp → memoryleak.jsp




                             79
Buscador
                index.jsp → memoryleak.jsp
                                                   StringBuffer


    ...
Buscador
index.jsp → memoryleak.jsp




                             81
Buscador
index.jsp → memoryleak.jsp




                             82
Buscador
Simulação da busca




                     83
Buscador
                                              StringBuffer


                                              CACHE
...
Buscador
                     memoryleak.jsp

Critério da busca:

<input id="j_id_jsp_841419806_1:criterio"
       type="t...
Buscador
                                     memoryleak.jsp
input type="hidden"
      name="javax.faces.ViewState"
      ...
Buscador
                                     memoryleak.jsp
input type="hidden"
      name="javax.faces.ViewState"
      ...
jMeter
recuperação dinâmica de valores




                                  88
jMeter
recuperação dinâmica de valores




            Referência ao valor
                recuperado
                    ...
Utilização do valor
    recuperado
 anteriormente.




                      90
JMeter
                    gravação do test case




HTTP Proxy Server
  na Workbench




                                ...
JMeter
gravação do test case




                        92
93
Recording
Controller




             93
HTTP Proxy
  Server




             93
Porta do
 proxy




           93
Inicie o proxy



                 93
JMeter
gravação do test case




                        94
JMeter
samplers gravados




                    95
96
97
98
Valor estático
substituído por
    variável

                  99
Execute a
suíte de testes
  TesteDeMemoryLeak




                      100
1o. teste
Clique no link da
primeira página




                    101
2o. teste
Simulação de uma
    consulta




                   Memória
                   alocada


                      ...
Olhando de perto,
 há algo errado...



                     103
1a. req




          JSESSIONID=A6421...




2a. req
          JSESSIONID=97F97...
                                104
JSESSIONID=A6421...




2a. req
          JSESSIONID=97F97...
                                104
2a. req
          JSESSIONID=97F97...
                                104
Esquecemos do
HTTP Cookie Manager
                      105
JSESSIONID=2F040C8...




JSESSIONID=2F040C8...



                        106
Mas, de carga,
este teste não tem nada.



                           107
Apenas 1 thread
sendo instanciada




                    108
2 threads agora
6EEF3...




278B2...




           110
            98
111
2 iterações do que estiver
dentro do Loop Controller




                             112
113
thread 1




thread 2




           114
115
1a. busca da
 1a. thread
                   Cache
               resultante da
                1a. busca da
              ...
1a. busca da
 2a. thread
                   Cache
               resultante da
                1a. busca da
              ...
Em resumo...



               118
algumaPaginaJSF



javax.faces.ViewState=H4sIAAAAAAAAAJ




javax.faces.ViewState=H4sIAAAAAAAAAJ
                         ...
http://localhost:8080/buscador/faces/memoryleak.jsp



                 javax.faces.ViewState=H4sIAAAAAAAAAJ




    javax...
http://localhost:8080/buscador/faces/memoryleak.jsp



                 javax.faces.ViewState=H4sIAAAAAAAAAJ




    javax...
http://localhost:8080/buscador/faces/memoryleak.jsp



                 javax.faces.ViewState=H4sIAAAAAAAAAJ




    javax...
http://localhost:8080/buscador/faces/memoryleak.jsp




                                      javax.faces.ViewState=H4sIAA...
http://localhost:8080/buscador/faces/memoryleak.jsp




                                      javax.faces.ViewState=H4sIAA...
javax.faces.ViewState=H4sIAAAAAAAAAJ
j_id_jsp_841419806_1=j_id_jsp_841419806_1
j_id_jsp_841419806_1=criterio1DeBusca




 ...
123
124
124
E se a página JSF tivesse dezenas de campos?




                                               125
E se a página JSF tivesse dezenas de campos?



                   #fail


                                               ...
126
http://localhost:8080/buscador/




http://localhost:8080/buscador/faces/memoryleak.jsp




                              ...
http://localhost:8080/buscador/faces/memoryleak.jsp

javax.faces.ViewState=H4sIAAAAAAAAAJ
j_id_jsp_841419806_1=j_id_jsp_84...
Proxy




        129
HTTP
Proxy
Server




         130
Ao testar JSF,
                             lembre-se


• Enviar todos os parâmetros requeridos
 - Analise o código fonte ...
Usar JMeter para teste de
  aplicações web stateful e JSF.

Siga passo a passo para sensibilizar-se com o problema
       ...
Mais sobre JMeter



                    133
Test Plan


Define toda a estratégia de teste.




                                    134
Thread Group
Threads a serem instanciadas para
  execução do Plano de Testes




                                    135
Controllers


                             Logic
Sampler
                           Controller




      Núcleo do Plano d...
Sampler Controller
   Gerador de requisições




                            137
Logic Controller
Define quando será o envio das
  requisições dos Samplers




                                138
Listeners
Apresenta informações coletadas pelo
Plano de Teste durante sua execução




                                   ...
Timers
Pausa entre requisições




                          140
Assertions
Verifica se o teste está gerando os
      resultados esperados




                                     141
142
Tomcoat




          143
Tomcat




         144
Configuration Elements
     Usados para adicionar ou
      modificar requisições




                                145
Configuration Elements
     Usados para adicionar ou
      modificar requisições




                                145
Pre-Processors
Modifica a requisição antes de ser
     enviada pelo Sampler




                                    146
Post-Processors
  Extração de dados da
     resposta HTTP




                         147
Ordem de Execução

1. Configuration elements
2. Pre-Processors
3. Timers
4. Sampler
5. Post-Processors
6. Assertions
7. Lis...
Propriedades
          jmeter.properties



...
log_level.jmeter=INFO
log_level.jmeter.junit=DEBUG
user.properties=user.pr...
JMeter



Remote Testing


                 150
!

    151
!




    152
slaves                          master




$JMETER_HOME/bin/jmeter-server




                                 $JMETER_HOM...
Master
                        GUI

# Remote Hosts - comma delimited
remote_hosts=192.168.0.2, 192.168.0.3, 192.168.0.4
  ...
Master
                             non-GUI



jmeter -n -t script.jmx -r


                               ou

jmeter -n -...
Slave


            $ ./jmeter-server



$ tail -f JMETER_HOME/bin/jmeter-server.log


                                   ...
157
Repita, em modo distribuído,
  todos os testes anteriores

  Negocie o uso de máquinas de colegas.
                       ...
159
Outras
Ferramentas




              160
Lobo Continuous Tuning




‟
   Lobo is a tool for tracking performance
  designed to register as the performance of
 your...
httperf




‟
    Httperf is a tool for measuring web server
    performance. It provides a flexible facility
     for gene...
Selenium




‟
  Selenium IDE is a Firefox add-on that
records clicks, typing, and other actions to
 make a test, which yo...
http_load




‟
    http_load runs multiple http fetches in
   parallel, to test the throughput of a web
server. However u...
Siege




‟  Siege is an http regression testing and
 benchmarking utility. It was designed to let
web developers measure ...
OpenWebLoad




‟
    OpenWebLoad is a tool for load testing web
     applications. It aims to be easy to use and
        ...
Grinder




‟
       The Grinder is a    Java TM
                              load testing
     framework that makes it e...
Outras mais

•   Apache JMeter                         •   httperf                   •   Sipp
•   benerator               ...
Recursos
•   Load Testing
    -     http://en.wikipedia.org/wiki/Load_testing
•   Software Performance Testing
    -     h...
Q&A
Upcoming SlideShare
Loading in...5
×

Benchmarking Tools

3,772

Published on

Ferramentas para testes de carga, com foco no JMeter.

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,772
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide







  • Regra b&amp;#xE1;sica.
  • Teste simples do contexto raiz da aplica&amp;#xE7;&amp;#xE3;o.
  • Programa&amp;#xE7;&amp;#xE3;o em BASH do teste de carga.




































  • Vejamos agora como trabalhar com aplica&amp;#xE7;&amp;#xF5;es que mant&amp;#xE9;m estado de execu&amp;#xE7;&amp;#xE3;o.
  • Em nossa aplica&amp;#xE7;&amp;#xE3;o exemplo, h&amp;#xE1; 3 JSPs e 1 Servlet que se interagem da seguinte forma.
  • Ent&amp;#xE3;o, o usu&amp;#xE1;rio acessa o primeiro JSP pelo browser, preenche seu nome e clica OK, que gera um requisi&amp;#xE7;&amp;#xE3;o para a Servlet que recebe o nome preenchido e armazena-o na sess&amp;#xE3;o do usu&amp;#xE1;rio, devolvendo-lhe um segundo JSP. Neste JSP, o usu&amp;#xE1;rio seleciona algum link, que o leva a um terceiro JSP, que recupera da sess&amp;#xE3;o o nome preenchido na primeira p&amp;#xE1;gina.
  • O primeiro teste &amp;#xE9; trivial. S&amp;#xF3; criar um Sampler com a URL raiz da aplica&amp;#xE7;&amp;#xE3;o web.

  • O teste da chamada da Servlet deve simular o envio do par&amp;#xE2;metro pela p&amp;#xE1;gina index.jsp

  • O teste da p&amp;#xE1;gina funcionalidade1.jsp deve faz&amp;#xEA;-la recuperar o atributo &amp;#x2018;nome&amp;#x2019; da sess&amp;#xE3;o do usu&amp;#xE1;rio.


  • Perceba que o par&amp;#xE2;metro nome foi recebido pela requisi&amp;#xE7;&amp;#xE3;o e inclu&amp;#xED;do no resultado do JSP.

  • No primeiro teste, um identificador de sess&amp;#xE3;o de usu&amp;#xE1;rio &amp;#xE9; criado.
  • Mas no segundo teste, um outro identificador de sess&amp;#xE3;o &amp;#xE9; criado.
  • E na terceira requisi&amp;#xE7;&amp;#xE3;o, outro JSESSIONID &amp;#xE9; criado! (:-O
    Ou seja, n&amp;#xE3;o est&amp;#xE1; havendo o controle desses JSESSIONID para que a sess&amp;#xE3;o do usu&amp;#xE1;rio seja mantida.
  • Geralmente, JSESSIONIDs s&amp;#xE3;o armazenados em cookie, nativamente suportados em web browsers, mas n&amp;#xE3;o no JMeter.












  • Usaremos uma simples aplica&amp;#xE7;&amp;#xE3;&amp;#xF5; JSF que simula um sistema de busca.
  • A cada pesquisa realizada retorna um resultado que &amp;#xE9; armazenado em um cache do servidor.
  • O cache cresce a cada nova pesquisa, simulando um Memory Leak.
  • 1. Clique no link &amp;#x201C;Memory Leak&amp;#x201D; para apresenta&amp;#xE7;&amp;#xE3;o da p&amp;#xE1;gina memoryleak.jsp
    2. Chamada &amp;#xE0; p&amp;#xE1;gina memoryleak.jsp
    3. Clique no bot&amp;#xE3;o &amp;#x201C;Buscar&amp;#x201D;
    4. Execu&amp;#xE7;&amp;#xE3;o da &amp;#x201C;regra&amp;#x201D; de busca, com persist&amp;#xEA;ncia dos dados recuperados no cache (5)
    ...



  • Simula&amp;#xE7;&amp;#xE3;o do clique no link da p&amp;#xE1;gina index.jsp para abertura da p&amp;#xE1;gina memoryleak.jsp onde ser&amp;#xE3;o feitas as pesquisas.
  • Resultado do teste.
    P&amp;#xE1;gina memoryleak.jsp aberta.

  • Clique no bot&amp;#xE3;o de pesquisa.
  • Campos HTML gerados por p&amp;#xE1;ginas JSF t&amp;#xEA;m nomeclatura estranha.
  • Outros campos, tem conte&amp;#xFA;do mais estranho ainda.
    Seus valores s&amp;#xE3;o definidos em tempo de execu&amp;#xE7;&amp;#xE3;o, o que torna invi&amp;#xE1;vel a cria&amp;#xE7;&amp;#xE3;o de scripts de testes.
  • O ideal &amp;#xE9; descobrir esses valores din&amp;#xE2;micos em tempo de execu&amp;#xE7;&amp;#xE3;o e utiliz&amp;#xE1;-los para alimentar as configura&amp;#xE7;&amp;#xF5;es do script de testes.
  • Ap&amp;#xF3;s a primeira requisi&amp;#xE7;&amp;#xE3;o, capture o valor da express&amp;#xE3;o regular &amp;#x201C;(.+?)&amp;#x201D; retornado e guarde-o na vari&amp;#xE1;vel jsfViewState.
  • O p&amp;#xF3;s-processamento ocorre ap&amp;#xF3;s a primeira requisi&amp;#xE7;&amp;#xE3;o
  • Requisi&amp;#xE7;&amp;#xE3;o para teste da funcionalidade de busca. Perceba o conjunto de par&amp;#xE2;metros para simula&amp;#xE7;&amp;#xE3;o do preenchimento do formul&amp;#xE1;rio.
  • A forma mais f&amp;#xE1;cil de se configurar samplers para o teste de JSF &amp;#xE9; gerando-os automaticamente a partir da dupla Recording Controller e HTTP Proxy Server.
  • A forma mais f&amp;#xE1;cil de se configurar samplers para o teste de JSF &amp;#xE9; gerando-os automaticamente a partir da dupla Recording Controller e HTTP Proxy Server.







  • Configure o browser para utilizar o HTTP Proxy Server do JMeter e execute a aplica&amp;#xE7;&amp;#xE3;o pelo navegador.
  • Ao final da execu&amp;#xE7;&amp;#xE3;o via browser, finalize o HTTP Proxy Server e verifique os Samplers criados sob o Recording Controller.


  • HTTP Sampler gerado para simula&amp;#xE7;&amp;#xE3;o da funcionalidade de busca, que &amp;#xE9; o que nos mais interessa, pela complexidade dos campos gerados pelo JSF.
  • Finalizado o teste:
    - Remova os samplers que n&amp;#xE3;o forem interessantes para o TestSuite
    - Reposicione os samplers interessantes no TestSuite
    - Substitua valores fixos por vari&amp;#xE1;veis, se necess&amp;#xE1;rio (e.g. ${jsfViewState})
    - Apague Recording Controller e HTTP Proxy Server (opcional)




  • Cada requisi&amp;#xE7;&amp;#xE3;o est&amp;#xE1; criando uma sess&amp;#xE3;o de usu&amp;#xE1;rio diferente.
  • Cada requisi&amp;#xE7;&amp;#xE3;o est&amp;#xE1; criando uma sess&amp;#xE3;o de usu&amp;#xE1;rio diferente.

  • Ap&amp;#xF3;s o HTTP Cookie Manager, a primeira requisi&amp;#xE7;&amp;#xE3;o cria a sess&amp;#xE3;o do usu&amp;#xE1;rio e a segunda reutiliza-a.


  • Incrementar o n&amp;#xFA;mero de threads para a suite n&amp;#xE3;o provocar&amp;#xE1; o estouro de mem&amp;#xF3;ria.
  • Cada thread est&amp;#xE1; criando uma nova sess&amp;#xE3;o. Ainda n&amp;#xE3;o &amp;#xE9; isso que queremos. Queremos executar a busca v&amp;#xE1;rias vezes dentro de uma mesma sess&amp;#xE3;o, para que haja o ac&amp;#xFA;mulo de mem&amp;#xF3;ria atrav&amp;#xE9;s do crescimento do cache simulado.
  • O controlador Loop Controller possibilita a itera&amp;#xE7;&amp;#xE3;o de um conjunto de Samplers.
  • Para cada requisi&amp;#xE7;&amp;#xE3;o &amp;#xE0; p&amp;#xE1;gina memoryleak.jsp, duas requisi&amp;#xE7;&amp;#xF5;es de busca ser&amp;#xE3;o executadas.
  • Para melhor legibilidade, demos nomes significativos pra cada Sampler.
  • - Para cada requisi&amp;#xE7;&amp;#xE3;o &amp;#xE0; p&amp;#xE1;gina de abertura do sistema, duas simula&amp;#xE7;&amp;#xF5;es de busca foram executadas.
    - As duas requisi&amp;#xE7;&amp;#xF5;es &amp;#xE0; p&amp;#xE1;gina de abertura foram configuradas no Thread Group. Cada thread criou uma JSESSIONID pr&amp;#xF3;pria. &amp;#xC9; como se fossem dois usu&amp;#xE1;rios distintos.
    - As duas simula&amp;#xE7;&amp;#xF5;es de busca foram configuradas no Loop Controller. Ambas as simula&amp;#xE7;&amp;#xF5;es utilizam a mesma sess&amp;#xE3;o da thread.
  • Cada par de simula&amp;#xE7;&amp;#xE3;o de busca utiliza a sess&amp;#xE3;o de uma thread.
  • E com isso, conseguimos automatizar a simula&amp;#xE7;&amp;#xE3;o do memory leak.


  • - Ap&amp;#xF3;s a primeira requisi&amp;#xE7;&amp;#xE3;o, o ViewState &amp;#xE9; criado.
    - Nas requisi&amp;#xE7;&amp;#xF5;es subsequentes, o ViewState deve ser reenviado para correta manuten&amp;#xE7;&amp;#xE3;o de estado dos componentes JSF
  • Ent&amp;#xE3;o, no JSF, funciona assim... (explicar)
    S&amp;#xF3; que o valor obtido na primeira resposta deve ser exatamemente o valor utilizado nas reqs posteriores.
    Logo, sempre teremos que executar a primeira requisi&amp;#xE7;&amp;#xE3;o, aguardar a resposta, coletar manualmente o valor gerado e inform&amp;#xE1;-los nos samplers seguintes, o que acaba gerando um grande desperd&amp;#xED;cio de tempo no processo de testes.
  • Ent&amp;#xE3;o, no JSF, funciona assim... (explicar)
    S&amp;#xF3; que o valor obtido na primeira resposta deve ser exatamemente o valor utilizado nas reqs posteriores.
    Logo, sempre teremos que executar a primeira requisi&amp;#xE7;&amp;#xE3;o, aguardar a resposta, coletar manualmente o valor gerado e inform&amp;#xE1;-los nos samplers seguintes, o que acaba gerando um grande desperd&amp;#xED;cio de tempo no processo de testes.
  • Ent&amp;#xE3;o, no JSF, funciona assim... (explicar)
    S&amp;#xF3; que o valor obtido na primeira resposta deve ser exatamemente o valor utilizado nas reqs posteriores.
    Logo, sempre teremos que executar a primeira requisi&amp;#xE7;&amp;#xE3;o, aguardar a resposta, coletar manualmente o valor gerado e inform&amp;#xE1;-los nos samplers seguintes, o que acaba gerando um grande desperd&amp;#xED;cio de tempo no processo de testes.
  • Ent&amp;#xE3;o, no JSF, funciona assim... (explicar)
    S&amp;#xF3; que o valor obtido na primeira resposta deve ser exatamemente o valor utilizado nas reqs posteriores.
    Logo, sempre teremos que executar a primeira requisi&amp;#xE7;&amp;#xE3;o, aguardar a resposta, coletar manualmente o valor gerado e inform&amp;#xE1;-los nos samplers seguintes, o que acaba gerando um grande desperd&amp;#xED;cio de tempo no processo de testes.
  • Ent&amp;#xE3;o, no JSF, funciona assim... (explicar)
    S&amp;#xF3; que o valor obtido na primeira resposta deve ser exatamemente o valor utilizado nas reqs posteriores.
    Logo, sempre teremos que executar a primeira requisi&amp;#xE7;&amp;#xE3;o, aguardar a resposta, coletar manualmente o valor gerado e inform&amp;#xE1;-los nos samplers seguintes, o que acaba gerando um grande desperd&amp;#xED;cio de tempo no processo de testes.
  • - Pra ficar mais din&amp;#xE2;mico, a gente captura o valor em tempo de execu&amp;#xE7;&amp;#xE3;o, logo ap&amp;#xF3;s a primeira requisi&amp;#xE7;&amp;#xE3;o, guarda-o em uma vari&amp;#xE1;vel e o reutiliza nas pr&amp;#xF3;ximas requisi&amp;#xE7;&amp;#xF5;es.
  • Como eu soube que esses eram os dados a serem enviados pelo JMeter?
  • Ora, eu entrei na p&amp;#xE1;gina...
  • ...e vi o c&amp;#xF3;digo fonte.




  • Na pr&amp;#xE1;tica, isso funciona da seguinte forma:
  • Na verdade, este proxy &amp;#xE9; um elemento do JMeter e tem o nome de HTTP Proxy Server.

  • 1a parte: buscador.war
    2a parte: aplica&amp;#xE7;&amp;#xE3;o real









  • P&amp;#xE1;gina principal do Tomcat cont&amp;#xE9;m a mensagem &amp;#x201C;Thanks for using Tomcat!&amp;#x201D;
  • - Deseja-se que toda resposta de HTTP Request contenha a string &amp;#x201C;Thanks for using Tomcoat&amp;#x201D;
    - A string n&amp;#xE3;o &amp;#xE9; encontrada na resposta e o teste falha.
  • - Deseja-se que toda resposta de HTTP Request contenha a string &amp;#x201C;Thanks for using Tomcat&amp;#x201D;
    - Teste bem sucedido!
  • [ToDo] Detalhar?





  • Chega uma hora que o jmeter n&amp;#xE3;o consegue gerar a carga de requisi&amp;#xE7;&amp;#xF5;es desejada.
  • Nesses casos, &amp;#xE9; necess&amp;#xE1;rio pedir ajuda.
  • Com o jmeter, &amp;#xE9; poss&amp;#xED;vel executar testes distribu&amp;#xED;dos.





  • - N&amp;#xE3;o deixem de conferir a documenta&amp;#xE7;&amp;#xE3;o.
    - Teste banco, FTP, ldap, webservice, JMS....











  • Benchmarking Tools

    1. 1. JBoss Tuning Ferramentas de Benchmarking
    2. 2. 2
    3. 3. Objetivo Conhecer as principais ferramentas para simulação de carga em aplicacões web 3
    4. 4. Cobaias Exemplo de aplicativo sem manutencão de estado Aplicações que serão usadas para demonstração das ferramentas de benchmarking 4
    5. 5. Cobaias Exemplo de aplicativo com manutencão de estado tela de login menu principal funcionalidade qualquer 5
    6. 6. netcat 6
    7. 7. 7
    8. 8. echo -e "GET / HTTP/1.0nn" | nc 127.0.0.1 8080 8
    9. 9. $ echo -e "GET /VerySimpleStatelessWebApp/ HTTP/1.0nn" | nc 127.0.0.1 8080 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=52D81F441BABD06C80806B67150E137E; Path=/ VerySimpleStatelessWebApp Content-Type: text/html Content-Length: 53 Date: Thu, 30 Apr 2009 14:07:38 GMT Connection: close <html> <body> <h2>Hello World!</h2> </body> </html> 9
    10. 10. for ((i = 1; i <= 10; i++)) do echo "---------------------------------" echo -e "GET /VerySimpleStatelessWebApp/ HTTP/1.0nn" | nc 127.0.0.1 8080 done 10
    11. 11. Apache Benchmarking ab ‟ ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs.This especially shows you how many requests per second your Apache installation is capable of serving. http://httpd.apache.org/docs/2.0/programs/ab.html 11
    12. 12. 12
    13. 13. 13
    14. 14. 14
    15. 15. 10 requisições enviadas por 1 thread (10 req/th) ao aplicativo stateless 15
    16. 16. 1 requisição enviada por 10 threads (0.1 req/th) ao aplicativo stateless o.O 16
    17. 17. 10 requisições enviadas por 10 threads (1 req/th) ao aplicativo stateless :-) 17
    18. 18. Resultado em HTML 18
    19. 19. Resultado em HTML 19
    20. 20. Log a cada requisição, uma mensagem é impressa Página principal do aplicativo stateful 20
    21. 21. Simulação da operacão de login do aplicativo stateful 21
    22. 22. Simulação de acesso à funcionalidade 1 do aplicativo stateful 22
    23. 23. Nível 1 de verbosidade 23
    24. 24. Nível 2 de verbosidade - cabeçalho da requisição HTTP - 24
    25. 25. Nível 1 de verbosidade - códigos de resposta HTTP - 25
    26. 26. Nível 4 de verbosidade - corpo da resposta HTTP - 26
    27. 27. Atributo ‘nome’ não sendo pego da sessão do usuário 27
    28. 28. Cada requisição está tentando criar uma nova sessão 28
    29. 29. ? Como armazenar o cookie JSESSIONID para utilizar sempre a mesma sessão do usuário no servidor? 29
    30. 30. #fail Com o ‘ab’, isso não é possível :-( Mas com um pouco de script, sim ;-) 30
    31. 31. Usar netcat e ab para teste de aplicações web stateless e stateful. Verifique a limitação com sistemas stateful. 31
    32. 32. Apache JMeter ‟ Apache JMeter is a 100% pure Java desktop application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions. http://jakarta.apache.org/jmeter/ 32
    33. 33. Stateless 33
    34. 34. Pivô de tudo GUI Java simples 34
    35. 35. Dar nome ao plano de teste 35
    36. 36. Definir o conjunto de threads que executará o plano de teste 10 threads que devem ser, todas, iniciadas em 5 segundos 36
    37. 37. Definir o tipo de requisições que serão feitas pelas threads criadas Vamos gerar requisições HTTP 37
    38. 38. Endereço do Servidor HTTP HTTP Request Sampler Porta do Servidor HTTP Método de acesso Nome do contexto ao Servidor HTTP da aplicação Sampler para http://localhost:8080/VerySimpleStatelessWebApp 38
    39. 39. Iniciar a execução do plano de teste Log do servidor durante a execução do plano de teste 10 requisições à pagina index.jsp 39
    40. 40. Coleta informacões durante a execução do plano de teste Apresenta os resultados dos testes em uma árvore Para ver o resultado dos testes 40
    41. 41. 10 requisições 41
    42. 42. View Results Tree Listener 42
    43. 43. View Results Tree Listener 43
    44. 44. JUnit revisão • Test Plan - Base de toda a execução • Thread Group - Conjunto de threads responsáveis pela carga • Sampler - Tipo de requisições que serão enviadas pelo Thread Group • Listener - Coleta informações durante a execução do Test Plan 44
    45. 45. Usar JMeter para teste de aplicações web stateless. Compreenda seus principais conceitos. 45
    46. 46. Stateful 46
    47. 47. VerySimpleStatefulWebApp tela de login menu principal funcionalidade qualquer 47
    48. 48. VerySimpleStatefulWebApp HTTPSession nome=”Alexandre” 7 3 index.jsp 2 AutenticacaoServlet 4 main.jsp funcionalidade1.jsp 1 6 5 8 48
    49. 49. VerySimpleStatefulWebApp tela de login menu principal funcionalidade qualquer 49
    50. 50. VerySimpleStatefulWebApp HTTPSession nome=”Alexandre” 7 3 index.jsp 2 AutenticacaoServlet 4 main.jsp funcionalidade1.jsp 1 6 5 8 50
    51. 51. VerySimpleStatefulWebApp index.jsp 51
    52. 52. VerySimpleStatefulWebApp HTTPSession nome=”Alexandre” 7 3 index.jsp 2 AutenticacaoServlet 4 main.jsp funcionalidade1.jsp 1 6 5 8 52
    53. 53. VerySimpleStatefulWebApp AutenticacaoServlet Parâmetro que será enviado pela requisição até a Servlet de Servlet de autenticação Autenticação e então disponibilizado na sessão do usuário 53
    54. 54. VerySimpleStatefulWebApp HTTPSession nome=”Alexandre” 7 3 index.jsp 2 AutenticacaoServlet 4 main.jsp funcionalidade1.jsp 1 6 5 8 54
    55. 55. VerySimpleStatefulWebApp funcionalidade1.jsp Deve recuperar atributo ‘nome’ da sessão do usuário 55
    56. 56. Resultado do teste Resultado do teste da index.jsp VerySimpleStatefulWebApp - Tela de Autenticacão - 56
    57. 57. main.jsp gerado após invocação da Servlet de Autenticação. VerySimpleStatefulWebApp - Menu principal - 57
    58. 58. null Resultado do teste de funcionalidade1.jsp VerySimpleStatefulWebApp - Funcionalidade 1 - 58
    59. 59. Um sessão sendo criada pra cada requisição JSESSIONID=8287.... 59
    60. 60. Um sessão sendo criada pra cada requisição JSESSIONID=126A... 60
    61. 61. Um sessão sendo criada pra cada requisição JSESSIONID=58FC... 61
    62. 62. O JSESSIONID era pra ser armazenado em um cookie no cliente, mas o cliente não sabia como fazer isso. 62
    63. 63. Atributo recuperado da sessão HTTP Cookie Manager Agora sim 63
    64. 64. sem set-cookie na resposta 64
    65. 65. Usar JMeter para teste de aplicações web stateful. Sinta na pele o problema da manutenção de estado. 65
    66. 66. Nosso teste sempre envia os mesmos parâmetros 66
    67. 67. Nossos testes não estão tão realistas.... Alexandre Alexandre WebApp Alexandre Alexandre 67
    68. 68. Na prática, N usuário diferentes farão o acesso Alexandre Túlio WebApp Luciana Lula 68
    69. 69. $ cat nomes.txt Zezinho Huguinho Luizinho Pato Donald 69
    70. 70. CSV Data Set Config 70
    71. 71. CSV Data Set Config Arquivo CSV deve estar no mesmo diretório que o arquivo do teste. Cada campo lido do arquivo será armazenado nesta variável 71
    72. 72. Uso da variávél definida no CSV Data Set Config 72
    73. 73. Reexecutar os testes da aplicação Stateful com um arquivo CSV para variar o usuário enviado. Enriqueça seus testes 73
    74. 74. JSF 74
    75. 75. Buscador 75
    76. 76. Buscador tamanho do cache de resultados no servidor 76
    77. 77. Buscador 77
    78. 78. Buscador StringBuffer CACHE 5 4 index.jsp 2 memoryleak.jsp BuscadorBean.java (JSP) (JSF) 6 (JAVA) 3 1 7 78
    79. 79. Buscador index.jsp → memoryleak.jsp 79
    80. 80. Buscador index.jsp → memoryleak.jsp StringBuffer CACHE 5 4 index.jsp 2 memoryleak.jsp BuscadorBean.java (JSP) (JSF) 6 (JAVA) 3 1 7 80
    81. 81. Buscador index.jsp → memoryleak.jsp 81
    82. 82. Buscador index.jsp → memoryleak.jsp 82
    83. 83. Buscador Simulação da busca 83
    84. 84. Buscador StringBuffer CACHE 5 4 index.jsp 2 memoryleak.jsp BuscadorBean.java (JSP) (JSF) 6 (JAVA) 3 1 7 84
    85. 85. Buscador memoryleak.jsp Critério da busca: <input id="j_id_jsp_841419806_1:criterio" type="text" name="j_id_jsp_841419806_1:criterio" /> <input type="submit" name="j_id_jsp_841419806_1:j_id_jsp_841419806_3" value="Buscar" /> 85
    86. 86. Buscador memoryleak.jsp input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="H4sIAAAAAAAAAJ1WS2wbRRgeb55NSx9JSHkoVUKrJqHx2o6TKCWp0rzjyIlRnATaSrhjexJvut4dZmezm0ZUKRJUogK1Ag5IQV SAxKW9wAU48BAHpEpFIhIcOKAKISEkygFVKnAAZtbeXT/WpDCH8az3n+9/ff//7/ U7oEYnoOlMdBWuQVGGyooYS66iFB288tXTb3XumQBABMDAGo1AsIpNStquiIuwxTSRIixLKUglVRFjFNI0SxU4AoikSyWjywQhObUNLq7 /PEnN4JTn+7hOMYQ4KuNazPzKAwTqwpSqLgYWZKQMa+qFDSvJqR0YlXDiYHeUG/oECwPxE0tWfBBSAYwxbIYW +QDM3K4jTbJlWS9cQJ2TgDDMUHOnfAiShYpwvIpKA +RSSKiKTaANMWQPcOAGNqNguV9KhOqap4WhS2AScswK4dAGM6tU3yQuv9P2hRSTnnidZn6hyNL8E51bsnRosDFnl0KjFAqGVmIa6p+ +7zL1rOfl0FhEnQIKswPQlTVCURsItmCNIyqpw28fBJC6LWqOdAXAEtpoaBkoxj4lhs9snY3MTcQiIyHmf6mlx9I4TA9aikUfPidusbX8 I3q4AvAqo16TyyWCsY1ZxvFNRw14LeAQuxQB7x0rs4P8+1LkUmnkrMx2IL3OkmE+MK/HRCYdXRqKrKCCq32sjmN1t// ioA32lQswZlnVnmszL0IOBQDdMLs9HE6Eg8MkbBvkAWZVWyzm6eExk8g9zvehtVU1BGF34/cHYr +McvAqiOgPoMi3iK1VkU1KVUXaFknYJGq5wD3IxAnBJJWRmMgnr +qLP65KofZeJrkEhQodajif9miwJhMc42xg8Air2JKBSx0m784dq79y5eGhB4mPPe2CZacnN6NonIi9dfb9392u3LdvOowRg7lPF5EKql gFD8tKeMGz7+917r5T72WFeU2FBBcXonJ5yX7KlQM/nXYe/XfaaJueZGZ2vh20Gac93mDW85zFOW1PaC3hgw/YZh +JfZS79OZKTwdKVx6XIiUO0Rn3bntNc5VbkxwwVXStp5Pv83tpd++rl1Y8rOiI/ m0+emhSX8qHevsJr7NKtZROJwDZFTNz848erWrVkBCFGwKyVDTZuDWZtYDRqTSVt3KGjJUVFSA3GWHChL52FSRoOsiJi6DpWssCkCUxkk rkINIyIiWZzR8BK3bMLErFVoLILw1J3vg80fDvEZQsBDOSOZZImY0bB55vZnf10VLLEmR8yVeOeFl+K/nd4esqJgBIC/ pNw6w6HunmBXW8fhjaSupWBaJaLNq +c6mMXtBRaXG8AHX3to5srb0vMCt5UHZMToBM1ecIVVk5u5GJusE7V6dagn7Gsc8vGKBOQzgVHJeuVuuGx3AXJ/ 4qJLLDf8t22TscJ97yxX0EPMoRPwYPEh51RbwF1WLl2ePnuVMb92rND/xkL/czM2b/8JTrHOShSbRTSjpt3cDe/egN8eJC/ nOPawQ55SufcDNy//eK/3FSGf31HDD46V0ainjEbWgVgkeqyYRKUaOIsuXRv+6Jn37sZsFsWNo6CxHK2cQ1Zcj/ PAcja5qaKgdtS6U5JpXCm3uT5Wq+nJrGTNiJl//Q6o0Ixsa6zuPVjQa/ IJ4j8njT4QLotgf3dPb3EEKWSfURl1XB3jkWOR5JfHDRE8UlmoUpHdN+F6uRJ/cb1M2ZFqcSJVKUCHvAJ0fxPOZ084r4HUzwbSf/ Cij4MGKrYN/vHHs/2AKAYkJY1M6+uwnA8ey633fwD/RBipTAwAAA==" /> 86
    87. 87. Buscador memoryleak.jsp input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="H4sIAAAAAAAAAJ1WS2wbRRgeb55NSx9JSHkoVUKrJqHx2o6TKCWp0rzjyIlRnATaSrhjexJvut4dZmezm0ZUKRJUogK1Ag5IQV SAxKW9wAU48BAHpEpFIhIcOKAKISEkygFVKnAAZtbeXT/WpDCH8az3n+9/ff//7/ U7oEYnoOlMdBWuQVGGyooYS66iFB288tXTb3XumQBABMDAGo1AsIpNStquiIuwxTSRIixLKUglVRFjFNI0SxU4AoikSyWjywQhObUNLq7 /PEnN4JTn+7hOMYQ4KuNazPzKAwTqwpSqLgYWZKQMa+qFDSvJqR0YlXDiYHeUG/oECwPxE0tWfBBSAYwxbIYW É preciso configurar o +QDM3K4jTbJlWS9cQJ2TgDDMUHOnfAiShYpwvIpKA +RSSKiKTaANMWQPcOAGNqNguV9KhOqap4WhS2AScswK4dAGM6tU3yQuv9P2hRSTnnidZn6hyNL8E51bsnRosDFnl0KjFAqGVmIa6p+ +7zL1rOfl0FhEnQIKswPQlTVCURsItmCNIyqpw28fBJC6LWqOdAXAEtpoaBkoxj4lhs9snY3MTcQiIyHmf6mlx9I4TA9aikUfPidusbX8 I3q4AvAqo16TyyWCsY1ZxvFNRw14LeAQuxQB7x0rs4P8+1LkUmnkrMx2IL3OkmE+MK/HRCYdXRqKrKCCq32sjmN1t// teste em runtime! ioA32lQswZlnVnmszL0IOBQDdMLs9HE6Eg8MkbBvkAWZVWyzm6eExk8g9zvehtVU1BGF34/cHYr +McvAqiOgPoMi3iK1VkU1KVUXaFknYJGq5wD3IxAnBJJWRmMgnr +qLP65KofZeJrkEhQodajif9miwJhMc42xg8Air2JKBSx0m784dq79y5eGhB4mPPe2CZacnN6NonIi9dfb9392u3LdvOowRg7lPF5EKql gFD8tKeMGz7+917r5T72WFeU2FBBcXonJ5yX7KlQM/nXYe/XfaaJueZGZ2vh20Gac93mDW85zFOW1PaC3hgw/YZh +JfZS79OZKTwdKVx6XIiUO0Rn3bntNc5VbkxwwVXStp5Pv83tpd++rl1Y8rOiI/ m0+emhSX8qHevsJr7NKtZROJwDZFTNz848erWrVkBCFGwKyVDTZuDWZtYDRqTSVt3KGjJUVFSA3GWHChL52FSRoOsiJi6DpWssCkCUxkk rkINIyIiWZzR8BK3bMLErFVoLILw1J3vg80fDvEZQsBDOSOZZImY0bB55vZnf10VLLEmR8yVeOeFl+K/nd4esqJgBIC/ pNw6w6HunmBXW8fhjaSupWBaJaLNq +c6mMXtBRaXG8AHX3to5srb0vMCt5UHZMToBM1ecIVVk5u5GJusE7V6dagn7Gsc8vGKBOQzgVHJeuVuuGx3AXJ/ 4qJLLDf8t22TscJ97yxX0EPMoRPwYPEh51RbwF1WLl2ePnuVMb92rND/xkL/czM2b/8JTrHOShSbRTSjpt3cDe/egN8eJC/ nOPawQ55SufcDNy//eK/3FSGf31HDD46V0ainjEbWgVgkeqyYRKUaOIsuXRv+6Jn37sZsFsWNo6CxHK2cQ1Zcj/ PAcja5qaKgdtS6U5JpXCm3uT5Wq+nJrGTNiJl//Q6o0Ixsa6zuPVjQa/ IJ4j8njT4QLotgf3dPb3EEKWSfURl1XB3jkWOR5JfHDRE8UlmoUpHdN+F6uRJ/cb1M2ZFqcSJVKUCHvAJ0fxPOZ084r4HUzwbSf/ Cij4MGKrYN/vHHs/2AKAYkJY1M6+uwnA8ey633fwD/RBipTAwAAA==" /> 87
    88. 88. jMeter recuperação dinâmica de valores 88
    89. 89. jMeter recuperação dinâmica de valores Referência ao valor recuperado 89
    90. 90. Utilização do valor recuperado anteriormente. 90
    91. 91. JMeter gravação do test case HTTP Proxy Server na Workbench 91
    92. 92. JMeter gravação do test case 92
    93. 93. 93
    94. 94. Recording Controller 93
    95. 95. HTTP Proxy Server 93
    96. 96. Porta do proxy 93
    97. 97. Inicie o proxy 93
    98. 98. JMeter gravação do test case 94
    99. 99. JMeter samplers gravados 95
    100. 100. 96
    101. 101. 97
    102. 102. 98
    103. 103. Valor estático substituído por variável 99
    104. 104. Execute a suíte de testes TesteDeMemoryLeak 100
    105. 105. 1o. teste Clique no link da primeira página 101
    106. 106. 2o. teste Simulação de uma consulta Memória alocada 102
    107. 107. Olhando de perto, há algo errado... 103
    108. 108. 1a. req JSESSIONID=A6421... 2a. req JSESSIONID=97F97... 104
    109. 109. JSESSIONID=A6421... 2a. req JSESSIONID=97F97... 104
    110. 110. 2a. req JSESSIONID=97F97... 104
    111. 111. Esquecemos do HTTP Cookie Manager 105
    112. 112. JSESSIONID=2F040C8... JSESSIONID=2F040C8... 106
    113. 113. Mas, de carga, este teste não tem nada. 107
    114. 114. Apenas 1 thread sendo instanciada 108
    115. 115. 2 threads agora
    116. 116. 6EEF3... 278B2... 110 98
    117. 117. 111
    118. 118. 2 iterações do que estiver dentro do Loop Controller 112
    119. 119. 113
    120. 120. thread 1 thread 2 114
    121. 121. 115
    122. 122. 1a. busca da 1a. thread Cache resultante da 1a. busca da 1a. thread 2a. busca da 1a. thread Cache resultante da 2a. busca da 1a. thread 116
    123. 123. 1a. busca da 2a. thread Cache resultante da 1a. busca da 2a. thread 2a. busca da 2a. thread Cache resultante da 2a. busca da 2a. thread 117
    124. 124. Em resumo... 118
    125. 125. algumaPaginaJSF javax.faces.ViewState=H4sIAAAAAAAAAJ javax.faces.ViewState=H4sIAAAAAAAAAJ JBoss javax.faces.ViewState=H4sIAAAAAAAAAJ 119
    126. 126. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1DeBusca JBoss O cache de resultados já está com 50008 bytes. javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2DeBusca O cache de resultados já está com 100016 bytes. 120
    127. 127. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1DeBusca JBoss O cache de resultados já está com 50008 bytes. javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2DeBusca O cache de resultados já está com 100016 bytes. 120
    128. 128. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1DeBusca JBoss O cache de resultados já está com 50008 bytes. javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2DeBusca O cache de resultados já está com 100016 bytes. 120
    129. 129. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ variavel=H4sIAAAAAAAAAJ javax.faces.ViewState=${variavel} j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1DeBusca JBoss O cache de resultados já está com 50008 bytes. javax.faces.ViewState=${variavel} j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2DeBusca O cache de resultados já está com 100016 bytes. 121
    130. 130. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ variavel=H4sIAAAAAAAAAJ javax.faces.ViewState=${variavel} j_id_jsp_841419806_1=j_id_jsp_841419806_1 RegExp j_id_jsp_841419806_1=criterio1DeBusca Extractor JBoss O cache de resultados já está com 50008 bytes. javax.faces.ViewState=${variavel} j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2DeBusca O cache de resultados já está com 100016 bytes. 121
    131. 131. javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1DeBusca ? 122
    132. 132. 123
    133. 133. 124
    134. 134. 124
    135. 135. E se a página JSF tivesse dezenas de campos? 125
    136. 136. E se a página JSF tivesse dezenas de campos? #fail 125
    137. 137. 126
    138. 138. http://localhost:8080/buscador/ http://localhost:8080/buscador/faces/memoryleak.jsp 127
    139. 139. http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio1 http://localhost:8080/buscador/faces/memoryleak.jsp javax.faces.ViewState=H4sIAAAAAAAAAJ j_id_jsp_841419806_1=j_id_jsp_841419806_1 j_id_jsp_841419806_1=criterio2 128
    140. 140. Proxy 129
    141. 141. HTTP Proxy Server 130
    142. 142. Ao testar JSF, lembre-se • Enviar todos os parâmetros requeridos - Analise o código fonte da página • Enviar corretamente o campo ViewState - Utilize o valor gerado pela primeira requisição nas requisições subsequentes • Gerenciar sessão com HTTP Cookie Manager - Senão cada requisição de uma mesma thread será vista como um novo usuário ★ Usar RegExp Extrator pra o ViewState; ★ Usar HTTP Proxy Server pra facilitar a criação do Test Plan 131
    143. 143. Usar JMeter para teste de aplicações web stateful e JSF. Siga passo a passo para sensibilizar-se com o problema 132
    144. 144. Mais sobre JMeter 133
    145. 145. Test Plan Define toda a estratégia de teste. 134
    146. 146. Thread Group Threads a serem instanciadas para execução do Plano de Testes 135
    147. 147. Controllers Logic Sampler Controller Núcleo do Plano de Teste 136
    148. 148. Sampler Controller Gerador de requisições 137
    149. 149. Logic Controller Define quando será o envio das requisições dos Samplers 138
    150. 150. Listeners Apresenta informações coletadas pelo Plano de Teste durante sua execução 139
    151. 151. Timers Pausa entre requisições 140
    152. 152. Assertions Verifica se o teste está gerando os resultados esperados 141
    153. 153. 142
    154. 154. Tomcoat 143
    155. 155. Tomcat 144
    156. 156. Configuration Elements Usados para adicionar ou modificar requisições 145
    157. 157. Configuration Elements Usados para adicionar ou modificar requisições 145
    158. 158. Pre-Processors Modifica a requisição antes de ser enviada pelo Sampler 146
    159. 159. Post-Processors Extração de dados da resposta HTTP 147
    160. 160. Ordem de Execução 1. Configuration elements 2. Pre-Processors 3. Timers 4. Sampler 5. Post-Processors 6. Assertions 7. Listeners 148
    161. 161. Propriedades jmeter.properties ... log_level.jmeter=INFO log_level.jmeter.junit=DEBUG user.properties=user.properties system.properties=system.properties ... 149
    162. 162. JMeter Remote Testing 150
    163. 163. ! 151
    164. 164. ! 152
    165. 165. slaves master $JMETER_HOME/bin/jmeter-server $JMETER_HOME/bin/jmeter $JMETER_HOME/bin/jmeter-server $JMETER_HOME/bin/jmeter-server 153
    166. 166. Master GUI # Remote Hosts - comma delimited remote_hosts=192.168.0.2, 192.168.0.3, 192.168.0.4 JMETER_HOME/bin/jmeter.properties 154
    167. 167. Master non-GUI jmeter -n -t script.jmx -r ou jmeter -n -t script.jmx -R 192.168.0.2,192.168.0.3,192.168.0.4 $ tail -f JMETER_HOME/bin/jmeter.log 155
    168. 168. Slave $ ./jmeter-server $ tail -f JMETER_HOME/bin/jmeter-server.log 156
    169. 169. 157
    170. 170. Repita, em modo distribuído, todos os testes anteriores Negocie o uso de máquinas de colegas. 158
    171. 171. 159
    172. 172. Outras Ferramentas 160
    173. 173. Lobo Continuous Tuning ‟ Lobo is a tool for tracking performance designed to register as the performance of your systems evolve. It is especially useful if you employ agile practices, because its code and its architecture evolve. http://lobo-ct.sourceforge.net 161
    174. 174. httperf ‟ Httperf is a tool for measuring web server performance. It provides a flexible facility for generating various HTTP workloads and for measuring server performance. http://www.hpl.hp.com/research/linux/httperf 162
    175. 175. Selenium ‟ Selenium IDE is a Firefox add-on that records clicks, typing, and other actions to make a test, which you can play back in the browser. http://seleniumhq.org 163
    176. 176. http_load ‟ http_load runs multiple http fetches in parallel, to test the throughput of a web server. However unlike most such test clients, it runs in a single process, so it doesn't bog down the client machine. It can be configured to do https fetches as well. http://www.acme.com/software/http_load 164
    177. 177. Siege ‟ Siege is an http regression testing and benchmarking utility. It was designed to let web developers measure the performance of their code under duress, to see how it will stand up to load on the internet. http://www.joedog.org/index/siege-home 165
    178. 178. OpenWebLoad ‟ OpenWebLoad is a tool for load testing web applications. It aims to be easy to use and providing near real-time performance measurements of the application under test. This is particulary useful when you are doing optimization as you can see the impact of your changes almost immediately. http://openwebload.sourceforge.net 166
    179. 179. Grinder ‟ The Grinder is a Java TM load testing framework that makes it easy to run a distributed test using many load injector machines. http://grinder.sourceforge.net 167
    180. 180. Outras mais • Apache JMeter • httperf • Sipp • benerator • http_load • SLAMD • CLIF is a Load Injection Framework • JChav • Soap-Stone • curl-loader • JCrawler • stress_driver • Database Opensource Test Suite • Lobo, Continuous Tuning • TestMaker • DBMonster • MessAdmin • TPTEST • Deluge • NTime • Tsung • Dieseltest • OpenSTA • Valgrind • Faban • OpenWebLoad • WebApp Load Simulator • FunkLoad • p-unit • Web Polygraph • FWPTT load testing web applications • PandoraFMS • WebLOAD • Grinder • Pylot • Hammerhead 2 - Web Testing Tool • Seagull • Hammerora • Siege http://www.opensourcetesting.org/performance.php 168
    181. 181. Recursos • Load Testing - http://en.wikipedia.org/wiki/Load_testing • Software Performance Testing - http://en.wikipedia.org/wiki/Software_performance_testing • Benchmarking - http://en.wikipedia.org/wiki/Benchmark_(computing) • Conducting a benchmark - http://www.xenoclast.org/doc/benchmark/HTTP-benchmarking-HOWTO/node6.html • Benchmarking and Monitoring Tools of the Trade (Part I) Presentation - http://www.scribd.com/doc/2602028/Benchmarking-and-Monitoring-Tools-of-the-Trade-Part-I-Presentation • Performance Testing Guidance - http://www.codeplex.com/PerfTesting • Performance Testing Videos - http://msdn.microsoft.com/en-us/library/bb671346.aspx • Better Tests, Better Results - http://www.perftestplus.com/pubs.htm 169
    182. 182. Q&A

    ×