Teste de carga com JMeter – Criando o primeiro script

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