Teste de carga com JMeter – Criando o primeiro script

teste de carga com jmeter

No primeiro post Teste de carga com JMeter, conseguimos instalar e configurar o JMeter para podermos criar o primeiro script.
A partir de agora, ao clicarmos em Iniciar no HTTP Proxy, tudo que o Firefox gerar de requisição será gravado no JMeter. O primeiro script que vamos fazer será uma simulação de uma pessoa entrando no portal da Universidade Federal de Minas Gerais (UFMG) e acessando os concursos abertos.
Primeiramente, devemos ir no Servidor HTTP Proxy criado no primeiro post e iniciá-lo. Quando abrir um site qualquer, uma mensagem de conexão segura sempre aparecerá, já que o certificado usado será do Jmeter. É só clicar em Avançado > Adicionar Exceção e confirmar.


A partir do momento da confirmação, todas as requisições geradas por esse domínio no browser estarão sendo gravadas no Grupo de Usuários criado no Jmeter. Isso inclui imagens, ícones, e uma série de coisas que não são relevantes para o seu teste em si – já que toda vez que você clicar no mesmo link, estas informações serão carregadas de novo. Vamos utilizar o https://www.ufmg.br/ . No próprio site da UFMG, vamos clicar em Concursos, no menu lateral esquerdo.

Nesse caso, como Concursos é um link externo, a mesma mensagem de conexão segura aparecerá, e o procedimento é sempre o mesmo. Após adicionar a exceção, nosso fluxo está terminado; estamos simulando um usuário que entra na página de concursos para ver as vagas. Só precisamos agora interromper a gravação no Servidor HTTP Proxy do JMeter.
Feito isso, uma boa prática é abrir um novo cliente do Jmeter e copiar todo Grupo de Usuários para essa nova janela. Isso porque, em scripts que precisamos parametrizar algumas informações, pode ser necessário visualizar as respostas – geradas na Árvore de Resultados – para criarmos um RegEx, por exemplo, e podermos testar. O primeiro passo agora é “limpar” o script. Geralmente, requisições com formatos de imagem como png, jpeg, gif, outros como ico, js, css, txt, não são necessários ao seu teste. Em casos específicos, podemos precisar de algum token que seja gerado por um .js, por exemplo. Por isso, é importante fazer esse processo em um cliente separado, para que todas as requisições sejam preservadas no outro cliente. No nosso caso, o script, após ser despoluído, ficará parecido com isso:

Se executarmos o teste dessa forma, estaremos simulando um usuário virtual apenas executando esses passos uma única vez. Para aumentarmos o número de usuários virtuais simultâneos, é só clicar em Grupo de Usuários e mudar de 1 para o número que desejar em “Número de Usuários Virtuais (threads)” como na figura abaixo:

Normalmente quando eu estou testando, faço vários steps de usuários virtuais por pelo menos três vezes, para fazer a média desses resultados. Além disso, coloco um tempo de quinze minutos para cada um teste. Assim posso comparar os resultados crescendo a carga sem estressar totalmente o sistema e influenciar nos próximos testes. Para colocarmos para o teste rodar por um tempo específico, é só clicarmos com o botão direito em Grupo de Usuários > Adicionar > Controlador Lógico > Controlador de Tempo de Execução. Depois disso, devemos copiar todas requisições que vão ser executadas nesse tempo dentro do controlador e configurar quanto tempo, em segundos, queremos que o teste rode (no caso, 900 segundos), como na figura:

Como queremos juntar dados para compararmos depois, devemos ir em Relatório Agregado e escrever o nome do arquivo a ser gerado pelo teste em Nome do arquivo, passando o caminho desejado, como por exemplo: C:UsersUsuariotesteDesktopapache-jmeter-3.1bintestes_01uv_exec1.jtl
É uma boa prática colocar o número de usuários virtuais daquele teste e o número da execução. Assim, quando formos compilar os resultados, podemos separar pelo número de usuários virtuais.
Esse script é muito simples, e normalmente temos uma demanda bem mais complexa para testar. Vamos supor que queremos testar um usuário que entra no portal da UFMG e escolhe qualquer opção daquele menu lateral a esquerda, e não necessariamente concursos. Lembram aquele cliente do JMeter em que gravamos o script e pedi para não ser fechado? Pois é, ele ajudará nesse processo agora. Precisamos achar algo que seja comum a todos aqueles links para escolhermos um aleatoriamente. Para isso, vamos procurar a requisição que contém esses dados – que é a página principal – e procurar essa identificação.

