Recomendações para teste 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 Teste de desempenho. Execute testes regulares em um ambiente que corresponda ao ambiente de produção. Compare os resultados com as metas de desempenho e o parâmetro de comparação de desempenho.

Este guia descreve as recomendações para teste. O teste de desempenho ajuda você a avaliar a funcionalidade de uma carga de trabalho em vários cenários. Ele envolve testar o tempo de resposta, a taxa de transferência, a utilização de recursos e a estabilidade da carga de trabalho para ajudar a garantir que a carga de trabalho atenda aos seus requisitos de desempenho.

O teste ajuda a evitar problemas de desempenho. Ele também ajuda a garantir que sua carga de trabalho atenda aos contratos de nível de serviço. Sem testes de desempenho, uma carga de trabalho pode experimentar degradações de desempenho que geralmente são evitáveis. O desempenho da carga de trabalho pode derivar das metas 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 introduzindo 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 pelo teste.
Teste de estresse Um teste de desempenho que sobrecarrega um sistema até que ele seja interrompido.
Teste sintético Um teste de desempenho que simula solicitações de usuário em um aplicativo.

Principais estratégias de design

O teste de desempenho ajuda você a coletar dados mensuráveis em uma carga de trabalho. Quando você executa testes cedo o suficiente, eles também ajudam você a criar cargas de trabalho com as especificações corretas. Você deve realizar testes de desempenho o mais cedo possível no ciclo de vida de desenvolvimento de software. O teste antecipado permite capturar e corrigir problemas de desempenho anteriormente no desenvolvimento. Você poderá usar uma POC (prova de conceito) 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 que você precisa para realizar testes de desempenho com eficiência.

Definir critérios de aceitação

Os critérios de aceitação especificam os requisitos de desempenho que uma carga de trabalho precisa atender para ser considerada aceitável ou bem-sucedida. Defina critérios que se alinham com as metas de desempenho.

Examine as metas de desempenho. As metas de desempenho definem o nível de desempenho desejado para sua carga de trabalho. Examine as metas de desempenho estabelecidas para a carga de trabalho. As metas de desempenho são métricas que podem envolver tempo de resposta, taxa de transferência, utilização de recursos ou qualquer outro indicador de desempenho relevante. Por exemplo, você pode ter um destino para que o tempo de resposta esteja abaixo de um determinado limite, como menos de 2 segundos.

Definir critérios de aceitação. Traduza as metas de desempenho em critérios de aceitação específicos que você pode usar para avaliar o desempenho da carga de trabalho. Por exemplo, suponha que o destino de desempenho para o tempo de resposta seja de 2 segundos ou menos. Seu critério de aceitação pode ser O tempo médio de resposta da carga de trabalho deve ser inferior a 2 segundos. Use esses critérios de aceitação para determinar se a carga de trabalho atende ao nível desejado de desempenho.

Quando você define critérios de aceitação, é importante se concentrar nos usuários e nas expectativas deles. Os critérios de aceitação ajudam a garantir que o trabalho entregue atenda às necessidades e aos requisitos do usuário. Tenha em mente as seguintes considerações para incorporar a perspectiva do usuário em critérios de aceitação:

  • Requisitos do usuário: entenda as necessidades e as metas do usuário para a carga de trabalho. Considere como a carga de trabalho deve ser executada para atender a esses requisitos.

  • Experiência do usuário: defina critérios de aceitação que capturam a experiência de usuário desejada. Inclua fatores como tempo de resposta, usabilidade, acessibilidade e satisfação geral.

  • Requisitos funcionais: resolva a funcionalidade específica que o usuário espera ver na carga de trabalho. Defina critérios de aceitação em torno desses requisitos funcionais para ajudar a garantir que eles sejam atendidos.

  • Casos de uso: considere cenários diferentes ou casos de uso que o usuário possa encontrar. Defina critérios de aceitação com base nesses casos de uso para validar o desempenho da carga de trabalho em situações do mundo real.

