Recomendações para testes de desempenho

Aplica-se a esta recomendação de lista de verificação de Eficiência de Desempenho do Azure Well-Architected Framework:

PE:06 Testar o desempenho. Efetue testes regulares num ambiente que corresponda ao ambiente de produção. Compare os resultados com os destinos de desempenho e a referência de desempenho.

Este guia descreve as recomendações para testes. Os testes de desempenho ajudam-no a avaliar a funcionalidade de uma carga de trabalho em vários cenários. Envolve testar o tempo de resposta, débito, utilização de recursos e estabilidade da carga de trabalho para ajudar a garantir que a carga de trabalho cumpre os requisitos de desempenho.

Os testes ajudam a evitar problemas de desempenho. Também ajuda a garantir que a carga de trabalho cumpre os contratos de nível de serviço. Sem testes de desempenho, uma carga de trabalho pode experimentar degradaçãos de desempenho que muitas vezes são evitáveis. O desempenho da carga de trabalho pode desviar-se dos destinos de desempenho e das linhas de base estabelecidas.

Definições

Termo Definição
Teste de caos Um teste de desempenho que visa testar a resiliência e a estabilidade de um sistema ao introduzir deliberadamente falhas ou interrupções aleatórias e imprevisíveis.
Teste de carga Um teste de desempenho que mede o desempenho do sistema sob carga típica e pesada.
Linha de base de desempenho Um conjunto de métricas que representam o comportamento de uma carga de trabalho em condições normais, conforme validado por testes.
Teste de stress Um teste de desempenho que sobrecarrega um sistema até este se partir.
Teste sintético Um teste de desempenho que simula pedidos de utilizador numa aplicação.

Principais estratégias de design

Os testes de desempenho ajudam-no a recolher dados mensuráveis numa carga de trabalho. Quando executa testes suficientemente cedo, também o ajudam a criar cargas de trabalho de acordo com as especificações certas. Deve realizar testes de desempenho o mais cedo possível no ciclo de vida de desenvolvimento de software. Os testes antecipados permitem-lhe detetar e corrigir problemas de desempenho anteriormente no desenvolvimento. Pode utilizar uma prova de conceito (POC) se o código de produção não estiver pronto.

Preparar o teste

Preparar testes de desempenho refere-se à configuração e organização dos recursos, configurações e cenários de teste de que precisa para realizar testes de desempenho de forma eficaz.

Definir critérios de aceitação

Os critérios de aceitação especificam os requisitos de desempenho que uma carga de trabalho tem de cumprir para serem considerados aceitáveis ou bem-sucedidos. Defina critérios alinhados com os destinos de desempenho.

Reveja os destinos de desempenho. Os destinos de desempenho definem o nível de desempenho pretendido para a carga de trabalho. Reveja os destinos de desempenho estabelecidos para a carga de trabalho. Os destinos de desempenho são métricas que podem envolver tempo de resposta, débito, utilização de recursos ou outros indicadores de desempenho relevantes. Por exemplo, pode ter um destino para o tempo de resposta estar abaixo de um determinado limiar, como menos de 2 segundos.

Definir critérios de aceitação. Traduza os destinos de desempenho em critérios de aceitação específicos que pode utilizar para avaliar o desempenho da carga de trabalho. Por exemplo, suponha que o seu destino de desempenho para o tempo de resposta é de 2 segundos ou menos. O critério de aceitação pode ser O tempo médio de resposta da carga de trabalho deve ser inferior a 2 segundos. Utilize estes critérios de aceitação para determinar se a carga de trabalho cumpre o nível de desempenho pretendido.

