O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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
Próximos SlideShares
Carregando em…5
×

Benchmarking Tools

Ferramentas para testes de carga, com foco no JMeter.

  • Seja o primeiro a comentar

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

×