Definir limites de aceitação. Determine os limites dentro dos critérios de aceitação que indicam se a carga de trabalho atende às metas de desempenho. Esses limites definem o intervalo aceitável de desempenho para cada métrica. Por exemplo, suponha que o critério de aceitação para o tempo de resposta seja inferior a 2 segundos. Você pode definir o limite em 2,5 segundos. Esse 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. Você pode definir a passagem como atendendo a todos os critérios de aceitação ou obtendo uma determinada porcentagem deles.

Selecionar o tipo de teste

Para selecionar o tipo certo de teste de desempenho, é importante alinhar o teste com seus critérios de aceitação. Os critérios de aceitação definem as condições que precisam ser atendidas para que um requisito ou correção de bug seja considerado feito. Os testes de desempenho devem ter como objetivo verificar se uma carga de trabalho atende a esses critérios de aceitação e é executada conforme o 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 concentre em atender às expectativas de desempenho definidas pelos critérios.

  • Entenda os critérios de aceitação. Examine os critérios de aceitação para o requisito ou correção de bugs. Os critérios descrevem as condições e funcionalidades específicas a serem atendidas.

  • Identifique as métricas de desempenho relevantes. Com base nos critérios de aceitação, determine as métricas de desempenho que são essenciais para alcançar os resultados desejados. Por exemplo, se os critérios de aceitação se concentrarem no tempo de resposta, priorizar o teste de carga poderá ser apropriado.

  • Selecione um tipo de teste apropriado. 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 a seguir fornece uma amostra de tipos de teste e seus casos de uso.

Tipo de teste Descrição Caso de uso
Teste de carga Simule cargas de usuário realistas para medir o desempenho da carga de trabalho em cargas de trabalho de pico esperadas. Determina a tolerância à carga.
testes de estresse Efetue push da carga de trabalho para além dos limites normais para identificar seus pontos de interrupção e medir sua capacidade de recuperação. Determina a resiliência e a robustez.
Teste de imersão (teste de resistência) Execute sua carga de trabalho em altas cargas sustentadas por um longo período para identificar a degradação do desempenho, vazamentos de memória ou problemas de recursos. Avalia a estabilidade e a confiabilidade ao longo do tempo.
Teste de pico Simule aumentos repentinos na carga do usuário para avaliar como sua carga de trabalho lida com alterações abruptas na demanda. Mede a capacidade de dimensionar e manter o desempenho durante os períodos de pico.
Teste de compatibilidade Teste o desempenho da carga de trabalho em várias plataformas, navegadores ou dispositivos. Ajuda a garantir um desempenho consistente em vários ambientes.

Priorize os tipos de teste selecionados com base nas características e requisitos da carga de trabalho. Considere fatores como a criticalidade das métricas de desempenho, as expectativas do usuário, as prioridades de negócios e os problemas ou vulnerabilidades conhecidos.

Selecionar ferramentas de teste

Escolha as ferramentas apropriadas com base no tipo de teste de desempenho que você deseja executar. Avalie a infraestrutura, os recursos e as restrições do ambiente de teste. Escolha as ferramentas de teste que dão suporte aos tipos de teste desejados e forneça os recursos necessários para monitoramento, medição, análise e relatórios.

Uma ferramenta de APM (monitoramento de desempenho de aplicativos) fornece insights profundos sobre aplicativos e é uma ferramenta de teste essencial. Ele ajuda você a rastrear transações individuais e mapear seus caminhos por meio de vários serviços de carga de trabalho. Após o teste, você deve usar a ferramenta APM para analisar e comparar dados de teste com sua linha de base de desempenho.

Use ferramentas de criação de perfil para identificar gargalos de desempenho em seu código. A criação de perfil ajuda a identificar áreas do código que consomem mais recursos e precisam de otimização. Ele fornece insights sobre o tempo de execução e o uso de memória de diferentes partes do código.