Quando define critérios de aceitação, é importante concentrar-se nos utilizadores e nas respetivas expectativas. Os critérios de aceitação ajudam a garantir que o trabalho entregue satisfaz as necessidades e os requisitos dos utilizadores. Tenha em atenção as seguintes considerações para incorporar a perspetiva do utilizador em critérios de aceitação:

  • Requisitos do utilizador: compreenda as necessidades e objetivos do utilizador para a carga de trabalho. Considere o desempenho da carga de trabalho para satisfazer estes requisitos.

  • Experiência do utilizador: defina critérios de aceitação que capturem a experiência de utilizador pretendida. Inclua fatores como o tempo de resposta, a usabilidade, a acessibilidade e a satisfação geral.

  • Requisitos funcionais: resolva a funcionalidade específica que o utilizador espera ver na carga de trabalho. Defina critérios de aceitação em torno destes requisitos funcionais para ajudar a garantir que são cumpridos.

  • Casos de utilização: considere diferentes cenários ou casos de utilização que o utilizador possa encontrar. Defina critérios de aceitação com base nestes casos de utilização para validar o desempenho da carga de trabalho em situações reais.

Definir limiares de aceitação. Determine os limiares dentro dos critérios de aceitação que indicam se a carga de trabalho cumpre os objetivos de desempenho. Estes limiares definem o intervalo aceitável de desempenho para cada métrica. Por exemplo, suponha que o critério de aceitação do tempo de resposta é inferior a 2 segundos. Pode definir o limiar em 2,5 segundos. Este nível indica que qualquer tempo de resposta ao longo de 2,5 segundos é considerado um problema de desempenho.

Definir critérios de passagem. Estabeleça os critérios para determinar se a carga de trabalho passou ou falhou no teste de desempenho. Pode definir a passagem como cumprir todos os critérios de aceitação ou alcançar uma determinada percentagem dos mesmos.

Selecionar o tipo de teste

Para selecionar o tipo certo de teste de desempenho, é importante alinhar o teste com os critérios de aceitação. Os critérios de aceitação definem as condições que têm de ser cumpridas para que um requisito ou correção de erros seja considerado concluído. Os testes de desempenho devem ter como objetivo verificar se uma carga de trabalho cumpre estes critérios de aceitação e funciona conforme esperado em condições especificadas. Alinhar o tipo de teste de desempenho com os critérios de aceitação ajuda a garantir que o teste se concentra em satisfazer as expectativas de desempenho que os critérios definem.

  • Compreender os critérios de aceitação. Reveja os critérios de aceitação do requisito ou correção de erros. Os critérios descrevem as condições e funcionalidades específicas a cumprir.

  • Identificar métricas de desempenho relevantes. Com base nos critérios de aceitação, determine as métricas de desempenho que são fundamentais para alcançar os resultados pretendidos. Por exemplo, se os critérios de aceitação se concentrarem no tempo de resposta, a atribuição de prioridades aos testes de carga poderá ser adequada.

  • Selecione um tipo de teste adequado. Avalie os tipos de teste disponíveis e escolha aquele que melhor se alinha com as métricas de desempenho identificadas e os critérios de aceitação.

A tabela seguinte fornece uma amostra dos tipos de teste e dos respetivos casos de utilização.

Tipo de teste Description Caso de utilização
Teste de carga Simular cargas de utilizador realistas para medir o desempenho da carga de trabalho em cargas de trabalho de pico esperadas. Determina a tolerância à carga.
Teste de stress Empurre a carga de trabalho para além dos limites normais para identificar os pontos de interrupção e medir a capacidade de recuperação. Determina a resiliência e a robustez.
Teste de imersão (testes de resistência) Execute a carga de trabalho sob cargas elevadas sustentadas durante um período prolongado para identificar problemas de degradação do desempenho, fugas de memória ou recursos. Avalia a estabilidade e a fiabilidade ao longo do tempo.
Teste de pico Simular aumentos repentinos na carga do utilizador para avaliar a forma como a carga de trabalho lida com alterações abruptas na procura. Mede a capacidade de dimensionar e manter o desempenho durante os períodos de pico.
Testes de compatibilidade Teste o desempenho da carga de trabalho em várias plataformas, browsers ou dispositivos. Ajuda a garantir um desempenho consistente em vários ambientes.

Dê prioridade aos tipos de teste selecionados com base nas características e requisitos da carga de trabalho. Considere fatores como a importância das métricas de desempenho, expectativas dos utilizadores, prioridades empresariais e problemas ou vulnerabilidades conhecidos.

Selecionar ferramentas de teste

