Testes de performance com o utilitário Siege

O aumento no número de usuários e de acessos a uma aplicação Web é uma preocupação central de muitos times de desenvolvimento. A indisponibilidade ou lentidão na operação de um site ou serviço pode resultar em sérias consequências, com ocorrências que variam da perda de inúmeros clientes a prejuízos financeiros significativos. Uma resposta a estes desafios seria a condução de testes automatizados de performance, com o intuito de avaliar o comportamento e até determinar eventuais limites de um sistema.

A execução de testes de performance procura levar em conta uma série de fatores capazes de afetar o desempenho de sistemas Web, fornecendo assim embasamento para que medidas preventivas e/ou corretivas sejam aplicadas. Dentre os aspectos considerados estão tempos de resposta, número de usuários simultâneos em um período específico de tempo, nível de utilização de recursos e taxas de transferência (throughput).

São inúmeras as ferramentas que tornam possível a realização de testes deste tipo. Uma alternativa simples e gratuita neste sentido seria o utilitário Siege, um aplicativo de linha de comando que permite simular cenários em que múltiplos usuários acessam concorrentemente um recurso em uma solução Web.

O objetivo deste artigo é apresentar em linhas gerais o utilitário Siege, através de um exemplo prático que será detalhado mais adiante.

Instalação

Para efetuar o download da versão para Windows do utilitário Siege acessar o seguinte link:

https://code.google.com/p/siege-windows/

O arquivo em questão encontra-se formato .zip, sendo que tal conteúdo deverá descompactado no diretório C:\siege-windows\. A partir deste ponto o Siege já estará disponível para uso (o exemplo descrito na próxima seção emprega a versão 3.0.5 deste utilitário).

Exemplo de utilização

Para simular um cenário real envolvendo a utilização do Siege será criada uma aplicação Web extremamente simples, baseada no uso do .NET Framework 4.6 e do ASP.NET MVC 5.

Na Listagem 1 é possível observar a implementação da classe TesteController. Este Controller conta com a Action Exemplo, na qual uma chamada ao método Sleep da classe Thread (namespace System.Threading) resultará em um delay proposital de 5 segundos.

Listagem 1: Classe TesteController

using System.Web.Mvc;
using System.Threading;

namespace TesteSiege.Controllers
{
    public class TesteController : Controller
    {
        public ActionResult Exemplo()
        {
            Thread.Sleep(5000);
            return View();
        }
    }
}

Com a aplicação em execução será necessário ativar o Prompt de Comando, acessando a partir deste último o diretório C:\siege-windows. Digitar então a seguinte linha de comando (como visualizado na Imagem 1):

siege -c10 -t30s http://localhost:54936/teste/exemplo

Quanto às configurações informadas para execução do Siege, é possível destacar:

→ O parâmetro -c indica o número de usuários simultâneos que estarão concorrendo no acesso a um mesmo recurso (10 no caso deste exemplo);

→ Já no parâmetro –t foi especificado o tempo durante o qual requisições serão enviadas ao recurso submetido a uma bateria de testes (30 segundos nesta simulação).

Imagem 1. Executando o utilitário Siege via linha de comando

Imagem 1. Executando o utilitário Siege via linha de comando

O resultado deste conjunto de testes pode ser observado na Imagem 2. Analisando esta simulação inicial nota-se, dentre outras informações, que 49 requisições foram processadas.

Imagem 2. Resultado da execução do utilitário Siege

Imagem 2. Resultado da execução do utilitário Siege

Como próximo passo será alterada a classe TesteController (Listagem 2), de forma que a Action Exemplo seja armazenada em cache durante um período de 2 minutos (120 segundos). A intenção com este ajuste (uso do atributo OutputCache) é refazer a bateria de testes executada via Siege, demonstrando assim que a modificação realizada contribuiu para uma melhoria substancial da performance.

Listagem 2: Classe TesteController após ajustes

using System.Web.Mvc;
using System.Threading;

namespace TesteSiege.Controllers
{
    public class TesteController : Controller
    {
        [OutputCache(Duration = 120)]
        public ActionResult Exemplo()
        {
            Thread.Sleep(5000);
            return View();
        }
    }
}

Uma nova execução do Siege com os mesmos parâmetros utilizados inicialmente produzirá um resultado similar ao da Imagem 3, com 486 requisições efetuadas. Este número representa um aumento bastante significativo, sendo consequência direta do uso do mecanismo de cache provido pelo ASP.NET MVC.

Imagem 3. Resultado da execução do utilitário Siege após ajustes em TesteController

Imagem 3. Resultado da execução do utilitário Siege após ajustes em TesteController

Conclusão

Embora um simples utilitário de linha de comando, o aplicativo Siege pode ser extremamente útil em testes que procuram avaliar o desempenho de um sistema frente a situações de uso crescente. Além das opções utilizadas nesta demonstração, uma lista com todos os parâmetros disponíveis pode ser obtida através do mesmo link para download desta ferramenta.

Até uma próxima oportunidade!

Renato Groffe – Consultor em TI, MTAC
https://www.facebook.com/RenatoGroffeSW

Referências

Performance Testing Guidance for Web Applications
https://msdn.microsoft.com/en-us/library/bb924375.aspx

Types of Performance Testing
https://msdn.microsoft.com/en-us/library/bb924357.aspx

Comentarios

comentarios

One Response to Testes de performance com o utilitário Siege
  1. […] Testes de performance com o utilitário Siege http://www.tiselvagem.com.br/geral/testes-de-performan... netcoders.com.br/blog/wcf-web-api-estudo-comparativo