Neste post exploro o conceito de testes de carga e passo um gosto de como o Visual Studio Team System (VSTS) automatiza o processo.
Como um desenvolvedor de aplicações pode saber se seu web site agüenta uma determinada carga de usuários? Uma solução interessante para isso é a realização de testes de carga. Mas o que são testes de carga?
Se você procurar pelo Guia de Testes da metodologia Pro.NET, irá encontrar a seguinte definição: “Um teste de carga é aquele que procura avaliar a resposta do sistema em condições extremas de carga de informações. Um teste de carga pode ser compreendido como um teste de performance voltado para a avaliação do sistema, especificamente, em condições extremas ou de limite (boundary conditions), como numa sobrecarga no cadastramento de clientes, por exemplo.”.
Uma vez entendida a definição, vem o problema: como simular milhares de usuários acessando uma aplicação web para checar se a mesma dá conta do recado? Certamente uma das opções menos viáveis é convocar todos os figurantes do Senhor dos Anéis e dar a cada um computador e o link a ser acessado. Mesmo que isso fosse feito, ainda teríamos outro problema: configurar o modo em que cada um dos figurantes vai acessar os site para que essa massa de testadores reflita o perfil dos futuros visitantes do seu site. Repetir o teste seria um pesadelo.
Qual uma melhor solução? Em muitos posts passados eu me referi a como a “automação no desenvolvimento” é produtiva e pode ser feita através de geradores de código, por exemplo. Felizmente, não é apenas o desenvolvimento que pode ser automatizado. Existem algumas ferramentas que nos provêm a automação de testes, e o Visual Studio Team System (Tester Edition) é uma delas.
Vejamos um apetitivo do que a ferramenta pode fazer, em dois passos.
1. O primeiro passo é criar um novo projeto do tipo “teste web”. Quando você mandar rodar o teste, o VSTS irá então gravar as ações que você fizer no browser. A figura abaixo ilustra o processo.

2. Depois pode ser criado um novo teste, dessa vez do tipo “teste de carga”. Esse teste irá utilizar um wizard (exibido abaixo) para configuar como o teste web anterior será reproduzido.

Através desse wizard, você pode passar informações de configuração muito úteis para o seu teste, como:
- Duração total do teste
- Número de usuários a serem simulados
- Número de requisições por segundo
- Variação do tipo do browser (ex.: X% IE6, Y% outros)
- Variação do tipo da conexão
- Distribuição do número de acessos (por exemplo, uma distribuição normal em que no início e no final há poucos acessos, enquanto no meio-tempo há muitos).
- Think time (tempo médio que os usuários ficam “pensando” antes de clicar em alguma coisa).
- ...
E não para por aí; os tipos de informações que podem ser coletadas são imensas! Em seguida, o teste será criado e você pode mandar reproduzi-lo. Em tempo real, gráficos irão sendo exibidos e atualizados no próprio VS.NET, como mostra a figura abaixo.

Você pode, a qualquer momento, adicionar ou retirar do gráfico um item ou contador (counter) em observação (como tempo médio de resposta, threads ativas no servidor, etc.). O resultado do teste pode ser gravado e, caso você não saiba como interpretá-lo, você pode solicitar ajuda para o VS.NET lhe informar o que está bom, o que está em alerta e o que está ruim. Para isso, basta informar o nível de “severidade de interpretação” que você deseja.
Em resumo, o VSTS oferece muitos recursos para você garantir minimamente o funcionamento de seu web site na hora da carga. Reparem que eu digo “na hora da carga”, e não “na hora do stress”, porque testes de stress são outra história e merecem um outro post...
[]s
-- AFurtado