Escolha as ferramentas adequadas com base no tipo de teste de desempenho que pretende executar. Avalie a infraestrutura, os recursos e as restrições do ambiente de teste. Selecione ferramentas de teste que suportem os tipos de teste pretendidos e forneça as funcionalidades necessárias para monitorização, medição, análise e relatórios.

Uma ferramenta de monitorização do desempenho de aplicações (APM) fornece informações aprofundadas sobre aplicações e é uma ferramenta de teste essencial. Ajuda-o a rastrear transações individuais e a mapear os respetivos caminhos através de vários serviços de carga de trabalho. Após o teste, deve utilizar a ferramenta APM para analisar e comparar dados de teste com a linha de base de desempenho.

Utilize ferramentas de criação de perfis para identificar estrangulamentos de desempenho no seu código. A criação de perfis ajuda a identificar áreas do código que consomem mais recursos e precisam de otimização. Fornece informações sobre o tempo de execução e a utilização da memória de diferentes partes do código.

Os passos seguintes podem ajudá-lo a selecionar as ferramentas de teste adequadas:

  • Identificar os requisitos de teste. Comece por compreender os requisitos específicos dos testes de desempenho. Considere vários fatores:

    • O tipo de carga de trabalho
    • Métricas de desempenho a medir, como o tempo de resposta e o débito
    • A complexidade da arquitetura da carga de trabalho
    • O ambiente de teste, como baseado na cloud, no local ou híbrido
  • Ferramentas de teste de investigação. Realize pesquisas para identificar ferramentas de teste de desempenho alinhadas com os seus requisitos. Considere as ferramentas comerciais e open source disponíveis no mercado. Procure ferramentas que suportem os tipos de teste de desempenho pretendidos, como testes de carga ou testes de stress, e que forneçam funcionalidades para medir as métricas de desempenho.

  • Avaliar funcionalidades da ferramenta. Avalie as funcionalidades fornecidas por cada ferramenta de teste. Procure capacidades como a simulação do comportamento realista do utilizador e a escalabilidade para lidar com grandes cargas de utilizador. Considere o suporte para vários protocolos e tecnologias, integração com outras ferramentas ou arquiteturas de teste e capacidades de relatórios e análise.

  • Considere a compatibilidade e a integração. Determine a compatibilidade das ferramentas de teste com a infraestrutura e as tecnologias existentes. Certifique-se de que as ferramentas podem ser facilmente integradas no seu ambiente de teste e pode comunicar com a carga de trabalho necessária para monitorização e análise.

  • Avalie o custo e o licenciamento. Avalie a estrutura de custos e os termos de licenciamento associados às ferramentas de teste. Considere fatores como o investimento inicial, os custos de manutenção e os custos de suporte. Considere também outros requisitos de licenciamento que dependem do número de utilizadores ou utilizadores virtuais.

  • Conduzir uma POC. Selecione algumas ferramentas que parecem ser as mais adequadas com base na sua avaliação. Realize uma POC de pequena escala para validar a usabilidade, as funcionalidades e a eficácia das ferramentas no seu cenário de teste específico.

  • Considere o suporte e formação. Avalie o nível de suporte e preparação fornecido pelo fornecedor ou comunidade da ferramenta. Determine a disponibilidade de documentação, tutoriais e canais de suporte técnico para ajudar com quaisquer desafios ou problemas que possam surgir durante o processo de teste.

Criar cenários de teste

A criação de cenários de teste refere-se ao processo de conceção de situações ou condições específicas adequadas para testar o desempenho de uma carga de trabalho. Os cenários de teste são criados para emular o comportamento realista do utilizador e os padrões de carga de trabalho. Estes cenários fornecem uma forma de os testadores de desempenho avaliarem o desempenho da carga de trabalho em várias condições.

