como executar testes distribuídos no JMeter

se você tiver um site de comércio eletrônico (ou qualquer site para esse assunto), não é incomum que você esperaria um nível mais alto de tráfego em determinados dias, como Black Friday, por exemplo. Em momentos como esses, precisamos levar nossos testes de carga para o próximo nível e simular um número maior de usuários simultâneos. Se estivermos executando nossos testes de carga localmente com o Apache JMeter™, há certas limitações para o número de usuários que você pode executar, mesmo que seu computador tenha CPU e memória suficientes.

como podemos criar um cenário com mais de 800 usuários simultâneos usando o JMeter? Uma das respostas é executar o JMeter no modo distribuído. Para aqueles de vocês que nunca ouviram falar sobre isso, aqui está uma breve explicação.

quando falamos em distribuir JMeter, nos referimos a uma arquitetura mestre-escravo onde JMeter usa Java RMI para interagir com objetos em uma rede distribuída. Você pode ver isso na imagem abaixo.

o teste distribuído permite ter um JMeter local (master) que lida com a execução do teste, juntamente com várias instâncias JMeter remotas (slaves) que enviarão a solicitação ao nosso servidor de destino.

mas antes de poder executar o JMeter de forma distribuída, existem algumas etapas simples que você deve executar.

primeiro, precisamos ter vários computadores.

então precisamos fazer com que o servidor JMeter seja executado em cada sistema escravo que temos. Para esse fim, temos que executar o JMeter-server.bat (jmeter-servidor para usuários Unix) que está localizado no jmeter/bin. Depois de executá – lo, devemos ver algo assim:

então, pelo mesmo caminho, mas no sistema mestre, localize o jmeter.propriedades fil. Edite este arquivo e adicione os IPs de todos os sistemas escravos que devem estar envolvidos na propriedade remote_hosts. Certifique-se de que os sistemas mestre e escravo estejam localizados na mesma sub-rede.

É muito importante lembrar que todos os valores devem ser separados por vírgulas (neste exemplo estamos usando apenas um escravo do sistema, apenas para mantê-lo simples).

uma vez que todas essas etapas são realizadas, podemos iniciar o JMeter e executar os testes de que precisamos. Nesse caso, vamos executar o JMeter usando o modo GUI, para que possamos ter uma ideia melhor de como ele funciona. No entanto, o modo Não GUI é altamente recomendado para fins de teste.

o número de usuários, ramp up e iterações devem ser configurados no grupo de threads de sistemas mestre como de costume. Ao executar o teste, essas condições serão replicadas em cada sistema escravo.

Depois de iniciar o JMeter e carregar nosso teste, temos duas opções. Um, configurado através do sistema mestre, é através do início remoto Run – > e, em seguida, selecione o sistema escravo onde queremos executar. O segundo, também configurado através do sistema mestre, é executado – > Início Remoto tudo para iniciar o teste em todos os sistemas escravos disponíveis.

(como definimos apenas um sistema escravo, não há diferença entre as duas opções neste exemplo).

Aqui temos um cenário simples, onde podemos pesquisar e ler um artigo em um site de e-commerce:

Como você pode ver, nós adicionamos um modo de Exibição Resultados da Árvore de escuta para que possamos verificar se o ensaio foi executado corretamente ou não. Quando executamos um teste remotamente, poderemos ver localmente o resultado do teste no ouvinte da árvore de resultados de visualização como já mencionei, mas nos sistemas slave, só podemos observar a hora de início e a hora de término do teste.

Localmente:

Remotamente:

nos bastidores, cada sistema escravo está executando os testes de carga com as condições que definimos no sistema mestre. Dessa forma, estamos alcançando um número maior de usuários simultâneos e, portanto, uma carga maior para nosso servidor de destino.

portanto, se quisermos realmente distribuir a carga, temos que fazer isso manualmente. Por exemplo: se queremos alcançar 10.000 usuários simultâneos e temos 10 sistemas escravos, nosso plano de teste deve ter 1000 usuários, então acabamos tendo 10.000 no total.

outra coisa interessante que podemos fazer é adicionar lógica ao nosso teste adicionando um controlador If. O controlador If nos permite escolher um fluxo específico que queremos executar, dependendo do sistema que está executando o teste. Ao, diferentes sistemas escravos estariam executando diferentes partes do teste.

por exemplo, se adicionarmos um parâmetro ao executar o jmeter-server nos sistemas escravos (./ jmeter-server-Jparam = 1) podemos colocar uma condição como ${__javaScript(${param}==1)} dentro do controlador If, para que possamos executar solicitações específicas dependendo do sistema escravo.

é isso! Nós executamos com sucesso um teste sobre um sistema distribuído JMeter. Isso pode não parecer muito complexo porque escolhemos usar apenas um sistema escravo. Mas se você precisar simular 25.000 usuários simultâneos, o custo de manter todos esses sistemas é enorme. Pode haver uma possível solução alternativa para os problemas de manutenção e isso é montar toda a arquitetura que vimos nos contêineres do Docker (você pode ver um exemplo aqui).

no entanto, isso ainda não será bom o suficiente se nosso objetivo for executar testes de carga periodicamente. Montamos toda a arquitetura distribuída em um computador, por isso estamos consumindo uma quantidade considerável de recursos. O conceito de distribuição do JMeter pelo Docker faz mais sentido se tivermos a possibilidade de aumentar o número de contêineres sob demanda, como em um serviço de computação em nuvem.

outra dificuldade ao executar o JMeter no modo distribuído é como lidar com arquivos CSV quando você tem dados parametrizados em seus testes. Isso ocorre porque precisamos ter arquivos separados e, se tivermos que atualizá-los, precisamos ir a cada sistema escravo e fazer as modificações.

para resolver todas essas limitações e inconvenientes, podemos usar o BlazeMeter, que nos fornece uma maneira fácil de lidar com nossos testes de carga. Tudo o que precisamos fazer é enviar nosso arquivo JMX para o BlazeMeter. Também podemos fazer upload de um arquivo CSV consolidado com todos os dados necessários e o BlazeMeter cuidará de dividi-lo, dependendo da quantidade de mecanismos que definimos.

no BlazeMeter, podemos definir a quantidade de usuários ou a combinação de motores (sistemas escravos) e threads que queremos aplicar aos nossos testes. Também podemos configurar valores adicionais, como vários locais.

resultados dos testes:

é isso! Agora que você viu algumas soluções para executar testes de carga em grande escala, minha recomendação para você é criar sua própria experiência e tomar uma decisão sobre qual opção oferece maiores benefícios.

Saiba mais sobre como usar o JMeter em nossa Academia JMeter gratuita.

Deixe uma resposta

O seu endereço de email não será publicado.