Se procuramos em search pelos títulos dos links do menu, vemos que há um padrão em que todo link está dentro de um <a href> com seu respectivo link, que é o que queremos pegar, seguido de um código escrito “onClick”. É importante conferirmos pelo search se minha expressão regular não está pegando outros links que não queremos; por isso, devemos procurar o máximo de informação que padronize essa busca.

Devemos criar um RegEx dentro dessa requisição, para pegarmos o padrão. Para isso, clicamos com o botão direito na requisição > Adicionar > Pós-Processadores > Extrator de Expressão Regular. O Extrator já configurado ficará assim:

Nome de Referência é o valor da sua varíavel. Queremos guardar o caminho para o link em que clicarmos no menu. Por exemplo, “/concursos/” do primeiro script. Portanto, o nome escolhido foi LinkAleatorio.
Expressão Regular é o RegEx que criamos para pegar o link. O padrão é <a href=” , seguido do valor que queremos, e o final com “ onClick. O (.+?) significa que queremos pegar tudo que está depois do caracter que precede esse escrito e finalize no primeiro valor que combine com o resto da Expressão Regular – no caso “ onClick.
Essa explicação é bem técnica e complicada, mas há uma documentação bem completa no site do JMeter, que pode ser acessada por aqui.
O modelo é referente aos dados que vamos pegar, já que podemos parametrizar mais partes dentro da expressão regular. Se quisermos apenas um dado, será sempre esse o Modelo. O número para combinação em zero significa que, dentre todas as possibilidades daquele menu, uma será escolhida aleatoriamente. Se quiséssemos o 8º link do menu sempre, era só colocar o valor 8. E o valor padrão é para, se ocorrer algum erro, sabermos em qual RegEx foi.
Agora precisamos usar o link que pegamos pelo RegEx no nosso script. Nesse caso, como é um acesso a um link, devemos substituí-lo nas duas requisições do nosso script que referiam a página “/concursos”. Para isso, devemos clicar nessas duas requisições e substituir pelo nome da variável, como na imagem:

Devemos alterar também o Nome do servidor, já que o concursos redireciona para www2.ufmg.br.
Agora é só rodar o script, juntar as informações geradas pelo relatório e criar suas análises. Teste de Desempenho é uma área que ainda não é tão abordada no cenário de testes e portanto difícil de ser introduzida no meio. O foco dessa série de posts é exatamente trazer mais informações dessa área através de um tutorial da ferramenta mais utilizada. Vou acompanhar o feedback de vocês e,  quem sabe, trazer mais informações desse assunto.

Até um próximo post. =)

