Professional Documents
Culture Documents
Performance Usando a
Ferramenta JMeter
Pgina 1 de 29
NDICE
1. Objetivo ...................................................................................................................................................3
2. Conceitos ................................................................................................................................................3
2.1 JMeter ...............................................................................................................................................3
2.1.1 Plano de Testes (Test Plan)...................................................................................................3
2.1.1.1 Thread Group ............................................................................................................3
2.1.1.2 Configuration Elements .............................................................................................3
2.1.1.3 Listeners ....................................................................................................................3
2.1.1.4 Timers........................................................................................................................3
2.1.1.5 Controllers .................................................................................................................3
2.1.1.6 Assertions ..................................................................................................................4
2.1.1.7 Pre-Processor Elements............................................................................................4
2.1.1.8 Post-Processor Elements ..........................................................................................4
2.1.2 Tipos de Requisio ...............................................................................................................4
3. Criando um Plano de Testes .................................................................................................................4
3.1 Passos Iniciais ..................................................................................................................................4
3.2 Adicionando um Thread Group ao Plano de Testes ........................................................................5
3.2.1 Configurando um Thread Group ............................................................................................6
3.2.2 Adicionando Elementos de Configurao ao Thread Group .................................................6
3.2.2.1 HTTP Cookie Manager ..............................................................................................6
3.2.2.2 HTTP Request Defaults.............................................................................................7
3.2.3 Adicionando Listeners ao Thread Group ...............................................................................8
3.2.3.1 Aggregate Report ......................................................................................................8
3.2.3.2 View Results Tree .....................................................................................................9
3.2.4 Adicionando Timers ao Thread Group .................................................................................10
3.2.4.1 Constant Timer ........................................................................................................10
4. Gravando a Execuo de um Caso de Uso no Plano de Testes .....................................................11
4.1 Adicionando um HTTP Proxy Server ao Plano de Testes .............................................................11
4.2 Executando o Caso de Uso a Ser Gravado no Plano de Testes ...................................................12
4.3 Organizando as Requisies HTTP do Plano de Testes ...............................................................13
4.3.1 Organizao Preliminar ........................................................................................................13
4.3.2 Adicionando um Loop Controller ..........................................................................................14
4.3.3 Adicionando Assertions ........................................................................................................15
4.3.3.1 Assertions para a Requisio de Login e Requisies do Caso de Uso ................15
4.3.3.2 Assertion para a Requisio de Logout ..................................................................16
4.3.4 Adicionando Extratores de Expresses Regulares..............................................................17
4.3.4.1 Extraindo o id_sessao .............................................................................................17
4.3.4.2 Parametrizando o id_sessao ...................................................................................18
4.3.4.3 Extraindo o id_contexto_sessao..............................................................................18
4.3.4.4 Parametrizando o id_contexto_sessao ...................................................................19
4.3.4.5 Extraindo o timestamp.............................................................................................20
4.3.4.6 Parametrizando o timestamp...................................................................................21
4.3.5 Adicionando um CSV Data Set Config.................................................................................21
4.3.5.1 Montando um CSV Data Set ...................................................................................21
4.3.5.2 Extraindo a chave primria......................................................................................22
4.3.5.3 Parametrizando a chave primria............................................................................23
4.3.6 Reenviando uma Requisio na Ocorrncia de uma ExcecaoTimestampRegistroInvalido24
4.3.6.1 Extraindo a ExcecaoTimestampRegistroInvalido....................................................24
4.3.6.2 Adicionando um Controlador Condicional (If Controller) .........................................25
5. Executando o Plano de Testes ...........................................................................................................26
5.1 Executando o Plano de Testes para Um Usurio ..........................................................................26
5.1.1 Configuraes Iniciais ..........................................................................................................26
5.1.2 Acompanhando os Resultados do Teste pelo Aggregate Report........................................27
5.1.3 Acompanhando os Resultados do Teste pelo View Results Tree .......................................27
5.1.4 Limpando os Resultados do ltimo Teste ...........................................................................28
5.2 Executando o Plano de Testes para Vrios Usurios....................................................................28
Guia para Testes de Performance JMeter.doc
ltima atualizao em: 6/5/2008 10:33
Pgina 2 de 29
Objetivo
Este guia apresenta como utilizar a ferramenta JMeter para a elaborao e execuo de casos de
testes.
Conceitos
Esta seo explica os principais conceitos utilizados neste guia.
2.1
JMeter
JMeter uma ferramenta utilizada para testes de carga em servios oferecidos por sistemas
computacionais. Esta ferramenta parte do projeto Jakarta da Apache Software Foundation. Para a
realizao de testes, a ferramenta JMeter disponibiliza diversos tipos de requisies e assertions (para
validar o resultado dessas requisies), alm de controladores lgicos como laos e controles
condicionais para serem utilizados na construo de planos de teste, que correspondem aos testes
funcionais.
O JMeter disponibiliza tambm um controle de threads, chamado Thread Group, no qual possvel
configurar o nmero de threads, a quantidade de vezes que cada thread ser executada e o intervalo
entre cada execuo, que ajuda a realizar os testes de carga. E por fim, existem diversos listeners, que
podem ser usados para gerar grficos e tabelas, com base nos resultados das requisies ou dos
assertions,.
2.1.1
Para qualquer teste que venha a ser feito utilizando o JMeter, necessrio criar um Plano de Testes
(Test Plan) incluindo os elementos do teste. Estes elementos podem ser: Thread Group, Configuration
Element, Listener, Timer, Controller, Assertion, Pre-Processor Element ou Post-Processor Element.
Abaixo descrevemos cada um deles.
2.1.1.1
Thread Group
Este ponto de comeo, todos os outros elementos do Test Plan devem estar sob este. Como o prprio
nome ressalta, este controla as threads que sero executadas pelo teste.
2.1.1.2
Configuration Elements
Embora no faa requisies (exceto para HTTP Proxy Server), este elemento pode modificar as
requisies.
2.1.1.3
Listeners
Estes so os elementos que fornecem acesso aos resultados dos testes realizados no JMeter.
2.1.1.4
Timers
Por padro, o JMeter faz requisies sem pausas entre elas. Os timers so utilizados para incluir
pausas entre as requisies.
2.1.1.5
Controllers
Pgina 3 de 29
Assertions
Usadas para verificar se a resposta obtida na requisio a esperada. Podem ser usadas expresses
regulares na comparao.
2.1.1.7
Pre-Processor Elements
Executa alguma ao antes de fazer a requisio. Mais usado para pr-configuraes das requisies.
2.1.1.8
Post-Processor Elements
Executa alguma ao depois de fazer a requisio. Mais usado para processar as respostas da
requisio.
2.1.2
Tipos de Requisio
FTP Permite criar requisies usando o protocolo FTP (com autenticao ou no) e executa o
comando de retrieve em um arquivo especfico.
HTTP Permite criar requisies usando o protocolo HTTP ou HTTPS (com autenticao ou no),
podendo incluir parmetros ou arquivos a requisio, escolher o mtodo usado (GET ou POST) e
manipular cookies. Este sampler possui dois tipos de implementao: Java HTTP ou Commons
HTTPClient.
JDBC Com esta requisio possvel executar queries em um banco de dados especfico.
Objeto Java Ajuda no teste de carga de classes Java, exigindo para isso a implementao de
uma classe do tipo JavaSamplerClient para executar o mtodo a ser testado. A estrutura deste
objeto similar a usada pelo JUnit.
LDAP Permite enviar requisies para um servidor LDAP. Possui uma implementao
simplificada e outra estendida.
Testes JUnit Usado para fazer teste de carga em testes de unidade que utilizam o framework
JUnit.
Existem outros tipos de requisies que, at a atual verso do JMeter, esto em verso alfa, eles so:
Web service (SOAP), Access Log, BeanShell, BSF, TCP, JMS Publisher, JMS Subscriber, JMS Point-toPoint.
3.1
Passos Iniciais
A seguir so apresentados os passos iniciais para elaborao do plano de testes usando o JMeter:
Pgina 4 de 29
Abra o JMeter;
3.2
Com o boto direito do mouse, clique em Test Plan > Add > Thread Group.
Pgina 5 de 29
3.2.1
Action to be taken after a Sampler error: Determina a ao a ser tomada aps a ocorrncia de erro
na execuo do plano de testes. Defina com o valor Stop Test (Parar o teste).
Loop Count: Determina a quantidade de vezes que o plano de testes ser executado. Manter o valor
desse campo = 1.
3.2.2
Com o boto direito do mouse no Thread Group, clique em Add > Config Element > HTTP Cookie
Manager.
Pgina 6 de 29
3.2.2.2
Mantm a configurao HTTP default para ser usada em requisies HTTP que no tenham sido
configuradas.
Com o boto direito do mouse no Thread Group, clique em Add > Config Element > HTTP Request
Defaults.
Pgina 7 de 29
3.2.3
Protocol: http.
No Thread Group adicione os seguintes listeners: Aggregate Report e View Results Tree.
3.2.3.1
Aggregate Report
Mantm o relatrio com os tempos de cada requisio que o plano de testes executa.
Com o boto direito do mouse no Thread Group, clique em Add > Listener > Aggregate Report.
Pgina 8 de 29
3.2.3.2
Mantm uma rvore contendo as requisies realizadas com sucesso e com erro. Serve para identificar
a ocorrncia de erros no plano de testes.
Com o boto direito do mouse no Thread Group, clique em Add > Listener > View Results Tree.
Pgina 9 de 29
3.2.4
Constant Timer
Com o boto direito do mouse no Thread Group, clique em Add > Timer > Constant Timer.
Pgina 10 de 29
4.1
Clique com o boto direito no WorkBench e escolha a opo Add > Non-Test Elements > HTTP
Proxy Server.
Pgina 11 de 29
Inclua um padro de URL para que apenas as requisies s PRs sejam adicionadas ao seu plano
de testes:
a. No campo URL Patterns to Include, pressione o boto Add e digite o texto: .*/PR.*
No seu browser altere as configuraes de servidor proxy. Pode ser tambm pelo Regedit:
a. Proxy Server: http://localhost:8080.
b. Proxy Override: Vazio.
4.2
Faa o login.
d. Execute o seu caso de uso. Vamos ilustrar o passo-a-passo de um caso de uso de consulta
e detalhamento, por exemplo, consulta e detalhamento de usurios do SCA.
i. Clique no menu Segurana e Controle de Acesso (SCA) > Usurios > Cadastro de
Usurios;
ii. Informe o cdigo do usurio;
iii. Pressione o boto Localizar;
Guia para Testes de Performance JMeter.doc
ltima atualizao em: 6/5/2008 10:33
Pgina 12 de 29
Observe que as vrias requisies que foram feitas aparecem no seu plano de testes na ordem em
que foram realizadas. O nosso trabalho agora organizar essas requisies.
4.3
4.3.1
Organizao Preliminar
Primeiro, caso no tenha adicionado um padro de URL para filtrar e inserir no seu plano de testes
apenas as requisies s PRs, elimine a solicitao de todas as imagens, javascripts, folhas de estilo
css que foram carregadas para o seu plano de testes. As requisies /sfi_com_sca/Menu e
/sfi_com_sca/Menu/ tambm podem ser excludas pois no representam requisies HTTP efetivas.
Basta selecionar esses itens e pressionar a tecla Delete.
Restaro apenas as requisies feitas para as PRs do sistema. Vamos organiz-las em 3 grupos agora:
Login;
a. /sfi_com_sca/PRMontarMenuAcesso;
b. /sfi_com_sca/PRGerenciarLoginUsuario.
Realizao do caso de uso (vai variar de acordo com o caso de uso executado);
a. /sfi_com_sca/PRManterUsuario (vrias);
Pgina 13 de 29
Logout.
a. /sfi_com_sca/PREfetuarLogout.
4.3.2
Adicione no thread group um controlador do tipo Loop Controller e insira nele todas as requisies
relacionadas execuo do caso de uso:
Com o boto direito do mouse no Thread Group, clique em Add > Logic Controller > Loop Controller.
Ele ser usado para que possamos fazer teste de carga, repetindo vrias vezes a execuo do caso
de uso.
Agora selecione as requisies relacionadas ao caso de uso, recorte (Ctrl + X) e cole dentro do
Loop Controller (Clique com o boto direito do mouse no Loop Controller e selecione a opo
Paste).
Mova o Loop Controller para depois da requisio PRGerenciarLoginUsuario. Clique, arraste e solte
em cima da requisio PRGerenciarLoginUsuario e selecione a opo Insert After.
Pgina 14 de 29
4.3.3
Adicionando Assertions
Adicionaremos assertions para verificar se uma requisio HTTP foi realizada com sucesso ou no pelo
nosso plano de testes. Teremos, basicamente 2 tipos de assertion:
4.3.3.1
Os seguintes passos devem ser realizados para adicionar assertions para verificar se a requisio de
login e as requisies do caso de uso sendo testado esto sendo executadas com sucesso:
Com o boto direito do mouse na Requisio HTTP, clique em Add > Assertions > Response
Assertion.
Aps preparar a primeira Response Assertion, voc pode copiar e colar a mesma nas outras
requisies HTTP:
Pgina 15 de 29
c.
4.3.3.2
Os seguintes passos devem ser realizados para adicionar uma assertion para verificar se a requisio
de logout est sendo executada com sucesso:
Com o boto direito do mouse na Requisio HTTP, clique em Add > Assertions > Response
Assertion.
Patterns To Test: Pressione o boto Add e insira o texto Operao concluda com
sucesso.
Pgina 16 de 29
4.3.4
Como o plano de testes ser executado vrias vezes e por vrios usurios simultneos, necessrio
parametrizar algumas informaes que no podem ser as mesmas para esses vrios usurios virtuais.
Na situao mais simples precisaremos tratar os parmetros da requisio HTTP: id_sessao e
id_contexto_sessao. Conseguiremos isso fazendo uso de extratores de expresses regulares para
extrair e parametrizar tais informaes da requisio HTTP.
4.3.4.1
Extraindo o id_sessao
d. Template: $2$
e. Match No. (0 for Random): 1
Pgina 17 de 29
4.3.4.2
Em
Parametrizando o id_sessao
todas
as
requisies
HTTP
(HTTP
Request)
realizadas
aps
requisio
/sfi_com_sca/PRMontarMenuAcesso, devemos substituir o valor do id_sessao que est fixo pelo nome
do parmetro que extramos para o id_sessao.
Clique na requisio HTTP, localize o parmetro id_sessao e substitua seu valor pelo texto
${jm_id_sessao}.
4.3.4.3
Extraindo o id_contexto_sessao
Pgina 18 de 29
d. Template: $2$
e. Match No. (0 for Random): 1
4.3.4.4
Parametrizando o id_contexto_sessao
Em todas as requisies HTTP (HTTP Request) realizadas aps a requisio da qual extramos o
id_contexto_sessao, devemos substituir o valor do id_contexto_sessao que est fixo pelo nome do
parmetro que extramos para o mesmo.
Clique na requisio HTTP, localize o parmetro id_contexto_sessao e substitua seu valor pelo
texto ${jm_id_contexto_sessao}.
Pgina 19 de 29
4.3.4.5
Extraindo o timestamp
Para testar eventos de alterao ou excluso, se faz necessrio parametrizar tambm o timestamp do
registro sendo alterado.
Os seguintes passos devem ser realizados para extrair o parmetro timestamp (o exemplo abaixo foi
preparado para o caso de uso de alterao de tipo de usurio):
d. Template: $2$
e. Match No. (0 for Random): 1
Pgina 20 de 29
4.3.4.6
Parametrizando o timestamp
Em todas as requisies HTTP (HTTP Request) realizadas aps a requisio da qual extramos o
timestamp, devemos substituir o valor do timestamp que est fixo pelo nome do parmetro que
extramos para o mesmo.
Clique na requisio HTTP, localize o parmetro timestamp e substitua seu valor pelo texto
${jm_timestamp}.
4.3.5
Os seguintes passos devem ser realizados para adicionar um componente CSV Data Set Config (o
exemplo abaixo foi preparado para o caso de uso de alterao de tipo de usurio):
Com o boto direito do mouse clique no Loop Controller e selecione a opo Add > Config Element
> CSV Data Set Config.
Pgina 21 de 29
Mova o CSV Data Set Config para antes da requisio HTTP que possui o evento
processarFiltroConsulta.
Delimiter: \n
O arquivo chaves_primarias.csv (o nome do arquivo fica a sua escolha) conter as chaves primrias
dos registros que sero alterados ou excludos. Uma chave em cada linha do arquivo. Se a chave
for composta separe os dados que a compem por vrgulas.
4.3.5.2
Pgina 22 de 29
d. Template: $2$
e. Match No. (0 for Random): 1
4.3.5.3
Em todas as requisies HTTP (HTTP Request) realizadas aps a requisio da qual extramos a chave
primria, devemos substituir o valor da chave primria que est fixo pelo nome do parmetro que
extramos para o mesmo.
Clique na requisio HTTP, localize o parmetro chave_primaria e substitua seu valor pelo texto
${jm_chave_primaria}.
Pgina 23 de 29
Ateno: No teste de um evento de alterao, se existirem informaes que no devem ser alteradas,
por exemplo, a descrio de um tipo de usurio, voc dever seguir o mesmo procedimento
apresentado anteriormente para extrair e parametrizar essa informao!
4.3.6
Nos
de
eventos
de
alterao
ou
excluso,
possvel
que
excees
do
tipo
4.3.6.1
Extraindo a ExcecaoTimestampRegistroInvalido
d. Template: $0$
e. Match No. (0 for Random): 1
Pgina 24 de 29
4.3.6.2
Com o boto direito do mouse clique no Loop Controller e selecione a opo Add > Logic Controller
> If Controller.
Mova o If Controller para depois da requisio HTTP que possui o evento processarAlteracao.
(Javascript):
"${jm_ExcecaoTimestampRegistroInvalido}"
"ExcecaoTimestampRegistroInvalido"
Pgina 25 de 29
==
Se voc chegou at aqui, seu plano de testes est pronto. No se esquea de eventualmente salvar seu
plano de testes para no perder as alteraes que j foram feitas nele. Antes de execut-lo para vrios
usurios importante testar com um usurio para verificar que seu plano de testes est bem
configurado. Na prxima sesso iremos demonstrar como executar o seu plano de testes.
5.1
5.1.1
Configuraes Iniciais
Para executar o plano de testes para um usurio, verifique primeiro se as configuraes que indicam a
quantidade de usurios e a continuidade do teste esto da seguinte forma:
No Thread Group:
a. Number of threads (users): 1
Pgina 26 de 29
Loop Count: 1
No Loop Controller:
a. Loop Count (Forever): Desmarcado
b. Loop Count: 1
5.1.2
5.1.3
Na ocorrncia de erros, voc poder verificar o que aconteceu analisando o listener View Results Tree.
a. Clique na requisio com problema e analise a aba Response Data para identificar o erro
ocorrido na requisio.
Pgina 27 de 29
5.1.4
Antes de iniciar uma nova bateria de testes, limpe o resultado da ltima execuo do plano de testes
realizando os seguintes passos:
5.2
No Thread Group:
a. Number of threads (users): 10 ou 25 ou 50 (quantidade a definir)
b. Loop Count (Forever): Desmarcado
c.
Loop Count: 1
No Loop Controller:
a. Loop Count (Forever): Marcado
Para executar para vrios usurios remova o listener View Results Tree, pois este consome muitos
recursos de memria.
a. Com o boto direito clique no listener e selecione a opo Remove. Ou Simplesmente
selecione o listener e pressione a tecla delete.
Pgina 28 de 29
Pgina 29 de 29