As etapas a seguir podem ajudá-lo a selecionar as ferramentas de teste apropriadas:

  • Identifique os requisitos de teste. Comece entendendo os requisitos específicos do teste de desempenho. Considere vários fatores:

    • O tipo de carga de trabalho
    • Métricas de desempenho a serem medidas, como tempo de resposta e taxa de transferência
    • A complexidade da arquitetura da carga de trabalho
    • O ambiente de teste, como baseado em nuvem, local ou híbrido
  • Ferramentas de teste de pesquisa. Realize pesquisas para identificar ferramentas de teste de desempenho que se alinham aos seus requisitos. Considere as ferramentas comerciais e de software livre disponíveis no mercado. Procure ferramentas que dão suporte aos tipos desejados de teste de desempenho, como teste de carga ou teste de estresse, e que fornecem recursos para medir as métricas de desempenho.

  • Avaliar os recursos da ferramenta. Avalie os recursos que cada ferramenta de teste fornece. Procure recursos como simulação de comportamento realista do usuário e escalabilidade para lidar com grandes cargas de usuário. Considere o suporte para vários protocolos e tecnologias, integração com outras ferramentas ou estruturas de teste e recursos de relatórios e análise.

  • Considere a compatibilidade e a integração. Determine a compatibilidade das ferramentas de teste com sua infraestrutura e tecnologias existentes. Verifique se as ferramentas podem ser facilmente integradas ao seu ambiente de teste e podem se comunicar com a carga de trabalho necessária para monitoramento e análise.

  • Avalie o custo e o licenciamento. Avalie a estrutura de custo 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 usuários ou usuários virtuais.

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

  • Considere o suporte e o treinamento. Avalie o nível de suporte e treinamento que o fornecedor ou a comunidade da ferramenta fornece. 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 criação de situações ou condições específicas adequadas para testar o desempenho de uma carga de trabalho. Cenários de teste são criados para emular o comportamento realista do usuário e os padrões de carga de trabalho. Esses cenários fornecem uma maneira para os testadores de desempenho avaliarem o desempenho da carga de trabalho em várias condições.

Cenários de teste possibilitam replicar vários padrões de carga de trabalho, como acesso simultâneo do usuário, períodos de pico de carga ou sequências de transações específicas. Ao testar a carga de trabalho em diferentes padrões de carga de trabalho, você pode identificar gargalos de desempenho e otimizar a alocação de recursos.

  • Definir o comportamento do usuário. Emule o comportamento realista do usuário e os padrões de carga de trabalho identificando as etapas e ações que os usuários executam quando interagem com a carga de trabalho. Considere atividades como entrar, executar pesquisas, enviar formulários ou acessar recursos específicos. Divida cada cenário em etapas e ações específicas que representam a interação do usuário com a carga de trabalho. Você pode incluir navegar por páginas, executar transações ou interagir com vários elementos da carga de trabalho.

  • Determinar o envolvimento de dados. Identifique os dados de teste necessários para executar os cenários de teste. Você pode incluir a criação ou geração de conjuntos de dados realistas que representam vários cenários, perfis de usuário ou volumes de dados. Verifique se os dados de teste são diversos e abrangem diferentes casos de uso 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. Os scripts de teste normalmente consistem em uma sequência de ações, solicitações HTTP ou interações com APIs de carga de trabalho ou interfaces do usuário. Use ferramentas de teste de desempenho ou linguagens de programação para escrever os scripts, considerando fatores como parametrização, correlação e manipulação dinâmica de dados. Valide os scripts de teste quanto à exatidão e funcionalidade. Depure quaisquer problemas, como erros de script, ações ausentes ou incorretas ou problemas relacionados a dados. A validação do script de teste é crucial para ajudar a garantir a execução precisa e confiável do teste de desempenho.

  • Configure variáveis de teste e parâmetros. Configure variáveis e parâmetros em scripts de teste para introduzir variabilidade e simular cenários do mundo real. Inclua parâmetros como credenciais de usuário, dados de entrada ou randomização para imitar diferentes comportamentos do usuário e respostas de carga de trabalho.

  • Refinar scripts iterativamente. Refinar e aprimorar continuamente os scripts de teste com base em comentários, resultados de teste ou requisitos de alteração. Considere otimizar a lógica de script, a parametrização e o tratamento de erros ou adicionar validação e pontos de verificação adicionais.

Configurar o ambiente de teste

A configuração de um ambiente de teste refere-se ao processo de configuração da infraestrutura, do software e das configurações de rede necessárias para criar um ambiente semelhante ao seu ambiente de produção.

