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.

Posts relacionados:

7 thoughts on “Teste de carga utilizando Shell Script

  1. 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,
    Renan.

  2. 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

  3. Olá, gostaria de fazer o mesmo teste, exatamente como vc. Poderia me dar mais detalhes sobre como vc utilizou essa linguagem?

  4. 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.

  5. Morelli, veja quantas pessoas têm necessidade de solucionar problemas iguais ao que você se deparou. Felizmente você foi em busca e conseguiu criar sua ferramenta. Quantas pessoas você poderia ajudar. Já pensou nisso?

    Fica aqui o pedido.
    Um abraço e até a próxima. ;)

  6. Pois é, o problema é que não sei mais onde está o programa que fiz. Hoje não trabalho mais na Univali, e provavelmente o programa tenha ficado no computador que utilizava lá. Fiz dia desses algo semelhante, mas para monitoramento de um serviço específico de um cliente, e não era linux, foi um service para o Windows 2003. Se tiver tempo vou bolar algo em .NET com este objetivo (teste de carga).

    Abraços!

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>