Os cenários de teste permitem replicar vários padrões de carga de trabalho, tais como acesso simultâneo ao utilizador, períodos de carga de pico ou sequências de transações específicas. Ao testar a carga de trabalho em diferentes padrões de carga de trabalho, pode identificar estrangulamentos de desempenho e otimizar a alocação de recursos.

  • Definir o comportamento do utilizador. Emular padrões realistas de carga de trabalho e comportamento do utilizador ao identificar os passos e as ações que os utilizadores realizam quando interagem com a carga de trabalho. Considere atividades como iniciar sessão, realizar pesquisas, submeter formulários ou aceder a funcionalidades específicas. Divida cada cenário em passos e ações específicos que representam a interação do utilizador com a carga de trabalho. Pode incluir navegar em páginas, realizar transações ou interagir com vários elementos da carga de trabalho.

  • Determinar o envolvimento dos dados. Identifique os dados de teste necessários para executar os cenários de teste. Pode incluir a criação ou geração de conjuntos de dados realistas que representam vários cenários, perfis de utilizador ou volumes de dados. Certifique-se de que os dados de teste são diversos e abrange diferentes casos de utilização para fornecer uma avaliação de desempenho abrangente.

  • Criar scripts de teste. Crie scripts de teste que automatizem a execução dos cenários de teste definidos. Normalmente, os scripts de teste consistem numa sequência de ações, pedidos HTTP ou interações com APIs de carga de trabalho ou interfaces de utilizador. Utilize ferramentas de teste de desempenho ou linguagens de programação para escrever os scripts, tendo em conta fatores como a parametrização, a correlação e o processamento de dados dinâmicos. Valide os scripts de teste para correção e funcionalidade. Depure quaisquer problemas, como erros de script, ações em falta ou incorretas ou problemas relacionados com dados. A validação do script de teste é crucial para ajudar a garantir a execução de testes de desempenho precisa e fiável.

  • Configurar variáveis de teste e parâmetros. Configure variáveis e parâmetros nos scripts de teste para introduzir a variabilidade e simular cenários do mundo real. Inclua parâmetros como credenciais de utilizador, dados de entrada ou aleatoriedade para imitar diferentes comportamentos de utilizador e respostas de cargas de trabalho.

  • Refinar iterativamente scripts. Refine e melhore continuamente os scripts de teste com base nos comentários, nos resultados dos testes ou nos requisitos de alteração. Considere otimizar a lógica do script, a parametrização e o processamento de erros ou adicionar validação e pontos de verificação adicionais.

Configurar o ambiente de teste

Configurar um ambiente de teste refere-se ao processo de configuração da infraestrutura, software e configurações de rede de que precisa para criar um ambiente semelhante ao seu ambiente de produção.

Para configurar o ambiente de teste de uma forma que melhore a eficiência de desempenho, inclua os seguintes passos no processo de configuração:

  • Espelhar o ambiente de produção. Configure o ambiente de teste para se assemelhar ao seu ambiente de produção. Considere fatores como a configuração da infraestrutura, as definições de rede e as configurações de software. O objetivo é garantir que os resultados dos testes de desempenho são representativos das condições do mundo real.

  • Aprovisionar recursos suficientes. Aloque recursos adequados, como CPU, memória e espaço em disco ao ambiente de teste. Certifique-se de que os recursos disponíveis conseguem processar a carga de trabalho esperada e fornecer medidas de desempenho precisas.

  • Replicar condições de rede. Configure as definições de rede no ambiente de teste para replicar as condições de rede esperadas durante a implementação real da carga de trabalho. Tem de incluir protocolos de rede, latência e largura de banda.

  • Instalar e configurar dependências. Instale o software, bibliotecas, bases de dados e outras dependências necessárias para que a carga de trabalho seja executada corretamente. Configure estas dependências para corresponder ao ambiente de produção esperado.

Desvantagem: existem custos associados à manutenção de ambientes de teste separados, ao armazenamento de dados, à utilização de ferramentas e à execução de testes. Conheça o custo dos testes de desempenho e encontre uma forma de otimizar os gastos.

Risco: os dados de produção podem conter informações confidenciais. Sem uma estratégia robusta de limpeza e máscara, arrisca-se a fuga de dados confidenciais quando utiliza dados de produção para testes.

Executar os testes

Execute os testes de desempenho com a ferramenta de teste escolhida. Os testes envolvem medir e registar métricas de desempenho, monitorizar o estado de funcionamento e capturar quaisquer problemas de desempenho que surjam.

