Jmeter com qualidade e performance
Existem diversos artigos que falam do jmeter e mostram alguns passos de como utilizar o mesmo. O meu foco aqui é mostrar que o jmeter não serve apenas como gerador de carga e sim como ferramenta de qualidade, gerador de dados para questionamentos e definição de limitações em fluxos.
[ Hits: 79.238 ]
Por: Rodrigo Rocha de Souza em 29/04/2008
Conceitos de teste de performance
Realizar execuções de performance requer conhecimento no foco que será testado. Vou apenas comentar algumas escolas de performance para pesquisas futuras:
Carga
Stress
Profile
Longevidade
Performance
Com o conhecimento dos tipos de execuções de performance, agora precisamos conhecer qual dela se encaixa no que iremos executar com o
jmeter .
Definido os dois passos anteriores e tendo pleno conhecimento de toda a arquitetura do que será executado com o Jmeter, podemos iniciar o uso do mesmo.
Test Plan
O jmeter inicia sua apresentação com duas estruturas test plan e workbech.
No decorrer deste documento estarei focando somente no test plan e comentarei como realizar um record Proxy.
O test plan são as execuções de performance do jmeter e onde devemos construir nossos scripts de performance.
Nele devemos adicionar nosso thread group onde estaremos elaborando nosso scripts. O jmeter trata todos seus arquivos no formato de hierarquia segundo a estrutura de arvores apresentada em sua janela (para mais dados sobre a hierarquia procure documentos sobre orientação a objetos).
Próxima página
Páginas do artigo
1. Conceitos de teste de performance
2.
Thread Group
3.
Tipos de requisições que o Jmeter permite
4.
Listener, os monitores do Jmeter
5.
Gravando sua navegação com o JMETER
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada
Redirecionamento de páginas e domínios com Jetty Rewrite Handler
GCJ – Conhecendo o compilador Java Livre
Trabalhando com classes e métodos em Java (parte 2)
Linux com Java 1.7 + JBoss 7
JABACO => Java + Visual Basic 6
Comentários
Mensagem
Outro site em ingles:
(EN) http://dev2dev.bea.com/pub/a/2006/08/jmeter-performance-testing.html?page=1
nova dica:
Quando usar o Regular Expression Extractor (ele usa a sitax de perl) e tiver duvidas se esta funcionado no campo de Regular expression coloque apenas
([^ü]*) ou ([^ñ]*)
isso ira tetorna todo o conteudo da resposta (obs se na resposta vir qualque caracter ü o extrator ira para nele e so ira retorna o texto ate este ponto neste caso o segundo caso pode ser util pois ñ so é usado em outras liguas)
Mensagem
nova dica:
Quando usar o Regular Expression Extractor (ele usa a sitax de perl) e tiver duvidas se esta funcionado no campo de Regular expression coloque apenas
([^ü]*) ou ([^ñ]*)
isso ira tetorna todo o conteudo da resposta (obs se na resposta vir qualque caracter ü o extrator ira para nele e so ira retorna o texto ate este ponto neste caso o segundo caso pode ser util pois ñ so é usado em outras liguas)
Olá, estou precisando fazer um teste de carga em uma app web no meu trabalho. Bom, eu estou configurando o JMeter da seguinte forma:
Test Plan
|
Thread Group (15 threads, periodo de 5 s, executando 1 vez)
| Recording Cotroller (Para mostrar os passos que faço no browser)
| HTTP Request Defaults (com as configurações do endereço da minha app - IP que minha app esta rodando, porta 80, http...)
| Aggregate Report
| Graph Results
WorkBench
| HTTP Proxy Server (com as configurações da porta - 8090, e com o Target Controller apontando para o meu Recording Controler, ou seja, tudo o que eu executar no browser é para aparecer no Recording Controller)
Feito essas configurações no JMeter, eu vou no Browser (IE) e configuro o proxy localhost, com a mesma porta que utilizo no Jmeter, para que tudo que eu faça no browser seja capturado no JMeter... Só que...nao ta funcionando.. o jmeter nao ta capturando minhas açoes no browser... configurei algo errado?? O objetivo é testar quantos usuários simultâneos minha app consegue suportar, tem como fazer esse teste de outra forma sem usar o HTTP Proxy Server ou o melhor é usá-lo? (porque nao consigo usá-lo...)
Você saberia me explicar o erro? Tem como fazer um teste de login sem que seja necessário o uso do HTTP Proxy Server??
Agradeço...
Mensagem
Olá, estou precisando fazer um teste de carga em uma app web no meu trabalho. Bom, eu estou configurando o JMeter da seguinte forma:
Test Plan
|
Thread Group (15 threads, periodo de 5 s, executando 1 vez)
| Recording Cotroller (Para mostrar os passos que faço no browser)
| HTTP Request Defaults (com as configurações do endereço da minha app - IP que minha app esta rodando, porta 80, http...)
| Aggregate Report
| Graph Results
WorkBench
| HTTP Proxy Server (com as configurações da porta - 8090, e com o Target Controller apontando para o meu Recording Controler, ou seja, tudo o que eu executar no browser é para aparecer no Recording Controller)
Feito essas configurações no JMeter, eu vou no Browser (IE) e configuro o proxy localhost, com a mesma porta que utilizo no Jmeter, para que tudo que eu faça no browser seja capturado no JMeter... Só que...nao ta funcionando.. o jmeter nao ta capturando minhas açoes no browser... configurei algo errado?? O objetivo é testar quantos usuários simultâneos minha app consegue suportar, tem como fazer esse teste de outra forma sem usar o HTTP Proxy Server ou o melhor é usá-lo? (porque nao consigo usá-lo...)
Você saberia me explicar o erro? Tem como fazer um teste de login sem que seja necessário o uso do HTTP Proxy Server??
Agradeço...
Ok, vamos por parte.
1º Para capturar você não precisa de tudo isso. Use apenas um thread group e aponte a captura do proxy para ele, logo apos é so dar start.
Verifique se o proxy do jmeter esta funcionando corretamente.
Tenho duas sugestões
1) tente abrir a url do proxy no browser antes de configurar para usar o proxy no seu caso chame este endereço
http://127.0.0.1:8090
Vc deve receber um retorno de erro
java.net.UnknownHostException: /
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
Este retorno se dao ao fato do jmeter esta recebendo uma chamada para ele mesmo e nao para um caminho externo.
Caso vc não recebe este erro tente baixar a jdk 1.5 e rode o jmeter apartir dela.
2) Verifque se seu jmeter não esta apresentando nenhum erro no terminal caso não tente baixar o jmeter novamente.
Lembrando. O jmeter faz request http e https porem no segundo caso ele precisa de um intervenção de sua parte.
O jmeter é uma ferramenta open source do projeto jakarta la vc pode encontrar soluções para falhas especificas para algumas distribuições de linux.
No Ruindows tome cuidado para não rodar o jmeter com o java que fica dentro do system32
Mensagem
Ok, vamos por parte.
1º Para capturar você não precisa de tudo isso. Use apenas um thread group e aponte a captura do proxy para ele, logo apos é so dar start.
Verifique se o proxy do jmeter esta funcionando corretamente.
Tenho duas sugestões
1) tente abrir a url do proxy no browser antes de configurar para usar o proxy no seu caso chame este endereço http://127.0.0.1:8090
Vc deve receber um retorno de erro
java.net.UnknownHostException: /
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
Este retorno se dao ao fato do jmeter esta recebendo uma chamada para ele mesmo e nao para um caminho externo.
Caso vc não recebe este erro tente baixar a jdk 1.5 e rode o jmeter apartir dela.
2) Verifque se seu jmeter não esta apresentando nenhum erro no terminal caso não tente baixar o jmeter novamente.
Lembrando. O jmeter faz request http e https porem no segundo caso ele precisa de um intervenção de sua parte.
O jmeter é uma ferramenta open source do projeto jakarta la vc pode encontrar soluções para falhas especificas para algumas distribuições de linux.
No Ruindows tome cuidado para não rodar o jmeter com o java que fica dentro do system32
Outra obs.
Caso vc tenha um proxy no seu local de estudo vc devera configurar ele no jmeter para tanto basta editar os arquivos de propriedades que estão na pasta bin do jmeter.
Mensagem
Outra obs.
Caso vc tenha um proxy no seu local de estudo vc devera configurar ele no jmeter para tanto basta editar os arquivos de propriedades que estão na pasta bin do jmeter.
Na 5ª página você falou sobre adicionar Proxys.
Tenho uma dúvida:
Eu conseguiria adicionar diversos IP´s de proxy´s públicos, para simular diversos acessos de diversas regiões do mundo? ou só é possível adicionar 1 proxy?
Obrigado!
Mensagem
Na 5ª página você falou sobre adicionar Proxys.
Tenho uma dúvida:
Eu conseguiria adicionar diversos IP´s de proxy´s públicos, para simular diversos acessos de diversas regiões do mundo? ou só é possível adicionar 1 proxy?
Obrigado!
O uso de proxy do jmeter esta ativo apenas como ponte de saida.
Este recurso serve apenas para gravar as request que você esta enviao.
Para gerar multiplos ip's com saida de sua maquina você deve.
1) ter uma mascara de rede valida que não seja conflitante com ip's existentes.
2) voce pode direcionar suar request do jmeter atrave de um aplicativo ponte que alter os ips.
3) voce pode alterar atraves de beanshell os ips de saida porem isso gera diminuição na carga de saida.
4) voce pode usar um recurso de multproxy da web onde seus pacotes sao direcionados para um pool de servidores espalhados no mundo e redirecionados para seu cliente no mundo.
5) qualquer tentativa de gerar multiplos ips de sua maquina para web pode e sera considerada um atack e você pode ter seu mac address em uma blacklist de diversos servidores.
Mensagem
O uso de proxy do jmeter esta ativo apenas como ponte de saida.
Este recurso serve apenas para gravar as request que você esta enviao.
Para gerar multiplos ip's com saida de sua maquina você deve.
1) ter uma mascara de rede valida que não seja conflitante com ip's existentes.
2) voce pode direcionar suar request do jmeter atrave de um aplicativo ponte que alter os ips.
3) voce pode alterar atraves de beanshell os ips de saida porem isso gera diminuição na carga de saida.
4) voce pode usar um recurso de multproxy da web onde seus pacotes sao direcionados para um pool de servidores espalhados no mundo e redirecionados para seu cliente no mundo.
5) qualquer tentativa de gerar multiplos ips de sua maquina para web pode e sera considerada um atack e você pode ter seu mac address em uma blacklist de diversos servidores.
Mensagem
Jakarta liberou versao 2.3.3 com traduções e suporte para o portugues
http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
Vc pode baixar as antigas versões em
http://archive.apache.org/dist/jakarta/jmeter/binaries/
1.8.1
1.9.1
2.0.0
2.0.1
2.0.2
2.0.3
2.1
2.1.1
2.2
2.3
2.3.1
2.3.2
http://archive.apache.org/dist/jakarta/jmeter/old/release/
[DIR] v1.0/ 09-Mar-2001 15:50 -
[DIR] v1.1/ 09-Mar-2001 15:50 -
[DIR] v1.2/ 09-Mar-2001 15:51 -
[DIR] v1.3/ 09-Mar-2001 15:51 -
[DIR] v1.4/ 09-Mar-2001 15:51 -
[DIR] v1.5/ 16-Jul-2003 13:07 -
[DIR] v1.6/ 16-Jul-2003 13:07 -
[DIR] v1.7/ 16-Jul-2003 13:07 -
[DIR] v1.8/ 16-Jul-2003 13:08 -
[DIR] v1.9/ 17-Aug-2003 15:06 -
*29/05/2009 JMETER 2.3.3
Novidades
Melhoria no HELP
Interface em diversas línguas incluído português Brasil
IF CONTROLLER
Controle para usar variável diretamente ${__jexl(${VAR} > 100)}
JDBC Request
Melhoria no tratamento de valores de saída
Novo campo de valorização dos comandos SQL.
WebService(SOAP) Request
Aprimorado com correção de bugs.
TCP Sampler
Keep Alive
Mail Reader Sampler
(Aparenta ter correções para seus erros de imap e carga)
Test Action
Melhorado com (parada força)
BeanShell
O jar agora vem junto.
O Pos processador de BSF esta com o nome errado, sendo ele a segunda opção Pos-Processador BeanShell para diferenciar o BSF não vem com o combo reboot bsh
O Pos processador (Salvar resposta para Arquivo) agora é um monitor com mais opções.
Agora ele pode receber uma variável para nomear os arquivos que esta salvando.
Foi criado um monitor para tratamento BSF
O Pos processador de resultados resumidos foi movido para os monitores.
HTTP Cookie Manager
Agora Permite todas as threads compartilharem um mesmo cookie.
HTTP Request Defaults
Adicionado limitador de tempo de espera para conexão e espera para resposta pos conexão.
TCP Sampler Config
Liberado para uso com novas funcionalidades.
Random Variable (Nova configuração)
Permite criar uma variável de valores aleatórios sem o uso de pre processador + javascript rand
Counter foi movido para configurações.
Assertivas (podem ser configuradas para atender uma estrutura + suas ramificações)
Duration (pode ser configuradas para atender uma estrutura + suas ramificações)
Result Status Action Handler (Permite parada rápida)
Thread Group (Permite parada rápida sem esperar fechar todas as threads)
HTTP Proxy Server
Diminuição de erros, melhoria no help.
Mensagem
*29/05/2009 JMETER 2.3.3
Novidades
Melhoria no HELP
Interface em diversas línguas incluído português Brasil
IF CONTROLLER
Controle para usar variável diretamente ${__jexl(${VAR} > 100)}
JDBC Request
Melhoria no tratamento de valores de saída
Novo campo de valorização dos comandos SQL.
WebService(SOAP) Request
Aprimorado com correção de bugs.
TCP Sampler
Keep Alive
Mail Reader Sampler
(Aparenta ter correções para seus erros de imap e carga)
Test Action
Melhorado com (parada força)
BeanShell
O jar agora vem junto.
O Pos processador de BSF esta com o nome errado, sendo ele a segunda opção Pos-Processador BeanShell para diferenciar o BSF não vem com o combo reboot bsh
O Pos processador (Salvar resposta para Arquivo) agora é um monitor com mais opções.
Agora ele pode receber uma variável para nomear os arquivos que esta salvando.
Foi criado um monitor para tratamento BSF
O Pos processador de resultados resumidos foi movido para os monitores.
HTTP Cookie Manager
Agora Permite todas as threads compartilharem um mesmo cookie.
HTTP Request Defaults
Adicionado limitador de tempo de espera para conexão e espera para resposta pos conexão.
TCP Sampler Config
Liberado para uso com novas funcionalidades.
Random Variable (Nova configuração)
Permite criar uma variável de valores aleatórios sem o uso de pre processador + javascript rand
Counter foi movido para configurações.
Assertivas (podem ser configuradas para atender uma estrutura + suas ramificações)
Duration (pode ser configuradas para atender uma estrutura + suas ramificações)
Result Status Action Handler (Permite parada rápida)
Thread Group (Permite parada rápida sem esperar fechar todas as threads)
HTTP Proxy Server
Diminuição de erros, melhoria no help.
2.3.4
Feita na correria para arrumar erros da 2.3.3
Aconselho a manter a versão 2.3.2
Mensagem
2.3.4
Feita na correria para arrumar erros da 2.3.3
Aconselho a manter a versão 2.3.2
:) para responder alguns e-mail
Quando vc tiver esta msg no jmeter.
jmeter Response too large to be displayed. Size <valor> Max: 204800
Ela ocorre em geral no monitor de arvore (ou como esta tradução 2.3.4 fez Ouvinte) "View Results Tree"
Motivo: O jmeter cria uma estrutura no array do monitor fixando o numero maximo de paginas que ele vai apresentar.
Isso esta descrito no arquivo de propriedades do jmeter
jmeter.properties
# Maximum size of HTML page that can be displayed; default=200 * 1024
# Set to 0 to disable the size check
Para acabar com o erro e conseguir ver as paginas basta remover o # (sustenido) da frente desta linha.
#view.results.tree.max_size=0
Logo ele vai passar a não definir mais um arry fixo para seu displayed.
Obs.:
1)Porem, gostaria de lembra que este monitor não é recomendado para cargas elevadas e indicado para testes funcionais (lembrando das limitações de testes funcionais do jmeter).
2) Esta mudança pode torna as request mais lentas.
3) Esta mudança diminui a quantidade de paginas que o jmeter consegui monitorar apresentando memory leek mais rapido. (basta remover o monitor "View Results Tree" e voltar a configuração")
Msg basica de memory leek para este caso:
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread. See log file for details.
Porem este erro tambem ocorre quando vc criar mais threads que o suportado por seu jmeter (neste caso é so mudar o tamanho da memoria que ele esta usando na jvm)
Mensagem
:) para responder alguns e-mail
Quando vc tiver esta msg no jmeter.
jmeter Response too large to be displayed. Size <valor> Max: 204800
Ela ocorre em geral no monitor de arvore (ou como esta tradução 2.3.4 fez Ouvinte) "View Results Tree"
Motivo: O jmeter cria uma estrutura no array do monitor fixando o numero maximo de paginas que ele vai apresentar.
Isso esta descrito no arquivo de propriedades do jmeter
jmeter.properties
# Maximum size of HTML page that can be displayed; default=200 * 1024
# Set to 0 to disable the size check
Para acabar com o erro e conseguir ver as paginas basta remover o # (sustenido) da frente desta linha.
#view.results.tree.max_size=0
Logo ele vai passar a não definir mais um arry fixo para seu displayed.
Obs.:
1)Porem, gostaria de lembra que este monitor não é recomendado para cargas elevadas e indicado para testes funcionais (lembrando das limitações de testes funcionais do jmeter).
2) Esta mudança pode torna as request mais lentas.
3) Esta mudança diminui a quantidade de paginas que o jmeter consegui monitorar apresentando memory leek mais rapido. (basta remover o monitor "View Results Tree" e voltar a configuração")
Msg basica de memory leek para este caso:
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread. See log file for details.
Porem este erro tambem ocorre quando vc criar mais threads que o suportado por seu jmeter (neste caso é so mudar o tamanho da memoria que ele esta usando na jvm)
Exemplo.
Script para testar portas abertas em sua maquina ou outras
Basta copiar o texto abaixo salvar como portscan.jmx abrir no jmeter 2.11 ou maior e rodar.
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.6" jmeter="2.11 r1554548">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Tefsadfsdfsddsfasdfdsst Plansfsdfsdfasdfasdfsadf" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">64</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1024</stringProp>
<stringProp name="ThreadGroup.ramp_time">32</stringProp>
<longProp name="ThreadGroup.start_time">1387473864000</longProp>
<longProp name="ThreadGroup.end_time">1387473864000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<TCPSampler guiclass="TCPSamplerGui" testclass="TCPSampler" testname="Testador TCP ${__counter(1,65500)}" enabled="true">
<stringProp name="TCPSampler.server">127.0.0.1</stringProp>
<boolProp name="TCPSampler.reUseConnection">false</boolProp>
<stringProp name="TCPSampler.port">${__counter(1,65500)}</stringProp>
<boolProp name="TCPSampler.nodelay">false</boolProp>
<stringProp name="TCPSampler.timeout"></stringProp>
<stringProp name="TCPSampler.request">drop
quit
exit
close
shutdown
refuse
end
null
</stringProp>
<boolProp name="TCPSampler.closeConnection">false</boolProp>
<stringProp name="ConfigTestElement.username"></stringProp>
<stringProp name="ConfigTestElement.password"></stringProp>
</TCPSampler>
<hashTree>
<DebugPostProcessor guiclass="TestBeanGUI" testclass="DebugPostProcessor" testname="Debug Pós-Processador" enabled="true">
<boolProp name="displayJMeterProperties">false</boolProp>
<boolProp name="displayJMeterVariables">true</boolProp>
<boolProp name="displaySamplerProperties">true</boolProp>
<boolProp name="displaySystemProperties">false</boolProp>
</DebugPostProcessor>
<hashTree/>
</hashTree>
<ResultCollector guiclass="SplineVisualizer" testclass="ResultCollector" testname="Visualizador Spline" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Relatório de Sumário" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="Ver Árvore de Resultados" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Relatório de Sumário" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="DistributionGraphVisualizer" testclass="ResultCollector" testname="Gráfico de Distribuição (alfa)" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="StatGraphVisualizer" testclass="ResultCollector" testname="Gráfico Agregado" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Gráfico de Resultados" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
Mensagem
Exemplo.
Script para testar portas abertas em sua maquina ou outras
Basta copiar o texto abaixo salvar como portscan.jmx abrir no jmeter 2.11 ou maior e rodar.
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.6" jmeter="2.11 r1554548">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Tefsadfsdfsddsfasdfdsst Plansfsdfsdfasdfasdfsadf" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">64</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1024</stringProp>
<stringProp name="ThreadGroup.ramp_time">32</stringProp>
<longProp name="ThreadGroup.start_time">1387473864000</longProp>
<longProp name="ThreadGroup.end_time">1387473864000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<TCPSampler guiclass="TCPSamplerGui" testclass="TCPSampler" testname="Testador TCP ${__counter(1,65500)}" enabled="true">
<stringProp name="TCPSampler.server">127.0.0.1</stringProp>
<boolProp name="TCPSampler.reUseConnection">false</boolProp>
<stringProp name="TCPSampler.port">${__counter(1,65500)}</stringProp>
<boolProp name="TCPSampler.nodelay">false</boolProp>
<stringProp name="TCPSampler.timeout"></stringProp>
<stringProp name="TCPSampler.request">drop
quit
exit
close
shutdown
refuse
end
null
</stringProp>
<boolProp name="TCPSampler.closeConnection">false</boolProp>
<stringProp name="ConfigTestElement.username"></stringProp>
<stringProp name="ConfigTestElement.password"></stringProp>
</TCPSampler>
<hashTree>
<DebugPostProcessor guiclass="TestBeanGUI" testclass="DebugPostProcessor" testname="Debug Pós-Processador" enabled="true">
<boolProp name="displayJMeterProperties">false</boolProp>
<boolProp name="displayJMeterVariables">true</boolProp>
<boolProp name="displaySamplerProperties">true</boolProp>
<boolProp name="displaySystemProperties">false</boolProp>
</DebugPostProcessor>
<hashTree/>
</hashTree>
<ResultCollector guiclass="SplineVisualizer" testclass="ResultCollector" testname="Visualizador Spline" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Relatório de Sumário" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="Ver Árvore de Resultados" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Relatório de Sumário" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="DistributionGraphVisualizer" testclass="ResultCollector" testname="Gráfico de Distribuição (alfa)" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="StatGraphVisualizer" testclass="ResultCollector" testname="Gráfico Agregado" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
<boolProp name="ResultCollector.success_only_logging">true</boolProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Gráfico de Resultados" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
Mensagem
Check list para apoio: CheckListPerformanceOrLoadTest.pdf
https://drive.google.com/file/d/0B5iPkxRUHSOoaGc3RnJVaDdVVlk/edit?usp=sharing
O basico para usar um bom
ITKOWebLoad
Jmeter
Load Testers:
LoadRunner
OpenSTA
Performance Center
ProxySniffer
Push2Test
SilkPerformer
VSTS
Web Load
WebLoad
Mensagem
Plugins para o jmeter
http://jmeter-plugins.org/wiki/Start/
" Empty TestPlan - see log file "
Erro comum ao tentar abrir um script feito com plugins do jmeter em um jmeter sem plugin
Soluções
1) Abrir o script em um jmeter com os plugins e remover os componetes que usam plugin do script salvar e tentar abrir novamente em outra maquina.
2) Instalar os plugins no jmeter de
http://jmeter-plugins.org/ wiki/Start/">
http://jmeter-plugins.org/ wiki/Start/ reiniciar o jmeter, verificar se todos os plugins foram carregados e abrir o script.
3) Remover o plugins na mão do xml basta procurar pelos nodes (nos) gc
Your script have as pluing in source (gc plugin jmeter) your jmeter not exist gc install all plugins gc in your jmeter.
O script que vc esta tentando abrir possui deve possuir um plugin do source jmeter e o jmeter que esta abrindo não tem este plugin
http://jmeter-plugins.org/
Mensagem
" Empty TestPlan - see log file "
Erro comum ao tentar abrir um script feito com plugins do jmeter em um jmeter sem plugin
Soluções
1) Abrir o script em um jmeter com os plugins e remover os componetes que usam plugin do script salvar e tentar abrir novamente em outra maquina.
2) Instalar os plugins no jmeter de http://jmeter-plugins.org/wiki/Start/ reiniciar o jmeter, verificar se todos os plugins foram carregados e abrir o script.
3) Remover o plugins na mão do xml basta procurar pelos nodes (nos) gc
Your script have as pluing in source (gc plugin jmeter) your jmeter not exist gc install all plugins gc in your jmeter.
O script que vc esta tentando abrir possui deve possuir um plugin do source jmeter e o jmeter que esta abrindo não tem este plugin
http://jmeter-plugins.org/
Contribuir com comentário
Enviar