O teste de desempenho para geeks... e outros também!

Você desenvolve ou deseja desenvolver software ou aplicativos da Web? Você é engenheiro de TI ou CIO e está trabalhando na revisão de uma ferramenta existente em sua empresa? Você é um terceirizado que trabalha para uma empresa de pequeno ou médio porte?
Em um mercado altamente competitivo, no qual você precisa ser rápido, ou até mesmo o primeiro, com software ou aplicativos da Web de alto desempenho e um site responsivo, o teste de desempenho é obrigatório.
A boa notícia? Existem soluções disponíveis para automatizar essa fase de teste e ajudá-lo na produção.
O appvizer oferece a você uma introdução aos estágios e desafios dos testes de desempenho e às ferramentas existentes.
Teste de desempenho: uma breve visão geral
Listamos os principais testes de desempenho para você, abrangendo critérios funcionais e técnicos, para identificar comportamentos problemáticos do sistema (bugs) e corrigi-los.
Como os vários resultados geralmente se sobrepõem e o tempo e os recursos financeiros são limitados, é raro e inútil combinar todos eles.
Teste de desempenho: definição e objetivos
Os testes de desempenho determinam se um sistema de computador está sendo executado corretamente, medindo seus tempos de resposta.
Seu objetivo é fornecer métricas sobre a velocidade do aplicativo.
Portanto, o teste de desempenho atende a uma necessidade de velocidade por parte dos usuários e das empresas.
No caso dos testes contínuos de desempenho, eles começam logo no início das fases de desenvolvimento e são adaptados a cada estágio do ciclo de vida do aplicativo, até o teste de carga total.
Há vários objetivos, incluindo
- descobrir a capacidade do sistema e seus limites,
- detectar e monitorar os pontos fracos
- otimizar sua infraestrutura e os custos de execução,
- garantir que ele funcione sem erros em determinadas condições de carga,
- otimizar os tempos de resposta para melhorar a experiência do usuário (UX),
- verificar a estabilidade entre a versão de produção e a versão n+1,
- reproduzir um problema de produção,
- antecipar um futuro aumento de carga ou a adição de um novo recurso,
- avaliar a possibilidade de instalar um APM (gerenciador de portfólio de aplicativos),
- garantir que o sistema e seus aplicativos externos de terceiros se comportem corretamente em caso de falha e reconexão etc.
Os testes apresentados a seguir são todos testes de desempenho, realizados em condições específicas.
O teste de desempenho
O teste de desempenho é uma forma mais avançada de teste de desempenho, que determina o desempenho de um sistema de computador medindo seus tempos de resposta às solicitações dos usuários em um contexto realista. Essa distinção existe principalmente em Quebec.
Ele estabelece uma relação entre o desempenho e os recursos usados (memória, largura de banda).
Atende às necessidades dos usuários em termos de velocidade e qualidade.
Teste de carga e escalabilidade
O teste de carga mede o comportamento de um sistema de acordo com a carga esperada de usuários simultâneos, conhecida como população-alvo.
Ao aumentar o número de usuários em etapas, ele procura os limites de capacidade do sistema para validar a qualidade do serviço antes da implementação.
Ele responde à pergunta sobre a carga máxima suportada.
Teste de estresse
Além do teste anterior, esse teste simula a atividade máxima esperada em todos os cenários funcionais, no pico do tráfego, para ver como o sistema reage em um contexto excepcional (explosão no número de visitas, pane etc.).
O teste é executado até que a taxa de erro e os tempos de carregamento não sejam mais aceitáveis.
Essa lista de testes não é exaustiva:
- testes de degradação de transações
- Teste de resistência (robustez, confiabilidade),
- teste de resiliência
- testes de envelhecimento, etc.
A campanha de teste de desempenho
Antes de desenvolver um software, um aplicativo ou um site, é essencial colocar em prática uma metodologia que inclua
- Elaboração de especificações e definição de objetivos,
- a criação da equipe do projeto web
- planejamento, incluindo as fases de teste
- avaliação, etc.
Durante todo o processo de desenvolvimento, a produção é monitorada.
Trata-se de um monitoramento contínuo e em tempo real de um ambiente de TI, para permitir uma reação rápida aos problemas encontrados pelo ecossistema.
Isso difere do monitoramento de tendências, no qual os dados são historiados para fornecer uma visão de longo prazo do uso do sistema, das funções preferidas etc.
Gerenciamento de projetos da Web
Os métodos ágeis estão se tornando cada vez mais populares para projetos da Web, em particular o método Scrum, que estabelece :
- funções definidas
- um ritmo iterativo (testes repetidos e comparados),
- reuniões precisas e com tempo limitado
- planejamento de sprints curtos,
- uma abordagem orientada por testes, que consiste em estabelecer regras de teste antes da codificação,
- gráficos de progresso, etc.
O gerente de projetos da Web apoia sua equipe na definição de objetivos e na execução da campanha de testes.
Ele implementa ajustes para melhorar o comportamento do aplicativo, analisa possíveis causas de lentidão com os desenvolvedores e valida o monitoramento com a produção.
É importante que a equipe do projeto (desenvolvedores da Web, designers da Web, gerentes de tráfego, gerentes de produto, gerentes de projeto) inclua membros da equipe de criação e da equipe de execução, para que eles tenham uma visão de A a Z do projeto.
Esses diferentes participantes ajustam os testes para produção de acordo com sua experiência e o contexto.
Outras práticas recomendadas são recomendadas para um bom gerenciamento de projetos da Web, incluindo :
- Realizar uma prova de conceito (POC), um método para garantir que o processo geral seja compreendido e definir as funções de todos os envolvidos;
- Planejar períodos de experiência durante os quais as equipes de execução assumem o controle no final da produção, com o suporte técnico das equipes de construção.
Algumas etapas importantes em uma campanha de teste
Antes de começar, é importante garantir que a cadeia de testes seja automatizada no início, que os dados sejam coletados e que os relatórios sejam gerados usando a ferramenta certa.
Também é essencial definir e calibrar os cenários para que eles sejam representativos do uso esperado em um determinado período.
Etapa 1 - Identificação do ambiente de teste e do escopo:
- os componentes que estão sendo testados (frente, verso, armazenamento),
- as páginas que estão sendo testadas
- Arquitetura SOA (dependências entre subsistemas),
- restrições da arquitetura (equipamento de rede, cache distribuído, etc.);
Etapa 2 - Determinação dos critérios de aceitação (requisitos):
- concorrência de acesso/throughput (número de usuários simultâneos),
- tempo de resposta
- tempo de exibição,
- recursos utilizados;
Etapa 3 - Projeto do cenário :
- Lançado quando há dados suficientes para avaliar,
- documentados clique a clique para que possam ser reproduzidos de forma idêntica,
- Inicialmente simplificado (warm test) para validar a consistência da infraestrutura,
- divididos por tipo de usuário e funcionalidade, etc;
Etapa 4 - Configuração do ambiente de teste:
- Configuração de sondas (agentes de medição) em cada componente,
- levando em conta sua influência na operação do sistema;
Etapa 5 - Execução dos testes:
- com injetor de carga e cenário,
- coleta de métricas;
Etapa 6 - Analisar os resultados e executar novamente os testes:
- encontrar os padrões (cenários) que impedem a execução adequada do sistema e o componente em questão,
- elaboração de um diagnóstico.
Escolha das métricas (indicadores-chave)
Não se deve selecionar muitas de uma só vez, caso contrário, corre-se o risco de não monitorar nada adequadamente e perder de vista o objetivo da campanha de teste.
Há dois tipos de métricas: comerciais e técnicas.
Métricas comerciais:
- o número de transações,
- o número de páginas consultadas,
- o tempo de resposta de um recurso ou página (registro, pagamento),
- o recurso usado com mais frequência,
- o número de usuários simultâneos,
- o número de operações por unidade de tempo, etc.
Métricas técnicas:
- Carga da CPU : carga na Unidade Central de Processamento, ou seja, a carga do processador (ocupação em % e/ou tempo de carga),
- atividade média do sistema (média de carga),
- atividade de rede (largura de banda consumida),
- atividade e ocupação do disco,
- uso da memória (uso da RAM),
- transferência de dados durante o teste (taxa de transação ou throughtput),
- atividade do banco de dados,
- acertos e erros do cache Varnish (comportamento do servidor de cache HTTP), etc.
Software de teste de desempenho
Uma ferramenta de gerenciamento de teste de desempenho geralmente inclui :
- Um injetor de carga (ou gerador de carga, mecanismo de carga) que simula as ações do usuário e a carga resultante.
Essas ações são definidas e, em seguida, registradas em programas (scripts) que automatizam os cenários.
O injetor sempre tem uma API (interface de programação) para gerenciar solicitações HTTP/HTTPS ou até mesmo outros protocolos (SQL, Websocket, Citrix, JMS etc.).
Há muitas referências na Web a esses quatro pacotes de software de teste de carga de código aberto: Gatling, Apache JMeter, ApacheBench e NeoLoad, que complementam uma solução global de gerenciamento de testes.
Por exemplo, o NeoLoad é uma plataforma de teste de carga que permite :
- simular a atividade do usuário
- monitorar o desempenho do servidor,
- automatizar testes com seu servidor de integração contínua,
- gerar status automáticos de falha/sucesso com base em seus níveis de serviço,
- otimizar a colaboração,
- reduzir as fases de construção/teste e garantir a qualidade.
2. Sondas, colocadas no nível do sistema-alvo e de seus componentes, para fornecer feedback sobre o comportamento deles.
É aconselhável usar interfaces de programação que estejam disponíveis nativamente nos componentes técnicos, pois o uso de agentes pode atrapalhar a operação ideal do sistema.
Por que adotar um software de gerenciamento de testes?
As soluções de teste de desempenho simplificam e automatizam os testes:
- criam cenários de teste
- configuram-nos com ou sem scripts (programa dedicado),
- Simulam usuários virtuais e coletam medições,
- Comparam os dados enviados pelo injetor e coletados pelas sondas,
- geram relatórios automaticamente, para uso por não especialistas, com base nas métricas.
Se você se sentir confortável com a programação, poderá optar por um software de código aberto, mas para os novatos, um software profissional economizará muito tempo e lhe dará tranquilidade.
Foco no SpiraTest
Publicado pela Inflectra, o SpiraTest é mais do que apenas uma solução on-line de gerenciamento de testes de software; é também uma ferramenta colaborativa de gerenciamento de versões e de projetos na Web.
A partir de sua plataforma exclusiva, você pode gerenciar todos os seus requisitos, testes e incidentes, garantindo total rastreabilidade durante todo o ciclo de testes.
Ele permite que você desenvolva cenários de teste, execute-os e automatize-os, além de configurar todos os seus campos de teste e critérios upstream.
Seus recursos colaborativos permitem que bugs e incidentes sejam atribuídos e rastreados, e que relatórios de atividades sejam criados e distribuídos.
Você pode inserir e planejar seus requisitos por módulo, agrupá-los, priorizá-los e, em seguida, planejar os lançamentos de diferentes versões por sprint (período definido).
Assista ao vídeo de demonstração:
Benefícios adicionais:
- Acesso em tempo real de qualquer terminal (computador, tablet, smartphone),
- Hospedagem de seus dados na área geográfica de sua escolha,
- um número ilimitado de testes, requisitos, tarefas e usuários,
- assinatura eletrônica,
- vários aplicativos conectados, incluindo Redmine, NeoLoad (injetor de carga), etc,
- Suporte a 5 idiomas: francês, inglês, espanhol, português e polonês,
- Reversibilidade total dos dados,
- backup diário.
Descubra mais ferramentas de gerenciamento de testes em nossa página Gerenciamento de testes de software, bem como em nossa página Supervisão de aplicativos. Entre elas estão APM, Dynatrace, Equafy, Octoperf, Pandora FMS, RG Supervision, Runscope e TestLaucher.
Artigo traduzido do francês