load testing complete guide
Um guia de teste de carga completo para iniciantes:
Neste tutorial, aprenderemos porque realizamos o Teste de Carga, o que é obtido com ele, Arquitetura, qual é a abordagem a ser seguida para executar um Teste de Carga com sucesso, como configurar um ambiente de Teste de Carga, melhores práticas, junto com as melhores ferramentas de teste de carga disponíveis no mercado.
Ouvimos falar dos tipos de teste funcional e não funcional. No Teste Não Funcional, temos diferentes tipos de teste, como Teste de Desempenho, Teste de Segurança, Teste de Interface do Usuário, etc.
Conseqüentemente, o Teste de Carga é um tipo de teste Não Funcional, que é um subconjunto do Teste de Desempenho.
Portanto, quando dizemos que estamos testando o desempenho de um aplicativo, o que estamos testando aqui? Estamos testando o aplicativo para carga, volume, capacidade, estresse etc.
O que você aprenderá:
- O que é teste de carga?
- Arquitetura de teste de carga
- Por que teste de carga?
- Ambiente
- Aproximação
- Melhores Práticas
- Conclusão
- Leitura recomendada
O que é teste de carga?
O Teste de Carga é um subconjunto do Teste de Desempenho, onde testamos a resposta do sistema sob condições de carga variáveis, simulando vários usuários acessando o aplicativo simultaneamente. Esse teste geralmente mede a velocidade e a capacidade do aplicativo.
Assim, sempre que modificamos a carga, monitoramos o comportamento do sistema sob várias condições.
Exemplo :Vamos supor que o requisito do nosso cliente para uma página de Login seja de 2 a 5 segundos e esse tempo de 2 a 5 segundos seja consistente até a carga de 5.000 usuários. Então, o que devemos observar ouvir? É apenas a capacidade de manuseio de carga do sistema ou é apenas o requisito de tempo de resposta?
A resposta é ambas. Queremos um sistema capaz de lidar com uma carga de 5.000 usuários com tempo de resposta de 2 a 5 segundos para todos os usuários simultâneos.
Então, o que significa um usuário simultâneo e um usuário virtual?
Os usuários simultâneos são aqueles que efetuam login no aplicativo e, ao mesmo tempo, executam um conjunto de atividades juntos e efetuam logoff do aplicativo ao mesmo tempo. Por outro lado, os usuários virtuais simplesmente entram e saem do sistema, independentemente das atividades do outro usuário.
Arquitetura de teste de carga
No diagrama abaixo, podemos ver como diferentes usuários estão acessando o aplicativo. Aqui, cada usuário está fazendo uma solicitação pela internet, que depois é passada por um firewall.
Após o firewall, temos um balanceador de carga que distribui a carga para qualquer um dos servidores web, e então passa para o servidor de aplicativos e posteriormente para o servidor de banco de dados onde busca as informações necessárias com base na solicitação do usuário.
O teste de carga pode ser feito manualmente ou usando uma ferramenta. Mas o teste de carga manual não é recomendado, pois não testamos o aplicativo para uma carga menor.
Exemplo: Vamos supor que queremos testar um aplicativo de compras online para ver o tempo de resposta do aplicativo para cada clique do usuário, ou seja, Etapa1 - URL de lançamento, o tempo de resposta, fazer login no aplicativo e observar o tempo de resposta e assim por diante, como selecionar um produto, adicionar ao carrinho, efetuar o pagamento e efetuar logoff. Tudo isso deve ser feito para 10 usuários.
Portanto, agora, quando precisamos testar a carga do aplicativo para 10 usuários, podemos fazer isso colocando manualmente a carga de 10 usuários físicos de máquinas diferentes, em vez de usar uma ferramenta. Nesse cenário, é aconselhável fazer um teste de carga manual em vez de investir em uma ferramenta e configurar um ambiente para a ferramenta.
Por outro lado, imagine que se precisássemos fazer o teste de carga para 1.500 usuários, precisamos automatizar o teste de carga usando qualquer uma das ferramentas disponíveis com base nas tecnologias nas quais o aplicativo é construído e também com base no orçamento que temos para o projeto.
Se tivermos um orçamento, então podemos ir para ferramentas comerciais como o Load runner, mas se não tivermos muito orçamento, podemos ir para ferramentas de código aberto como JMeter, etc.
arrays c ++ em funções
Seja uma ferramenta comercial ou uma ferramenta de código aberto, os detalhes devem ser compartilhados com o cliente antes de finalizarmos a ferramenta. Normalmente, é preparada uma prova de conceito, onde geramos um script de amostra utilizando a ferramenta e mostramos os relatórios de amostra ao cliente para aprovação da ferramenta antes de finalizá-la.
No teste de carga automatizado, substituímos os usuários com a ajuda de uma ferramenta de automação, que imita as ações do usuário em tempo real. Ao automatizar o carregamento, podemos economizar recursos e também tempo.
Abaixo está o diagrama que mostra como os usuários são substituídos por meio de uma ferramenta.
Por que teste de carga?
Vamos supor que existe um site de compras online que está indo muito bem durante os dias úteis normais, ou seja, os usuários podem fazer login no aplicativo, navegar pelas diferentes categorias de produtos, selecionar produtos, adicionar itens ao carrinho, finalizar a compra e fazer logoff dentro um intervalo aceitável e não há erros de página ou tempos de resposta enormes.
Enquanto isso, chega um dia de pico, ou seja, digamos o dia de Ação de Graças e há milhares de usuários que estão logados no sistema, o sistema trava de repente e os usuários têm uma resposta muito lenta, alguns nem mesmo faça login no site, alguns não conseguiram adicionar ao carrinho e alguns não conseguiram finalizar a compra.
Portanto, neste grande dia, a empresa teve que enfrentar uma grande perda, pois perdeu muitos clientes e muitos negócios também. Tudo isso aconteceu porque eles não previram a carga do usuário nos dias de pico, mesmo que eles tivessem previsto que não havia teste de carga feito no site da empresa, portanto, eles não sabem quanta carga o aplicativo será capaz de suportar nos dias de pico.
Assim, para lidar com tais situações e a fim de superar grandes receitas, é aconselhável realizar testes de carga para esse tipo de aplicações.
- O Teste de Carga ajuda a construir sistemas fortes e confiáveis.
- O gargalo no sistema é identificado com bastante antecedência antes de o aplicativo entrar no ar.
- Ajuda a identificar a capacidade do aplicativo.
O que é obtido durante um teste de carga?
Com um teste de carga adequado, podemos ter uma compreensão exata do seguinte:
- O número de usuários que o sistema é capaz de controlar ou para o qual pode ser dimensionado.
- O tempo de resposta de cada transação.
- Como cada componente de todo o sistema se comporta sob carga, ou seja, componentes do servidor de aplicativos, componentes do servidor web, componentes do banco de dados, etc.
- Qual configuração de servidor é melhor para lidar com a carga?
- Se o hardware existente é suficiente ou se há necessidade de hardware adicional.
- Gargalos como utilização de CPU, uso de memória, atrasos de rede, etc., são identificados.
Ambiente
Precisamos de um ambiente de teste de carga dedicado para conduzir nossos testes. Porque na maioria das vezes o ambiente de teste de carga será o mesmo que o ambiente de produção e também os dados disponíveis no ambiente de teste de carga serão os mesmos da produção, embora não sejam os mesmos dados.
Haverá vários ambientes de teste, como ambiente SIT, ambiente QA etc., esses ambientes não são a mesma produção, porque ao contrário do teste de carga, eles não precisam de tantos servidores ou tantos dados de teste para realizar testes funcionais ou de integração.
Exemplo:
Em um ambiente de produção, temos 3 servidores de aplicativos, 2 servidores Web e 2 servidores de banco de dados. No controle de qualidade, temos apenas 1 servidor de aplicativo, 1 servidor Web e 1 servidor de banco de dados. Portanto, se conduzirmos um teste de carga no ambiente de controle de qualidade que não seja igual à produção, nossos testes não serão válidos e também estarão incorretos e, portanto, não poderemos seguir esses resultados.
Portanto, sempre tente ter um ambiente dedicado para o teste de carga que seja semelhante ao de um ambiente de produção.
Além disso, às vezes temos aplicativos de terceiros que nosso sistema irá chamar, portanto, em tais casos, podemos usar stubs, pois nem sempre podemos trabalhar com os fornecedores de terceiros para atualização de dados ou quaisquer outros problemas ou suporte.
Tente tirar um instantâneo do ambiente assim que estiver pronto para que, sempre que quiser reconstruir o ambiente, possa usar este instantâneo, o que ajudaria no gerenciamento do tempo. Existem algumas ferramentas disponíveis no mercado para configurar o ambiente, como Puppet, Docker etc.
Aproximação
Antes de iniciarmos o teste de carga, precisamos entender se algum teste de carga já foi feito no sistema ou não. Se houver algum teste de carga feito anteriormente, precisamos saber qual foi o tempo de resposta, as métricas do cliente e do servidor coletadas, qual foi a capacidade de carga do usuário, etc.
Além disso, precisamos de informações sobre quanto é a capacidade atual de manipulação de aplicativos. Se for um novo aplicativo, precisamos entender os requisitos, qual é a carga desejada, qual é o tempo de resposta esperado e se é realmente alcançável ou não.
Se for um aplicativo existente, você pode obter os requisitos de carga e os padrões de acesso do usuário dos logs do servidor. Mas se for um novo aplicativo, você precisa entrar em contato com a equipe de negócios para obter todas as informações.
Assim que tivermos os requisitos, precisamos identificar como vamos executar o teste de carga. É feito manualmente ou usando ferramentas? Fazer um teste de carga manualmente requer muitos recursos e também é muito caro. Também repetir o teste, uma e outra vez, também será difícil.
Portanto, para superar isso, podemos usar ferramentas de código aberto ou ferramentas comerciais. As ferramentas de código aberto estão disponíveis gratuitamente, essas ferramentas podem não ter todos os recursos como as outras ferramentas comerciais, mas se o projeto tiver uma restrição de orçamento, então podemos ir para as ferramentas de código aberto.
Embora as ferramentas comerciais tenham muitos recursos, elas suportam muitos protocolos e são muito fáceis de usar.
Nossa abordagem de teste de carga será a seguinte:
# 1) Identificar os critérios de aceitação do teste de carga
Por exemplo:
- O tempo de resposta da página de login não deve ser superior a 5 segundos, mesmo durante as condições de carregamento máximo.
- A utilização da CPU não deve ser superior a 80%.
- A taxa de transferência do sistema deve ser de 100 transações por segundo.
# 2) Identificar os cenários de negócios que precisam ser testados.
Não teste todos os fluxos, tente entender os principais fluxos de negócios que devem acontecer na produção. Se for um aplicativo existente, podemos obter suas informações dos logs do servidor do ambiente de produção.
Se for um aplicativo recém-construído, precisamos trabalhar com as equipes de negócios para entender os padrões de fluxo, o uso do aplicativo, etc. Às vezes, a equipe do projeto conduzirá workshops para fornecer uma visão geral ou detalhes sobre cada componente do aplicativo.
Precisamos participar do workshop de aplicação e anotar todas as informações necessárias para conduzir nosso teste de carga.
# 3) Modelagem de Carga de Trabalho
Assim que tivermos os detalhes sobre os fluxos de negócios, padrões de acesso do usuário e o número de usuários, precisamos projetar a carga de trabalho de tal forma que imite a navegação real do usuário na produção ou conforme o esperado no futuro, uma vez que o aplicativo estará em produção.
Os principais pontos a serem lembrados ao projetar um modelo de carga de trabalho é ver quanto tempo um determinado fluxo de negócios levará para ser concluído. Aqui, precisamos atribuir o tempo de reflexão de forma que o usuário navegue pelo aplicativo de uma forma mais realista.
O padrão de carga de trabalho normalmente será com uma aceleração, uma desaceleração e um estado estacionário. Devemos carregar lentamente o sistema e, assim, a aceleração e a desaceleração são usadas. O estado estacionário normalmente será um teste de carga de uma hora com Rampa de 15 min e Ram down de 15 min.
Vamos dar um exemplo do modelo de carga de trabalho:
Visão geral do aplicativo - Vamos supor uma compra online, onde os usuários farão login no aplicativo e terão uma grande variedade de vestidos para comprar, podendo navegar por cada produto.
Para ver os detalhes de cada produto, eles precisam clicar no produto. Se gostarem do custo e da marca do produto, podem adicioná-lo ao carrinho e comprar o produto finalizando a compra e efetuando o pagamento.
Abaixo está uma lista de cenários:
- Navegar - Aqui, o usuário inicia o aplicativo, faz o login no aplicativo, navega pelas diferentes categorias e faz o logout do aplicativo.
- Navegar, Visualização do Produto, Adicionar ao Carrinho - Aqui, o usuário efetua login no aplicativo, navega por diferentes categorias, visualiza detalhes do produto, adiciona o produto ao carrinho e efetua logout.
- Navegar, Visualização do Produto, Adicionar ao Carrinho e Finalizar - Neste cenário, o usuário efetua login no aplicativo, navega por diferentes categorias, visualiza detalhes do produto, adiciona o produto ao carrinho, faz check-out e efetua logout.
- Navegar, visualização do produto, adicionar ao carrinho Check-out e efetuar o pagamento - Aqui, o usuário se loga no aplicativo, navega por diferentes categorias, visualiza detalhes do produto, adiciona o produto ao carrinho, faz check out, efetua pagamento e log out.
S.Não | Fluxo de Negócios | Número de transações | Carga de usuário virtual | Tempo de Resposta (s) | % Taxa de falha permitida | Transações por hora |
---|---|---|---|---|---|---|
1 | Navegar | 17 | 1600 | 3 | Menos de 2% | 96000 |
dois | Navegar, Visualização do Produto, Adicionar ao Carrinho | 17 | 200 | 3 | Menos de 2% | 12.000 |
3 | Navegar, Visualização do Produto, Adicionar ao Carrinho e Finalizar | 18 | 120 | 3 | Menos de 2% | 7200 |
4 | Navegar, visualização do produto, adicionar ao carrinho Check-out e efetuar o pagamento | vinte | 80 | 3 | Menos de 2% | 4800 |
Os valores acima foram derivados com base nos seguintes cálculos:
- Transações por hora = Número de usuários * Transações feitas por um único usuário em uma hora.
- O número de usuários = 1.600.
- O número total de transações no cenário de navegação = 17.
- Tempo de resposta para cada transação = 3.
- Tempo total para um único usuário concluir 17 transações = 17 * 3 = 51 arredondado para 60 s (1 min).
- Transações por hora = 1600 * 60 = 96000 transações.
# 4) Projetar os testes de carga- O teste de carga deve ser projetado com os dados que coletamos até agora, ou seja, os fluxos de negócios, número de usuários, padrões de usuário, métricas a serem coletadas e analisadas. Além disso, os testes devem ser projetados de uma forma muito realista.
# 5) Execute o teste de carga - Antes de executar o teste de carga, certifique-se de que o aplicativo esteja instalado e funcionando. O ambiente de teste de carga está pronto. O aplicativo foi testado funcionalmente e é estável.
Verifique as definições de configuração do ambiente de teste de carga. Deve ser igual ao ambiente de produção. Certifique-se de que todos os dados de teste estejam disponíveis. Certifique-se de adicionar contadores necessários para monitorar o desempenho do sistema durante a execução do teste.
Sempre comece com uma carga baixa e aumente gradualmente a carga. Nunca comece com a carga total e quebre o sistema.
# 6) Analise os resultados do teste de carga - Faça um teste de linha de base para sempre comparar com as outras execuções de teste. Reúna as métricas e os logs do servidor após a execução do teste para encontrar os gargalos.
Alguns projetos usam ferramentas de monitoramento de desempenho de aplicativos para monitorar o sistema durante a execução do teste. Essas ferramentas de APM ajudam a identificar a causa raiz com mais facilidade e economizar muito tempo. Essas ferramentas são muito fáceis de localizar a causa raiz do gargalo, pois têm uma visão ampla para identificar onde está o problema.
Algumas das ferramentas APM no mercado incluem DynaTrace, Wily Introscope, App Dynamics etc.
# 7) Relatórios - Assim que a execução do teste for concluída, reúna todas as métricas e envie o relatório de resumo do teste para a equipe em questão com suas observações e recomendações.
Melhores Práticas
Listadas abaixo estão algumas das melhores práticas de teste de carga:
# 1) Sempre verifique a estabilidade do aplicativo antes de iniciar um teste de carga. O aplicativo deve ser assinado funcionalmente estável pela equipe de teste funcional e todos os principais defeitos devem ser corrigidos e testados antes que o build seja copiado para o ambiente de Teste de Carga.
#dois) Certifique-se de que o ambiente de teste de carga seja uma réplica ou esteja próximo ao ambiente de produção, incluindo o número de servidores, balanceadores de carga, configurações de servidor e firewalls.
# 3) Verifique se os dados de teste são exclusivos e se todos os dados de teste foram copiados para o ambiente de carga antes de conduzir um teste de carga.
# 4) Projete os cenários de teste de forma que eles imitem a ação do usuário em tempo real que acontece na produção.
# 5) Projete a carga de trabalho com base nas cargas de usuários de produção e nos fluxos de negócios e, no caso de um aplicativo antigo, veja se é uma nova conversa com a equipe de negócios sobre os fluxos de negócios e a carga de usuários.
# 6) Colete todas as métricas importantes, como tempo de resposta, ocorrências por segundo, throughput, CPU, memória, rede e usuários em execução.
Leitura recomendada => Lista de ferramentas de teste de desempenho disponíveis no mercado para a realização de testes de carga exclusivos.
Conclusão
Neste tutorial, aprendemos como o teste de carga desempenha um papel importante no teste de desempenho de um aplicativo, como ajuda a entender a eficiência e a capacidade do aplicativo, etc.
Também descobrimos como isso ajuda a prever se algum hardware, software ou ajuste adicional é necessário em um aplicativo.
Leitura feliz!!
Leitura recomendada
- Teste de carga com tutoriais HP LoadRunner
- Teste Alfa e Teste Beta (um guia completo)
- Guia de teste de segurança de aplicativos da Web
- Guia de teste de estresse para iniciantes
- Guia para iniciantes em testes de penetração em aplicativos da Web
- Um guia de teste não funcional completo para iniciantes
- Guia completo de teste de verificação de compilação (teste BVT)
- Teste de desempenho vs teste de carga vs teste de estresse (diferença)