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.243 ]

Por: Rodrigo Rocha de Souza em 29/04/2008


Thread Group



As thread são a camada "Usuários" do jmeter, cada thread pode se configurada para ser executada N vezes e com N threads do mesmo tipo simultâneas.

As threads são o segredo do teste de performance, são elas que permitem a geração de carga por poderem ser executadas simultaneamente.

As configurações possíveis de threads são:
  • Quantidade de threads
  • Prazo de tempo em que todas as threads devem estar ativas (tempo/threads)
  • Quantidade de vezes em que as threads devem ser executadas
  • Agenda de execução

O Jmeter permite a criação N grupos de threads isso permite a criação de threads distintas com focos diferenciados no mesmo test plan. Ex.:

Você pode gerar uma thread que enviar e-mail, outra que responde os e-mails e outra que aprova eles em base de dados via JDBC.





Página anterior     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

Java Native Interface

GCJ – Conhecendo o compilador Java Livre

Funções Completas - Comunicação entre aplicações Android e FTP

Linux com Java 1.7 + JBoss 7

Introdução ao Mundo Java

  
Comentários
[1] Comentário enviado por rodrigonw em 13/05/2008 - 12:30h

Apostila free do jmeter
Basta criar o usario no site e logar.
http://www.globalcode.com.br/private/AA6.pdf

Curso nota 7 de Jmeter
http://www.globalcode.com.br/index.jsp?pagina=IST

[2] Comentário enviado por rodrigonw em 29/05/2008 - 16:42h

Outro site em ingles:
(EN) http://dev2dev.bea.com/pub/a/2006/08/jmeter-performance-testing.html?page=1

[3] Comentário enviado por rodrigonw em 11/09/2008 - 19:05h

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)

[4] Comentário enviado por lulobaum em 02/03/2009 - 12:01h

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...

[5] Comentário enviado por rodrigonw em 02/03/2009 - 18:39h

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


[6] Comentário enviado por rodrigonw em 02/03/2009 - 18:43h

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.

[7] Comentário enviado por pravato em 26/03/2009 - 12:10h

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!

[8] Comentário enviado por rodrigonw em 26/03/2009 - 15:52h

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.

[9] Comentário enviado por rodrigonw em 28/05/2009 - 19:51h

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 -


[10] Comentário enviado por rodrigonw em 29/05/2009 - 02:09h

*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.

[11] Comentário enviado por rodrigonw em 01/08/2009 - 00:57h

2.3.4
Feita na correria para arrumar erros da 2.3.3
Aconselho a manter a versão 2.3.2

[12] Comentário enviado por rodrigonw em 04/09/2009 - 20:24h

:) 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)




[13] Comentário enviado por rodrigonw em 05/05/2014 - 15:06h

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>

[14] Comentário enviado por rodrigonw em 05/05/2014 - 17:46h

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&#65279;

[15] Comentário enviado por rodrigonw em 09/05/2014 - 15:05h

Plugins para o jmeter
http://jmeter-plugins.org/wiki/Start/

[16] Comentário enviado por rodrigonw em 23/09/2014 - 15:20h

" 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/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts