Guia para Testes de Performance Usando a Ferramenta JMeter
Versão 01.01 | Data 11/01/2008
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 1 de 29
ÍNDICE 1. Objetivo .................................................................. ....................................................................................................................................... .................................................................................3 ............3 2. Conceitos ............................................................... .................................................................................................................................... .................................................................................3 ............3 2.1 JMeter...............................................................................................................................................3 2.1.1 Plano de Testes (Test Plan )...................................................................................................3 )...................................................................................................3 2.1.1.1 Thread T hread Group ............................................................. ............................................................................................................3 ...............................................3 2.1.1.2 Configuration Elements ..................................................................... .............................................................................................3 ........................3 2.1.1.3 Listeners .......................................................... ....................................................................................................................3 ..........................................................3 2.1.1.4 Timers........................................................................................................................3 2.1.1.5 Controllers .................................................................. .................................................................................................................3 ...............................................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 Requisição...............................................................................................................4 3. Criando um Plano de Testes.................................................................................................................4 3.1 Passos Iniciais ............................................................ ................................................................................................................................. ......................................................................4 .4 3.2 Adicionando um Thread Group ao ao Plano de Testes ............................................................ ........................................................................5 ............5 3.2.1 Configurando um Thread Group .................................................................... ............................................................................................6 ........................6 3.2.2 Adicionando Elementos de Configuração ao Thread Group .................................................6 3.2.2.1 HTTP Cookie Cookie Manager..............................................................................................6 Manager..............................................................................................6 3.2.2.2 HTTP Request Defaults............................................................................................ Defaults.............................................................................................7 .7 3.2.3 Adicionando Listeners ao Thread Group ................................................................... ...............................................................................8 ............8 3.2.3.1 Aggregate Report ................................................................... ......................................................................................................8 ...................................8 3.2.3.2 View Results Tree .................................................................. .....................................................................................................9 ...................................9 3.2.4 Adicionando Timers ao Thread Group ........................................................... .................................................................................10 ......................10 3.2.4.1 Constant Timer ........................................................... ........................................................................................................10 .............................................10 4. Gravando a Execução de um Caso de Uso Uso no Plano de Testes .....................................................11 4.1 Adicionando um HTTP Proxy Server Server ao Plano de Testes .............................................................1 .............................................................111 4.2 Executando o Caso de Uso a Ser Gravado no Plano de Testes...................................................12 4.3 Organizando as Requisições HTTP do Plano de Testes...............................................................13 4.3.1 Organização Preliminar ........................................................... ........................................................................................................13 .............................................13 4.3.2 Adicionando um Loop Controller..........................................................................................14 4.3.3 Adicionando Assertions ........................................................... ........................................................................................................15 .............................................15 4.3.3.1 Assertions para a Requisição de Login Login e Requisições do Caso de Uso ................15 4.3.3.2 Assertion para a Requisição de Logout ..................................................................1 ..................................................................166 4.3.4 Adicionando Extratores de Expressões Regulares..............................................................17 4.3.4.1 Extraindo o id_sessao ............................................................ .............................................................................................17 .................................17 4.3.4.2 Parametrizando o id_sessao...................................................................................18 4.3.4.3 Extraindo o id_contexto_sessao..............................................................................1 id_contexto_sessao..............................................................................188 4.3.4.4 Parametrizando o id_contexto_sessao ...................................................................1 ...................................................................199 4.3.4.5 Extraindo o timestamp ............................................................ .............................................................................................20 .................................20 4.3.4.6 Parametrizando o timestamp...................................................................................2 timestamp...................................................................................211 4.3.5 Adicionando um CSV Data Set Config ........................................................... .................................................................................21 ......................21 4.3.5.1 Montando um CSV Data Set ............................................................. ...................................................................................21 ......................21 4.3.5.2 Extraindo a chave primária ................................................................ ......................................................................................22 ......................22 4.3.5.3 Parametrizando a chave primária.................................................................. primária............................................................................23 ..........23 4.3.6 Reenviando uma Requisição na Ocorrência 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 .............................................26 5.1 Executando o Plano de Testes para Um Um Usuário ................................................................ ..........................................................................26 ..........26 5.1.1 Configurações Iniciais ............................................................. ..........................................................................................................26 .............................................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 ..........28 5.2 Executando o Plano de Testes para Vários Usuários....................................................................28 Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 2 de 29
1
Objetivo Este guia apresenta como utilizar a ferramenta JMeter para a elaboração e execução de casos de testes.
2
Conceitos Esta seção explica os principais conceitos utilizados neste guia.
2.1 JMeter JMeter é uma ferramenta utilizada para testes de carga em serviços oferecidos por sistemas computacionais. Esta ferramenta é parte do projeto Jakarta da Apache Software Foundation . Para a realização de testes, a ferramenta JMeter disponibiliza diversos tipos de requisições e assertions (para validar o resultado dessas requisições), além de controladores lógicos como laços e controles condicionais para serem utilizados na construção de planos de teste, que correspondem aos testes funcionais. O JMeter disponibiliza também um controle de threads , chamado Thread Group , no qual é possível configurar o número de threads , a quantidade de vezes que cada thread será executada e o intervalo entre cada execução, que ajuda a realizar os testes de carga. E por fim, existem diversos listeners , que podem ser usados para gerar gráficos e tabelas, com base nos resultados das requisições ou dos assertions ,. 2.1.1
Plano de Testes (Test Plan )
Para qualquer teste que venha a ser feito utilizando o JMeter, é necessário 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 começo, todos os outros elementos do Test Plan devem estar sob este. Como o próprio nome ressalta, este controla as threads que serão executadas pelo teste. 2.1.1.2
Configuration Elements
Embora não faça requisições (exceto para HTTP Proxy Server), este elemento pode modificar as requisições. 2.1.1.3 Listeners Estes são os elementos que fornecem acesso aos resultados dos testes realizados no JMeter. 2.1.1.4
Timers
Por padrão, o JMeter faz requisições sem pausas entre elas. Os timers são utilizados para incluir pausas entre as requisições. 2.1.1.5
Controllers
Os Controllers estão divididos em dois grupos Samplers e Logic Controllers : Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 3 de 29
•
Samplers
•
Logic Controllers —
2.1.1.6
— São controladores pré-definidos para requisições específicas. Podendo ser customizada com a inserção de configurações (Configurations ), Assertions e etc. São controladores mais genéricos. Podendo ser customizados com a inserção de outros controllers, configuration elements, assertions , etc. Assertions
Usadas para verificar se a resposta obtida na requisição é a esperada. Podem ser usadas expressões regulares na comparação. 2.1.1.7
Pre-Processor Elements
Executa alguma ação antes de fazer a requisição. Mais usado para pré-configurações das requisições. 2.1.1.8 Post-Processor Elements Executa alguma ação depois de fazer a requisição. Mais usado para processar as respostas da requisição. 2.1.2
Tipos de Requisição
O JMeter suporta os seguintes tipos de requisição em suas rotinas de testes: •
•
•
•
•
•
FTP — Permite criar requisições usando o protocolo FTP (com autenticação ou não) e executa o comando de retrieve em um arquivo específico. HTTP — Permite criar requisições usando o protocolo HTTP ou HTTPS (com autenticação ou não), podendo incluir parâmetros ou arquivos a requisição, escolher o método usado (GET ou POST) e manipular cookies . Este sampler possui dois tipos de implementação: Java HTTP ou Commons HTTPClient. JDBC — Com esta requisição é possível executar queries em um banco de dados específico. Objeto Java — Ajuda no teste de carga de classes Java, exigindo para isso a implementação de uma classe do tipo JavaSamplerClient para executar o método a ser testado. A estrutura deste objeto é similar a usada pelo JUnit. SOAP/XML-RPC — Permite enviar requisições SOAP para um WebService, ou enviar XML-RPC através do protocolo HTTP. LDAP — Permite enviar requisições para um servidor LDAP. Possui uma implementação 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 requisições que, até a atual versão do JMeter, estão em versão alfa, eles são: Web service (SOAP), Access Log, BeanShell, BSF, TCP, JMS Publisher, JMS Subscriber, JMS Point-toPoint. •
3
Criando um Plano de Testes Esta seção apresenta os procedimentos para criar um plano de testes.
3.1 Passos Iniciais A seguir são apresentados os passos iniciais para elaboração do plano de testes usando o JMeter: Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 4 de 29
•
•
•
Abra o JMeter; Configure o Test Plan; a. No campo Comments descreva o que for necessário para executar seu plano de testes.
Salve seu plano de testes. a. Clique no menu File > Save.
b. Dê um nome ao plano de testes e pressione o botão Save.
3.2 Adicionando um Thread Group ao Plano de Testes Conforme vimos anteriormente, um thread group é ponto de começo e todos os outros elementos do plano de testes devem estar sob ele. •
Com o botão direito do mouse, clique em Test Plan > Add > Thread Group.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 5 de 29
3.2.1
Configurando um Thread Group
Os seguintes campos do thread group devem ser configurados: •
•
•
3.2.2
Action to be taken after a Sampler error: Determina a ação a ser tomada após a ocorrência de erro na execução do plano de testes. Defina com o valor “Stop Test” (Parar o teste). Number of threads (users): Determina a quantidade de usuários simultâneos executando o caso de uso do plano de testes. Loop Count: Determina a quantidade de vezes que o plano de testes será executado. Manter o valor desse campo = 1.
Adicionando Elementos de Configuração ao Thread Group
No Thread Group adicione os seguintes elementos de configuração: 3.2.2.1
HTTP Cookie Manager
Mantém a configuração de gerenciamento de cookies. •
Com o botão direito do mouse no Thread Group, clique em Add > Config Element > HTTP Cookie Manager.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 6 de 29
•
3.2.2.2
Os seguintes campos do HTTP Cookie Manager devem ser configurados: a. Marque a opção “clear cookies each iteration?”. b. Selecione a política de cookies: rfc2109.
HTTP Request Defaults
Mantém a configuração HTTP default para ser usada em requisições HTTP que não tenham sido configuradas. •
Com o botão direito do mouse no Thread Group, clique em Add > Config Element > HTTP Request Defaults.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 7 de 29
•
3.2.3
Os seguintes campos do HTTP Request Defaults devem ser configurados: a. Server name or IP: Nome ou IP da máquina que será usada para executar o plano de testes. b. Port Number: Número da porta da máquina que será usada para executar o plano de testes. c. Protocol: http.
Adicionando Listeners ao Thread Group
No Thread Group adicione os seguintes listeners: Aggregate Report e View Results Tree. 3.2.3.1
Aggregate Report
Mantém o relatório com os tempos de cada requisição que o plano de testes executa. •
Com o botão direito do mouse no Thread Group, clique em Add > Listener > Aggregate Report.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 8 de 29
3.2.3.2
View Results Tree
Mantém uma árvore contendo as requisições realizadas com sucesso e com erro. Serve para identificar a ocorrência de erros no plano de testes. •
Com o botão direito do mouse no Thread Group, clique em Add > Listener > View Results Tree.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 9 de 29
3.2.4
Adicionando Timers ao Thread Group
No Thread Group adicione o seguinte timer: Constant Timer. 3.2.4.1
Constant Timer
Mantém o tempo de espera entre as threads executadas. •
Com o botão direito do mouse no Thread Group, clique em Add > Timer > Constant Timer.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 10 de 29
4
Gravando a Execução de um Caso de Uso no Plano de Testes Os próximos passos descrevem como gravar a execução de um caso de uso dentro do seu plano de testes.
4.1 Adicionando um HTTP Proxy Server ao Plano de Testes Os seguintes passos devem ser realizados para adicionar um HTTP Proxy Server ao seu plano de testes: •
•
Clique com o botão direito no WorkBench e escolha a opção Add > Non-Test Elements > HTTP Proxy Server.
Configure o Target Controller para: Test Plan > Thread Group.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 11 de 29
•
•
Inclua um padrão de URL para que apenas as requisições às PR’s sejam adicionadas ao seu plano de testes: a. No campo URL Patterns to Include, pressione o botão Add e digite o texto: .*/PR.*
No seu browser altere as configurações de servidor proxy. Pode ser também pelo Regedit: a. Proxy Server: http://localhost:8080. b. Proxy Override: Vazio.
4.2 Executando o Caso de Uso a Ser Gravado no Plano de Testes Os seguintes passos devem ser realizados para executar o caso de uso a ser gravado no seu plano de testes: •
Abra o browser para executar seu caso de uso: a. Pressione o botão Start do HTTP Proxy Server adicionado ao seu plano de testes. b. Entre com a URL do ambiente no qual você executará seu caso de uso. c. Faça 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 usuários do SCA. i. Clique no menu Segurança e Controle de Acesso (SCA) > Usuários > Cadastro de Usuários; ii. Informe o código do usuário; iii. Pressione o botão Localizar;
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 12 de 29
iv. Selecione o registro encontrado; v. Pressione o botão Detalhar; vi. Clique no link Menu Principal; vii. Clique no link encerrar Sessão. e. Pressione o botão Stop do HTTP Proxy Server adicionado ao seu plano de testes. •
Observe que as várias requisições que foram feitas aparecem no seu plano de testes na ordem em que foram realizadas. O nosso trabalho agora é organizar essas requisições.
4.3 Organizando as Requisições HTTP do Plano de Testes Os seguintes passos devem ser realizados para organizar as requisições HTTP que devem permanecer no seu plano de testes: 4.3.1
Organização Preliminar
Primeiro, caso não tenha adicionado um padrão de URL para filtrar e inserir no seu plano de testes apenas as requisições às PR’s, elimine a solicitação de todas as imagens, javascripts, folhas de estilo css que foram carregadas para o seu plano de testes. As requisições /sfi_com_sca/Menu e /sfi_com_sca/Menu/ também podem ser excluídas pois não representam requisições HTTP efetivas. Basta selecionar esses itens e pressionar a tecla Delete. Restarão apenas as requisições feitas para as PRs do sistema. Vamos organizá-las em 3 grupos agora: •
•
Login; a. /sfi_com_sca/PRMontarMenuAcesso; b. /sfi_com_sca/PRGerenciarLoginUsuario. Realização do caso de uso (vai variar de acordo com o caso de uso executado); a. /sfi_com_sca/PRManterUsuario (várias);
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 13 de 29
b. /sfi_com_sca/PRMontarMenuAcesso. A última que representa a saída da tela do caso de uso para a tela de menu do sistema. •
4.3.2
Logout. a. /sfi_com_sca/PREfetuarLogout. Adicionando um Loop Controller
Adicione no thread group um controlador do tipo Loop Controller e insira nele todas as requisições relacionadas à execução do caso de uso: •
•
•
Com o botão direito do mouse no Thread Group, clique em Add > Logic Controller > Loop Controller. Ele será usado para que possamos fazer teste de carga, repetindo várias vezes a execução do caso de uso.
Agora selecione as requisições relacionadas ao caso de uso, recorte (Ctrl + X) e cole dentro do Loop Controller (Clique com o botão direito do mouse no Loop Controller e selecione a opção Paste). Mova o Loop Controller para depois da requisição PRGerenciarLoginUsuario. Clique, arraste e solte em cima da requisição PRGerenciarLoginUsuario e selecione a opção Insert After.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 14 de 29
4.3.3
Adicionando Assertions
Adicionaremos assertions para verificar se uma requisição HTTP foi realizada com sucesso ou não pelo nosso plano de testes. Teremos, basicamente 2 tipos de assertion: •
Para a requisição de Login e requisições de execução do caso de uso;
•
Para a requisição de Logout.
4.3.3.1
Assertions para a Requisição de Login e Requisições do Caso de Uso
Os seguintes passos devem ser realizados para adicionar assertions para verificar se a requisição de login e as requisições do caso de uso sendo testado estão sendo executadas com sucesso: •
•
•
Com o botão direito do mouse na Requisição HTTP, clique em Add > Assertions > Response Assertion.
Configure os seguintes campos da Assertion: a. Name: “Processada com Sucesso”. b. Pattern Matching Rule: Contains. c. Pattern Matching Rule: Not. d. Patterns To Test: Pressione o botão Add e insira o texto “Log da Exceção”.
Após preparar a primeira Response Assertion, você pode copiar e colar a mesma nas outras requisições HTTP:
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 15 de 29
a. Com o botão direito do mouse na Assertion, clique em Copy.
b. Com o botão direito do mouse na Requisição HTTP destino, clique em Paste.
c. Se preferir, você pode utilizar também, simplesmente, Ctrl + C e Ctrl + V! 4.3.3.2
Assertion para a Requisição de Logout
Os seguintes passos devem ser realizados para adicionar uma assertion para verificar se a requisição de logout está sendo executada com sucesso: •
•
Com o botão direito do mouse na Requisição HTTP, clique em Add > Assertions > Response Assertion.
Configure os seguintes campos da Assertion: a. Name: “Operação concluída com sucesso” b. Pattern Matching Rule: Contains c. Patterns To Test: Pressione o botão Add e insira o texto “Operação concluída com sucesso”.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 16 de 29
4.3.4
Adicionando Extratores de Expressões Regulares
Como o plano de testes será executado várias vezes e por vários usuários simultâneos, é necessário parametrizar algumas informações que não podem ser as mesmas para esses vários usuários virtuais. Na situação mais simples precisaremos tratar os parâmetros da requisição HTTP: id_sessao e id_contexto_sessao. Conseguiremos isso fazendo uso de extratores de expressões regulares para extrair e parametrizar tais informações da requisição HTTP. 4.3.4.1 Extraindo o id_sessao Os seguintes passos devem ser realizados para extrair o parâmetro id_sessao: •
•
Com o botão direito do mouse na Requisição HTTP /sfi_com_sca/PRMontarMenuAcesso, clique em Add > Post Processors > Regular Expression Extractor.
Configure os seguintes campos do Extrator de Expressão Regular: a. Name: “Extrair id_sessao” b. Reference name: jm_id_sessao c. Regular Expression: name="id_sessao"\s*(\r\n\s*)?value="([^"]*)" d. Template: $2$ e. Match No. (0 for Random): 1
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 17 de 29
4.3.4.2
Parametrizando o id_sessao
Em todas as requisições HTTP (HTTP Request) realizadas após a requisição /sfi_com_sca/PRMontarMenuAcesso, devemos substituir o valor do id_sessao que está fixo pelo nome do parâmetro que extraímos para o id_sessao. •
4.3.4.3
Clique na requisição HTTP, localize o parâmetro id_sessao e substitua seu valor pelo texto ${jm_id_sessao}.
Extraindo o id_contexto_sessao
Os seguintes passos devem ser realizados para extrair o parâmetro id_contexto_sessao: •
Com o botão direito do mouse na Requisição HTTP /sfi_com_sca/PRManterUsuario que executou o evento processarFiltroConsulta (na execução do evento processarFiltroConsulta do seu caso de uso é gerado o parâmetro id_contexto_sessao), clique em Add > Post Processors > Regular Expression Extractor.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 18 de 29
•
4.3.4.4
Configure os seguintes campos do Extrator de Expressão Regular: a. Name: “Extrair id_contexto_sessao” b. Reference name: jm_id_contexto_sessao c. Regular Expression: name="id_contexto_sessao"\s*(\r\n\s*)?value="([^"]*)" d. Template: $2$ e. Match No. (0 for Random): 1
Parametrizando o id_contexto_sessao
Em todas as requisições HTTP (HTTP Request) realizadas após a requisição da qual extraímos o id_contexto_sessao, devemos substituir o valor do id_contexto_sessao que está fixo pelo nome do parâmetro que extraímos para o mesmo. •
Clique na requisição HTTP, localize o parâmetro id_contexto_sessao e substitua seu valor pelo texto ${jm_id_contexto_sessao}.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 19 de 29
4.3.4.5
Extraindo o timestamp
Para testar eventos de alteração ou exclusão, se faz necessário parametrizar também o timestamp do registro sendo alterado. Os seguintes passos devem ser realizados para extrair o parâmetro timestamp (o exemplo abaixo foi preparado para o caso de uso de alteração de tipo de usuário): •
•
Com o botão direito do mouse clique na Requisição HTTP /sfi_com_sca/PRManterTipoUsuario que executou o evento exibirAlteracao (na execução do evento exibirAlteracao do seu caso de uso é gerado o parâmetro timestamp), clique em Add > Post Processors > Regular Expression Extractor.
Configure os seguintes campos do Extrator de Expressão Regular: a. Name: “Extrair timestamp” b. Reference name: jm_timestamp c. Regular Expression: name="timestamp"\s*(\r\n\s*)?value="([^"]*)" d. Template: $2$ e. Match No. (0 for Random): 1
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 20 de 29
4.3.4.6
Parametrizando o timestamp
Em todas as requisições HTTP (HTTP Request) realizadas após a requisição da qual extraímos o timestamp, devemos substituir o valor do timestamp que está fixo pelo nome do parâmetro que extraímos para o mesmo. •
4.3.5
Clique na requisição HTTP, localize o parâmetro timestamp e substitua seu valor pelo texto ${jm_timestamp}.
Adicionando um CSV Data Set Config
Para testar eventos de alteração ou exclusão, é interessante montarmos um conjunto de dados dinâmicos que nos permitirá alterar ou excluir registros diferentes. Portanto, para trabalhar com dados dinâmicos, utilizaremos um arquivo CSV contendo esses dados e no nosso plano de testes utilizaremos um componente CSV Data Set Config. 4.3.5.1
Montando um CSV Data Set
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 alteração de tipo de usuário): •
Com o botão direito do mouse clique no Loop Controller e selecione a opção Add > Config Element > CSV Data Set Config.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 21 de 29
•
•
•
4.3.5.2
Mova o CSV Data Set Config para antes da requisição HTTP que possui o evento processarFiltroConsulta. Configure os seguintes campos do CSV Data Set Config: a. Filename: chaves_primarias.csv b. Variable Names (comma-delimited): jm_CdTipoUsuario_CSV c. Delimiter: \n d. Stop Thread on EOF?: True (Para o caso de testes de exclusão). O arquivo chaves_primarias.csv (o nome do arquivo fica a sua escolha) conterá as chaves primárias dos registros que serão alterados ou excluídos. Uma chave em cada linha do arquivo. Se a chave for composta separe os dados que a compõem por vírgulas.
Extraindo a chave primária
Associado ao conjunto de dados dinâmicos, precisaremos extrair e parametrizar a chave primária do registro sendo alterado ou excluído. Realize os seguintes passos para extrair o parâmetro chave_primaria: •
Com o botão direito do mouse na Requisição HTTP /sfi_com_sca/PRManterTipoUsuario que executou o evento processarFiltroConsulta, clique em Add > Post Processors > Regular Expression Extractor.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 22 de 29
•
4.3.5.3
Configure os seguintes campos do Extrator de Expressão Regular: a. Name: “Extrair chave_primaria” b. Reference name: jm_chave_primaria c. Regular Expression: name="chave_primaria"\s*(\r\n\s*)?value="([^"]*)" d. Template: $2$ e. Match No. (0 for Random): 1
Parametrizando a chave primária
Em todas as requisições HTTP (HTTP Request) realizadas após a requisição da qual extraímos a chave primária, devemos substituir o valor da chave primária que está fixo pelo nome do parâmetro que extraímos para o mesmo. •
Clique na requisição HTTP, localize o parâmetro chave_primaria e substitua seu valor pelo texto ${jm_chave_primaria}.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 23 de 29
Atenção: No teste de um evento de alteração, se existirem informações que não devem ser alteradas, por exemplo, a descrição de um tipo de usuário, você deverá seguir o mesmo procedimento apresentado anteriormente para extrair e parametrizar essa informação! 4.3.6
Reenviando uma Requisição na Ocorrência de uma ExcecaoTimestampRegistroInvalido
Nos testes de eventos de alteração ou exclusão, é possível que exceções do tipo ExcecaoTimestampRegistroInvalido aconteçam. Neste caso podemos adicionar elementos ao plano de testes que possibilitam reenviar uma requisição de alteração quando ocorrer uma exceção ExcecaoTimestampRegistroInvalido. Realize os seguintes passos para reenviar uma requisição HTTP: •
•
4.3.6.1
Na requisição HTTP contendo o evento processarAlteracao, extraia a possível ocorrência da ExcecaoTimestampRegistroInvalido; Após a requisição HTTP contendo o evento processarAlteracao, adicionaremos um controlador condicional (If Controller) que irá verificar a ocorrência da exceção. Em caso afirmativo reenviaremos a requisição HTTP contendo o evento processarAlteracao. Extraindo a ExcecaoTimestampRegistroInvalido
Realize os seguintes passos para extrair a ExcecaoTimestampRegistroInvalido: •
•
Com o botão direito do mouse na Requisição HTTP /sfi_com_sca/PRManterTipoUsuario que executou o evento processarAlteracao, clique em Add > Post Processors > Regular Expression Extractor.
Configure os seguintes campos do Extrator de Expressão Regular: a. Name: “Extrair ExcecaoTimestampRegistroInvalido” b. Reference name: jm_ExcecaoTimestampRegistroInvalido c. Regular Expression: ExcecaoTimestampRegistroInvalido d. Template: $0$ e. Match No. (0 for Random): 1
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 24 de 29
4.3.6.2
Adicionando um Controlador Condicional (If Controller)
Realize os seguintes passos para adicionar um controlador condicional (If Controller): •
•
•
Com o botão direito do mouse clique no Loop Controller e selecione a opção Add > Logic Controller > If Controller.
Mova o If Controller para depois da requisição HTTP que possui o evento processarAlteracao.
Configure os seguintes campos do If Controller: a. Name: Se ExcecaoTimestampRegistroInvalido b. Condition (Javascript): "${jm_ExcecaoTimestampRegistroInvalido}" "ExcecaoTimestampRegistroInvalido"
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 25 de 29
==
•
Copie a requisição HTTP do evento processarAlteracao e cole no If Controller: a. Selecione a requisição HTTP do evento processarAlteracao e pressione as teclas Ctrl + C; b. Selecione o If Controller e pressione as teclas Ctrl + V; c. Lembre-se de remover desta cópia da requisição HTTP do evento processarAlteracao, o extrator de expressão regular da ExcecaoTimestampRegistroInvalido. Selecione o extrator e pressione a tecla Delete.
Se você chegou até aqui, seu plano de testes está pronto. Não se esqueça de eventualmente salvar seu plano de testes para não perder as alterações que já foram feitas nele. Antes de executá-lo para vários usuários é importante testar com um usuário para verificar que seu plano de testes está bem configurado. Na próxima sessão iremos demonstrar como executar o seu plano de testes.
5
Executando o Plano de Testes Os próximos passos descrevem como executar o seu plano de testes. Iremos demonstrar a execução para um usuário, que nos será útil para verificar se o plano de testes está bem configurado.
5.1 Executando o Plano de Testes para Um Usuário Esta seção apresenta as configurações de execução do plano de testes para um usuário e como acompanhar os resultados do teste sendo realizado. 5.1.1
Configurações Iniciais
Para executar o plano de testes para um usuário, verifique primeiro se as configurações que indicam a quantidade de usuários e a continuidade do teste estão da seguinte forma: •
No Thread Group: a. Number of threads (users): 1
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 26 de 29
b. Loop Count (Forever): Desmarcado c. Loop Count: 1
•
•
5.1.2
No Loop Controller: a. Loop Count (Forever): Desmarcado b. Loop Count: 1
Clique no menu Run > Start
Acompanhando os Resultados do Teste pelo Aggregate Report
Acompanhe o resultado pelo Aggregate Report.
•
Se estiver Ok, a coluna Error apresentará 0.00%.
•
Se ocorrerem erros, veja os detalhes no View Results Tree.
5.1.3 Acompanhando os Resultados do Teste pelo View Results Tree Na ocorrência de erros, você poderá verificar o que aconteceu analisando o listener View Results Tree.
•
•
As requisições que aparecerem com o símbolo
ao lado, significa que estão Ok.
A requisição que aparecer com o símbolo ao lado, significa que está com problemas. a. Clique na requisição com problema e analise a aba Response Data para identificar o erro ocorrido na requisição.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 27 de 29
5.1.4
Limpando os Resultados do Último Teste
Antes de iniciar uma nova bateria de testes, limpe o resultado da última execução do plano de testes realizando os seguintes passos: •
Clique no Aggregate Report;
•
Selecione o menu Run > Clear.
5.2 Executando o Plano de Testes para Vários Usuários Para executar o plano de testes para vários usuários, verifique primeiro se as configurações que indicam a quantidade de usuários e a continuidade do teste estão da seguinte forma: •
•
•
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 vários usuários remova o listener View Results Tree, pois este consome muitos recursos de memória. a. Com o botão direito clique no listener e selecione a opção Remove. Ou Simplesmente selecione o listener e pressione a tecla delete.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 28 de 29
•
Clique no menu Run > Start
•
Acompanhe o resultado pelo Aggregate Report.
Guia para Testes de Performance JMeter.doc Última atualização em: 6/5/2008 10:33
Página 29 de 29