0 comentários
  1. Boa tarde Alexandre.
    Tenho pesquisado pleo Jmeter e achei bem interessante seus dois posts sobre o tema.
    Tenho um cenário na empresa e como sou inexperiente na area de testes estou enfrentando alguns problemas.
    Minha empresa possui um sistema desktop com o banco de dados de cada cliente local em seu ambiente. Porem ela está migrando todos os bancos que ficam localmente nos clientes para um servidor na nuvem. Minha dúvida é se eu consigo utilizar o Jmeter para realizar teste de performance neste servidor, pois só vi exemplos em sistemas web.
    Obrigado e parabens pelos posts

    1. Boa tarde Lucas !
      Muito legal ouvir um elogio sobre o post ! Espero que te ajude!
      Então, eu trabalhei há um tempo em uma empresa no qual os computadores não aguentavam uma quantidade grande de carga pra testar servidores de clientes. A nossa solução era alugar uma máquina na AWS da Amazon. O serviço era a Amazon EC2. Veja que nesse caso o problema era um pouco pior que o seu, já que tinham 3 máquina comunicando entre si. O que faziamos era instalar o ambiente com JMeter e todos os requisitos pra ele funcionar, e executava remoto os scripts nas máquinas dos clientes.
      Resumindo a história , é perfeitamente possível sim fazer esse tipo de teste em servidor. Não entendi muito bem se o seu problema está em fazer um teste remoto – e ai o problema se resolve com alguns parâmetros passados por linha de código – ou se não estar testando uma aplicação web. Eu já fiz um teste sobre acesso em banco, e uma possibilidade é fazer uma requisição HTTP que acessa esse banco de uma forma, e crescer essa carga.
      Espero que eu tenha conseguido esclarecer um pouco essa sua dúvida!
      Abração!

      1. É porque como não conheço a ferramenta (nunca trabalhei com ela e estou a estudando agora através de pesquisa) não sei muito bem suas características e funções.
        Vi que é possível gravar as ações feitas no navegador configurando seu proxy com o Jmeter para que ele execute exatamente o que foi gravado e colete os dados do trafego. É possível usar essa funcionalidade (de gravar as ações) realizando o teste no servidor e não em um sistema web?
        Muito obrigado pelo feedback e abraço.

        1. Ah sim Lucas, entendi.
          O JMeter é uma ferramenta com inifinitas possibilidades, mas dessa forma básica assim que é gravando por proxy, só se seu servidor conseguir gravar essas requisições num proxy. Pra isso provavelmente o ambiente do JMeter deveria estar em nuvem também. Tem que ser avaliado essa possibilidade ai, não sei te falar ao certo sem ver.
          Mas nesses casos eu normalmente gero na mão a requisição. Pela URL , configurar se é um GET ou um POST, etc. Seu Desenvolvedor provavelmente consegue te falar como montar essa requisição. Uma ferramenta que pode te ajudar a gerar essas informações é o Fiddler – Ele é bem mais fácil de aprender que o JMeter , então acredito que tem mais documentação sobre. Mas é bem provável que seu Dev consiga te ajudar nisso.
          Abração! Fica a vontade pra comentar aqui e me procurar nas redes sociais também !

          1. Valeu demais mais uma vez Alexandre.
            Aproveitando, Sabe me dizer até quantos usuários virtuais o JMeter consegue simular?

          2. Não precisa agradecer Lucas! Muito legal ajudar nem que seja com pouca coisa na sua dúvida!
            Cara eu nunca fui limitado pelo JMeter, sempre pela capacidade do meu computador. Na pasta do JMeter existe um arquivo chamado \”jmeter.properties\” que tem algo relacionado a sua memória do PC usada pra criar os testes. Se não me engano o padrão é 1024 de RAM. Eu costumo colocar 4098 em um computador de 8GB, mas vai da sua máquina. Um teste que não suporta esse número absurdo de UV\’s, começa a dar muitos erros, mas o serviço não cai, e você começa a perceber que é limitação da sua máquina.
            Uma coisa que já fiz muito é dividir a carga em várias máquinas (se a empresa que você trabalha tiver essa condição) e dispará-las simultaneamente. Portanto se seu PC aguenta 300 usuários virtuais por exemplo, e você precisa de 900, você pode disparar em 3 máquinas ao mesmo tempo. Lembre sempre de guardar os resultados para agrupá-los mais tarde. Se você abrir os arquivos no Relatório Agregado do JMeter, um por um, ele vai agrupar em um único arquivo e você consegue ter todos esses dados consolidados como se tivesse sido executado em uma única máquina.

  2. Grande alexandre, boa tarde! Excelente artigo! Porém, fiquei um pouco perdido, pela seguinte razão: sou deficiente visual, verifiquei que o artigo possui imagens, dificultando o meu entendimento de algumas questões. Caso possível, poderia alterar o artigo com a descrição do que consta na imagem? Ajudaria muito à nós, deficientes visuais que trabalhamos com tecnologia! Um abraço, e, estamos aqui!Parabéns pelo artigo. Uma sugestão à mais, seria; como rodar o jmeter no jenkin? vi que tem plugin do jenkins pra ele, já instalei, e sei que, tem como colocar os resultados no post-build.

    1. Boa tarde Juliano! Primeiramente, muito obrigado pelo elogio! O feedback de vocês é muito legal pra nós pensarmos em mais conteúdos desse assunto.
      Agora sobre o que você falou, muito obrigado novamente. A gente não tinha pensado em quão diversificado nosso público era e o fato de saber que temos leitores deficientes visuais vai fazer com que a gente seja mais cuidadoso quando escrever um post com imagens pra sermos mais inclusivos. Minha mãe é recém formada em terapia ocupacional e sei como é complicado a inclusão de uma série de deficiências no contexto social de forma geral.
      Sobre suas dúvidas, vou te mandar um e-mail detalhado mais tarde de como proceder descrevendo as imagens. E espero que quem estiver com a mesma dificuldade por conta das imagens, me mande um email em [email protected] para que eu encaminhe esse e-mail.
      Mais uma vez, obrigado Juliano, espero que com o e-mail você consiga realizar o tutorial com sucesso!
      Sobre sua dúvida com o Jenkins, eu nunca usei o JMeter com uma integração contínua, mas já li um pouco sobre e sei que é possível. Pode ser até o tema de um próximo post.
      Em resumo do que eu sei, você tem que gerar um arquivo bat que dê os comandos para executar seu script no JMeter, passando os parâmetros de onde gravar os resultados também.
      Prometo pesquisar mais e em breve criar um post sobre isso!
      Sucesso Juliano!

      1. grande Alexandre!recebi o e-mail, e, me ajudou muito nestas questões. atuo com testes de acessibilidade web(apra pessoas com deficiencia visual), tanto para web e mobile, se precisarem, posso pensar em fazer um pequeno artigo sobre acessibilidade web(dou consultoria também se precisarem), em testes de acessibilidade, manuais e automatizados. Esta questão de acessibilidade é muito importante hoje em dia. Sobre o Jenkins com o jmeter, soube que, tem que salvar em xml os resultados, e, com o plugin do jenkins já instalado para o jmeter, é só chamar o resultado gerado em xml.

        1. Que ótimo Juliano! Muito legal saber que consegui resolver suas dúvidas. Te mandei um e-mail pra gente conversar sobre esse artigo.
          A questão do jenkins vou pesquisar e tentar trazer um post sobre isso, e dessa vez com as imagens já explicadas! Promessa hehe!
          Abração

  3. Oi, Alexandre!
    Parabéns pelo post.
    Uma dúvida: eu posso cadastrar dados em um formulário usando o Jmeter?
    Por exemplo: acesso uma URL, quero usar um arquivo CSV, para inserir os dados para cadastrar um usuário.
    Será que é possível?
    Obrigada!
    Ana

    1. Muito obrigado Ana!
      É possível usar um csv sem problemas.
      Só ir em Adicionar > Elementos de configuração > Configuração dos dados CSV.
      Em nome do arquivo você deve passar o caminho. Eu acho legal por na pasta bin do JMeter, que ai você só poe arquivo.csv no nome, caso contrário você tem que passar o caminho DesktopAna…arquivo.csv
      Em nome das variáveis, você tem que dar o nome da varíavel(obviamente hehe) por exemplo no seu caso, o cadastro seria Nome,Endereço e cpf, cada linha sua deve estar no seguinte formato:
      Ana;Rua Exemplo;0000000000
      Ana1;Rua Mais um exemplo;11111111
      Sendo um por linha. E em \”nome das variáveis\” você separa por virgula. Porém em \”separador\” você troca a vírgula por ponto e vírgula(assim como no seu csv).
      Pra usar isso, você vai na requisição de cadastro com as varíaveis e coloca o nome das variáveis dentro de \”${}\” sendo todas iguais ao CSV.
      Se eu não tiver sido claro me fala que tentamos por outro lugar !
      Espero ter ajudado,
      Alexandre.

    1. Oi Kerlen. Perdão a demora pra responder a sua dúvida.
      Eu sempre usei o JMeter para aplicações web. Mas fiz uma pesquisa rápida e vi que é possível adaptar sim para aplicações desktop. Isso vai depender do que você tá querendo medir dessa aplicação.
      Por exemplo, o seu objetivo é testar o banco de dados envolvido nessa aplicação?
      Você pode também ter um cliente delphi que conecta ao servidor web usando HTTP. E ai o JMeter consegue simular da mesma forma que foi exposto no tutorial.
      Talvez com mais informações eu possa ser mais assertivo te ajudando.
      Att,

    1. Olá Fernando!
      Muito bacana sua proposta e seria uma honra fazer algo do tipo!
      Vou entrar em contato sim com você nos próximos dias, mas se você acabar lendo aqui antes, pode me mandar um email [email protected] também pra gente entender como seria.
      Fique com Deus!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Talvez você goste desses conteúdos também: