Teste de carga utilizando Shell Script
A algumas semanas atrás, fiquei responsável por realizar testes de carga em uma sistema web da Univali que foi desenvolvido para o processo de Avaliação Institucional, no qual todos os alunos e professores devem preencher um questionário avaliando as disciplinas, os professores, os coordenadores de curso… ou seja, a universidade como um todo.
Fiquei com esta tarefa, pois a alguns anos também sou responsável pelo teste de carga da aplicação responsável pela processo de matrícula via Internet.
A tarefa é “simples”: consiste em monitorar o uso de recursos de todos os servidores envolvidos no processo (servidores web, banco de dados, etc) e aplicar uma carga que deverá simular um número n de usuários efetuando um determinado processo (preenchendo um formulário, navegando em um site, etc) em um período de tempo. O objetivo é dizer quantos usuários simultâneos poderão estar utilizando o sistema com um tempo de resposta aceitável e de forma que os recursos de hardware/software não sejam consumidos completamente.
Esse “número mágico” é utilizado para definirmos se um processo será dividido por grupos de pessoas em vários dias ou se será necessário a adição de mais servidores no farm.
Bem, por que estou escrevendo isso? porque até o início do ano eu costumava utilizar um software da Microsoft para efetuar os testes de carga chamado Web Application Stress Tool. Infelizmente para algumas aplicações web eu não conseguia efetuar o teste corretamente, simulando um usuário real no sistema. Dessa vez tentei evoluir um pouco e decidi fazer a aplicação em Shell Script!
A experiência foi muito boa, confesso que consegui obter um resultado satisfatório e ter uma flexibilidade imensa para criar o programa. Abaixo um descrição de um dos teste executados com 500 usuários simultâneos:
Foram utilizados 500 usuários que efetuaram o processo de login na Intranet no intervalo de 5 minutos. Estava sendo disparado o acesso de exatamente 5 usuários a cada 3 segundos. Após efetuar o login, o “usuário” passava para a tela onde encontram-se os formulários de avaliação institucional e em seguida escolhia o primeiro formulário de avaliação referente a disciplina. Neste ponto foi adicionado um intervalo que varia de 2 a 3 minutos referente ao preenchimento do formulário. Após a conclusão o mesmo era salvo e o usuário escolhia um novo formulário. Este processo se repetiu no total de 8 vezes, sendo 5 para formulários de disciplinas cursadas e 3 referentes ao curso (Curso, coordenador e auto-avaliação). Ao final o usuário efetuava o processo de Logout da Intranet.
Para o teste de cargas utilizei principalmente o curl auxiliado por diversas outras ferramentas encontradas no shell padrão de qualquer distro. Para o monitoramento também foram criados scripts que coletavam informações como uso de CPU, memória, conexões simultâneas, processos do apache em execução e outras informações relevantes.
Acho que é isso… gostaria apenas de compartilhar mais uma idéia que podê ser resolvida com shell scripts. Quem sabe futuramente transformo esse meu conhecimento em uma aplicação mais flexivel e fácil de configurar que suporte “farms” de clientes, geração de gráficos automaticamente (pois usei o Excel pra fazer isso
e mais o que vier na cabeça.
Maurício M. Maia:
Ei, muito legal!!!
Vou tentar fazer algo do gênero para minha próxima aplicação.
Abraços
24 Maio 2006, 11:46 amRenan:
Prezado, tenho que fazer um teste exatamente como o que vc fez , tentei varias ferramentas tais como robot 7(vu) e jmeter, aquele não funcionou para performance em web, este so usa jdbc para conexão com banco o que pode não refletir a realidade da minha aplicação. Por fim, estou usando o Web Application Stress Tool. Vc teria como me enviar mais materiais sobre o assunto o mesmo o seu teste como estudo de caso?
Cordialmente,
5 Novembro 2007, 2:52 pmRenan.
Wilson Luiz Prosdocimo:
Olã, se puder passar mais alguns detalhes de como utilizou as ferramentas, preciso fazer umas optimozações no meu site e na intranet da empresa e preciso realizar este mesmo procedimento que realizou…
Se puder me ajudar, agradeço desde já.
Wilson L. Prosdocimo
13 Fevereiro 2008, 2:42 pmThiago:
Olá, gostaria de fazer o mesmo teste, exatamente como vc. Poderia me dar mais detalhes sobre como vc utilizou essa linguagem?
11 Junho 2008, 11:50 amLuiz Siqueira:
Opa Morelli, vejo que sua solução realmente realiza um teste de carga bem mais preciso, e é exatamente o que muitos precisam. Que tal publicar pra toda comunidade TI, para que cada um adapte a sua situação? Abraço.
4 Setembro 2008, 4:25 pm