Para configurar seu ambiente de teste de uma forma que aumente a eficiência do desempenho, inclua as seguintes etapas em seu processo de configuração:

  • Espelhar seu ambiente de produção. Configure seu ambiente de teste para se parecer com seu ambiente de produção. Considere fatores como configuração de infraestrutura, configurações de rede e configurações de software. O objetivo é garantir que os resultados do teste de desempenho sejam representativos das condições do mundo real.

  • Provisionar recursos suficientes. Aloque recursos adequados, como CPU, memória e espaço em disco para o ambiente de teste. Verifique se os recursos disponíveis podem lidar com a carga de trabalho esperada e fornecer medidas de desempenho precisas.

  • Replicar condições de rede. Defina as configurações de rede no ambiente de teste para replicar as condições de rede esperadas durante a implantação real da carga de trabalho. Você precisa incluir largura de banda, latência e protocolos de rede.

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

Compensação: há custos associados à manutenção de ambientes de teste separados, armazenamento de dados, uso de ferramentas e execução de testes. Conheça o custo do teste de desempenho e encontre uma maneira de otimizar os gastos.

Risco: os dados de produção podem conter informações confidenciais. Sem uma estratégia robusta de depuração e mascaramento, você corre o risco de vazar dados confidenciais ao usar dados de produção para teste.

Executar os testes

Execute os testes de desempenho usando a ferramenta de teste escolhida. O teste envolve medir e registrar métricas de desempenho, monitorar a integridade e capturar quaisquer problemas de desempenho que surjam.

Monitore e colete métricas de desempenho, como tempo de resposta, taxa de transferência, utilização de CPU e memória e outros indicadores relevantes.

Use os cenários de teste definidos para colocar a carga de trabalho sob cargas esperadas. Realize testes nessas diferentes condições de carga. Por exemplo, use níveis, como níveis normais, de pico e de estresse, 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 coletados e as métricas dos testes de desempenho para obter insights sobre o desempenho da carga de trabalho. O objetivo é identificar problemas de desempenho e usar os comentários para ajustar as prioridades no desenvolvimento de aplicativos. As ações a seguir são as principais etapas para analisar os resultados do teste.

Examine as métricas de desempenho. Examine as métricas de desempenho coletadas durante o teste de desempenho, como tempos de resposta, taxa de transferência, taxas de erro, utilização de CPU e memória e latência de rede. Analise essas métricas para entender o desempenho geral da carga de trabalho.

  • Identificar gargalos. Avalie as métricas de desempenho para identificar quaisquer gargalos ou áreas de desempenho ineficiente. A avaliação pode incluir altos tempos de resposta, restrições de recursos, problemas de banco de dados, latência de rede e limitações de escalabilidade. Identificar as causas raiz desses gargalos ajuda você a priorizar 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 da utilização de recursos afeta os tempos de resposta. Entender essas correlações pode fornecer insights valiosos 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. Detectar tendências pode ajudar a identificar variações sazonais, horários de pico de uso ou problemas de desempenho recorrentes.

Avalie os critérios de aceitação. Compare os resultados de novo teste com os critérios de aceitação predefinidos e as metas de desempenho. Avalie se a carga de trabalho atende aos padrões de desempenho desejados. Se a carga de trabalho não atender aos critérios de aceitação, investigue e refinar ainda mais as otimizações.

Iterar e refinar a análise. Faça outros ajustes e melhorias conforme necessário. Use os dados e as métricas coletados para diagnosticar problemas de desempenho específicos. O diagnóstico pode envolver o rastreamento por meio dos componentes da carga de trabalho, o exame de arquivos de log, o monitoramento do uso de recursos ou a análise de mensagens de erro. Aprofunde-se nos dados para entender as causas subjacentes dos problemas de desempenho.

Com base na análise dos resultados do teste, priorize os problemas de desempenho identificados e implemente as melhorias necessárias. As melhorias podem envolver a otimização de código, o ajuste de consultas de banco de dados, a melhoria dos mecanismos de 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. Você não precisa usar todos os testes como uma linha de base.

Considere os objetivos de carga de trabalho e documente instantâneos de desempenho que permitem aprender ao longo do tempo e otimizar. Use essas medidas de linha de base como parâmetro de comparação para testes de desempenho futuros e use-as para identificar qualquer degradação ou melhoria.