Monitorize e recolha métricas de desempenho, como o tempo de resposta, o débito, a utilização da CPU e da memória e outros indicadores relevantes.

Utilize os cenários de teste definidos para colocar a carga de trabalho sob cargas esperadas. Realizar testes nestas condições de carga variadas. Por exemplo, utilize níveis, como níveis normais, de pico e de stress, para analisar o comportamento da carga de trabalho em vários cenários.

Analisar os resultados

Analisar os resultados do teste envolve examinar os dados recolhidos e as métricas dos testes de desempenho para obter informações sobre o desempenho da carga de trabalho. O objetivo é identificar problemas de desempenho e utilizar o feedback para ajustar as prioridades no desenvolvimento de aplicações. As seguintes ações são passos fundamentais para analisar os resultados dos testes.

Reveja as métricas de desempenho. Observe as métricas de desempenho que recolhe durante os testes de desempenho, tais como tempos de resposta, débito, taxas de erro, utilização da CPU e da memória e latência de rede. Analise estas métricas para compreender o desempenho geral da carga de trabalho.

  • Identifique os estrangulamentos. Avalie as métricas de desempenho para identificar quaisquer estrangulamentos ou áreas de desempenho ineficiente. A avaliação pode incluir tempos de resposta elevados, restrições de recursos, problemas de base de dados, latência de rede e limitações de escalabilidade. Identificar as causas principais destes estrangulamentos ajuda-o a priorizar as melhorias de desempenho.

  • Correlacionar métricas. Avalie as relações e correlações entre várias métricas de desempenho. Por exemplo, analise como o aumento da carga ou a utilização de recursos afeta os tempos de resposta. Compreender estas correlações pode fornecer informações valiosas sobre o comportamento da carga de trabalho em condições diferentes. Procure padrões e tendências nos dados de desempenho ao longo do tempo. Analise o desempenho em diferentes níveis de carga ou durante períodos específicos. A deteção de tendências pode ajudar a identificar variações sazonais, tempos de pico de utilização ou problemas de desempenho recorrentes.

Avaliar critérios de aceitação. Compare os resultados de teste com os critérios de aceitação predefinidos e os objetivos de desempenho. Avalie se a carga de trabalho cumpre os padrões de desempenho pretendidos. Se a carga de trabalho não cumprir os critérios de aceitação, investigue e refine as otimizações.

Iterar e refinar a análise. Faça outros ajustes e melhoramentos conforme necessário. Utilize os dados e as métricas recolhidos para diagnosticar problemas de desempenho específicos. O diagnóstico pode envolver o rastreio através dos componentes da carga de trabalho, examinar ficheiros de registo, monitorizar a utilização de recursos ou analisar mensagens de erro. Aprofunde os dados para compreender as causas subjacentes dos problemas de desempenho.

Com base na análise dos resultados do teste, priorize problemas de desempenho identificados e implemente as melhorias necessárias. As melhorias podem envolver a otimização do código, a otimização das consultas da base de dados, a melhoria dos mecanismos de colocação em cache e a otimização das configurações de rede.

Estabelecer linhas de base

As linhas de base fornecem um ponto de referência para comparar os resultados de desempenho ao longo do tempo. As linhas de base devem ser instantâneos significativos do desempenho da carga de trabalho— não precisa de utilizar todos os testes como base.

Considere os objetivos da carga de trabalho e os instantâneos de desempenho do documento que lhe permitem aprender ao longo do tempo e otimizar. Utilize estas medições de linha de base como referência para futuros testes de desempenho e utilize-as para identificar qualquer degradação ou melhoria.

Para estabelecer linhas de base para testes de desempenho e utilizá-las como referência para testes de desempenho futuros, siga estes passos:

  • Identificar métricas de desempenho. Determine as métricas de desempenho específicas que pretende medir e controlar. Os exemplos incluem:

    • Tempo de resposta ou a rapidez com que a carga de trabalho responde aos pedidos.
    • Débito ou o número de pedidos que são processados por unidade de tempo.
    • Utilização de recursos, como CPU, memória e utilização do disco.
  • Registe medições significativas. Registe as métricas de desempenho que obtém durante o teste como medidas de linha de base. Estas medidas representam o ponto de partida em relação ao qual compara futuros testes de desempenho.

  • Comparar testes futuros. Nos testes de desempenho subsequentes, compare as métricas de desempenho com as linhas de base e os limiares estabelecidos. A comparação permite-lhe identificar quaisquer melhorias ou degradação no desempenho.