Para estabelecer linhas de base para testes de desempenho e usá-las como parâmetro de comparação para testes de desempenho futuros, siga estas etapas:

  • Identificar métricas de desempenho. Determine as métricas de desempenho específicas que você deseja medir e acompanhar. Os exemplos incluem:

    • Tempo de resposta ou a rapidez com que a carga de trabalho responde às solicitações.
    • Taxa de transferência ou o número de solicitações processadas por unidade de tempo.
    • Utilização de recursos, como uso de CPU, memória e disco.
  • Registre medidas significativas. Registre as métricas de desempenho obtidas durante o teste como as medidas de linha de base. Essas medidas representam o ponto de partida com o qual você compara testes de desempenho futuros.

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

Testar continuamente

O teste contínuo envolve o monitoramento e o refinamento contínuos de seus testes. O teste contínuo ajuda você a manter níveis consistentes e aceitáveis de desempenho. Uma carga de trabalho deve fornecer um nível consistente e aceitável de desempenho em relação à linha de base. Você deve ajustar a carga de trabalho ao longo do tempo para produzir um desempenho consistente dentro dos limites aceitáveis de desempenho. Estas são algumas das principais práticas:

  • Definir limites de degradação. Defina limites numéricos que especificam o nível de degradação de desempenho aceitável ao longo do tempo. Ao definir esses limites, você pode monitorar flutuações de desempenho e receber alertas quando o desempenho ficar abaixo do limite definido.

  • Inclua garantia de qualidade. Incorpore requisitos de desempenho, como utilização da CPU e máximo de solicitações 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. Esse processo ajuda a garantir que a carga de trabalho atenda aos requisitos de desempenho definidos antes de implantá-la na produção.

  • Automatizar alertas. Em ambientes dinâmicos, a detecção e a resposta rápidas são cruciais. Configure sistemas de alerta automatizados que usam a linha de base de desempenho como referência. Se houver um desvio significativo no desempenho, as equipes necessárias serão alertadas imediatamente para agir.

  • Testar alterações. Alguns problemas de desempenho só podem se manifestar em uma configuração ao vivo. Aplique práticas de teste completas para alterações propostas de código e infraestrutura. Use a instrumentação de código para obter insights sobre as características de desempenho do aplicativo, como caminhos quentes, alocações de memória e coleta de lixo. Esse teste garante que qualquer alteração introduzida não degrade o desempenho além dos limites aceitáveis.

Facilitação do Azure

Executar os testes: o Azure Pipelines possibilita a integração do teste de desempenho ao pipeline de CI/CD. Você pode incorporar o teste de carga como uma etapa em seu pipeline para validar o desempenho e a escalabilidade de seus aplicativos.

O Azure Chaos Studio fornece uma maneira de injetar falhas do mundo real em seu aplicativo para que você possa executar experimentos de injeção de falha controlados. Os experimentos ajudam você a medir, entender e melhorar sua resiliência de aplicativo e serviço de nuvem.

O Teste de Carga do Azure é um serviço de teste de carga que gera carga de alta escala em qualquer aplicativo. O Teste de Carga fornece recursos para automatizar testes de carga e integrá-los ao fluxo de trabalho de CI/CD (integração contínua e entrega contínua). Você pode definir critérios de teste, como tempo médio de resposta ou limites de erro, e parar automaticamente os testes de carga com base em condições de erro específicas. O Teste de Carga oferece uma dashboard que fornece atualizações dinâmicas e métricas detalhadas de recursos de componentes de aplicativos do Azure durante um teste de carga. Você pode analisar os resultados do teste, identificar gargalos de desempenho e comparar várias execuções de teste para entender as regressões de desempenho ao longo do tempo.

Analisando os resultados: oAzure Monitor é uma solução de monitoramento abrangente para coletar, analisar e responder à telemetria de seus ambientes locais e de nuvem. O Application Insights é uma extensão do Monitor que fornece recursos do APM. Você pode usar o Application Insights para monitorar aplicativos durante o desenvolvimento e teste e também em produção.

Compensação: o teste leva tempo e habilidade para executar e pode afetar a eficiência operacional.

Lista de verificação de eficiência de desempenho

Consulte o conjunto completo de recomendações.