Testar continuamente

Os testes contínuos envolvem a monitorização e o refinamento contínuos dos seus testes. Os testes contínuos ajudam-no a manter níveis de desempenho consistentes e aceitáveis. Uma carga de trabalho deve fornecer um nível de desempenho consistente e aceitável em relação à linha de base. Deve ajustar a carga de trabalho ao longo do tempo para produzir um desempenho consistente dentro dos limites aceitáveis de desempenho. Seguem-se algumas práticas fundamentais:

  • Defina limites de degradação. Defina limiares numéricos que especifiquem o nível de degradação do desempenho que é aceitável ao longo do tempo. Ao definir estes limites, pode monitorizar as flutuações de desempenho e receber alertas quando o desempenho ficar abaixo do limiar definido.

  • Inclua garantia de qualidade. Incorpore os requisitos de desempenho, como a utilização da CPU e os pedidos máximos por segundo, no processo de garantia de qualidade. Trate os requisitos de desempenho com o mesmo nível de importância que os requisitos funcionais. Este processo ajuda a garantir que a carga de trabalho cumpre os requisitos de desempenho definidos antes de implementá-la na produção.

  • Automatizar alertas. Em ambientes dinâmicos, a deteção rápida e a resposta são cruciais. Configure sistemas de alerta automatizados que utilizam a linha de base de desempenho como referência. Se existir um desvio significativo no desempenho, as equipas necessárias são alertadas imediatamente para agirem.

  • Testar alterações. Alguns problemas de desempenho só podem manifestar-se numa definição em direto. Aplique práticas de teste completas para alterações de código e infraestrutura propostas. Utilize a instrumentação de código para obter informações sobre as características de desempenho da aplicação, tais como caminhos quentes, alocações de memória e recolha de lixo. Este teste garante que qualquer alteração introduzida não degrada o desempenho para além dos limites aceitáveis.

Facilitação do Azure

Efetuar os testes: oAzure Pipelines permite-lhe integrar testes de desempenho no pipeline ci/CD. Pode incorporar testes de carga como um passo no seu pipeline para validar o desempenho e a escalabilidade das suas aplicações.

O Azure Chaos Studio fornece uma forma de injetar falhas no mundo real na sua aplicação para que possa executar experimentações de injeção de falhas controladas. As experimentações ajudam-no a medir, compreender e melhorar a resiliência da aplicação na cloud e do serviço.

O Teste de Carga do Azure é um serviço de teste de carga que gera carga de alta escala em qualquer aplicação. O Teste de Carga fornece capacidades para automatizar testes de carga e integrá-los no fluxo de trabalho de integração contínua e entrega contínua (CI/CD). Pode definir critérios de teste, como o tempo médio de resposta ou limiares de erro, e parar automaticamente os testes de carga com base em condições de erro específicas. O Teste de Carga oferece um dashboard que fornece atualizações em direto e métricas de recursos detalhadas dos componentes da aplicação do Azure durante um teste de carga. Pode analisar os resultados dos testes, identificar estrangulamentos de desempenho e comparar várias execuções de teste para compreender as regressões de desempenho ao longo do tempo.

Analisar os resultados: o Azure Monitor é uma solução de monitorização abrangente para recolher, analisar e responder à telemetria dos seus ambientes na cloud e no local. O Application Insights é uma extensão do Monitor que fornece funcionalidades do APM. Pode utilizar o Application Insights para monitorizar aplicações durante o desenvolvimento e teste e também em produção.

Desvantagem: os testes demoram tempo e competência a realizar e podem afetar a eficiência operacional.

Lista de verificação de Eficiência de Desempenho

Veja o conjunto completo de recomendações.