Skip to content

Estudo de caso de uma aplicação desenvolvida em Typescript + NodeJS + Postgres para testar os limites de sobrecargas de uma instância na AWS.

Notifications You must be signed in to change notification settings

eneas-almeida/teste_exaustao

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 

Repository files navigation

Teste de exaustão

Case de testes de exaustão em Typescript e NodeJS em uma instância na AWS.

Typescript NodeJS


JMeter: Testes de performance para requisições HTTP



O que é o JMeter?

Desenvolvida em 2007 pela Apache, o JMeter é uma ferramenta utilizada para a realização de testes de performance. Escrita em Java, gratuita, de código aberto, com o objetivo na simulação de diversos tipos de testes:

  • Teste de carga;
  • Teste de estresse;
  • Teste de escalabilidade;
  • Teste de pico;
  • Teste de resistência;
  • Teste de concorrência;
  • Teste de capacidade.

O JMeter foi desenvolvido para testar aplicações Web. No entanto, com o tempo a tecnologia foi aprimorada e já é possível utilizá-la para testes em diferentes serviços:

  • Requisições HTTP, SOAP ou FTP;
  • Bancos de dados;
  • servidores de e-mail, etc.

O que é um teste de performance?

Um teste de performance analisa como uma determinada aplicação se comporta quando ela é submetida a uma carga exaustiva de requisições, indicando se existe algum problema na aplicação ou na infra estrutura de hospedagem.

Download e requisitos

* A versão do JMeter utilizada para os testes é a 5.4.1.

O devido tutorial foi desenvolvido com base em um ambiente linux, utilizando o Ubuntu na versão 18.04.5 LTS.

$ lsb_release -a
LSB Version:	core-9.20170808ubuntu1-noarch:...
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.5 LTS
Release:	18.04
Codename:	bionic

Importante!

Para executar o JMeter é necessário possuir a JVM instalada em seu computador, se você ainda não possui, clique aqui para ir para documentação. Utilizando a versão 14.

$ java -version
java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

👉 Link para o download do JMeter

JMeter: Primeiro contato

# Para abrir o programa:
$ cd apache-jmeter-5.4.1/bin/

# Em seguida:
$ ./jmeter

Pronto! Essa é a tela do JMeter na versão 5.4.1.

JMeter

Objetivo do teste

O principal objetivo do teste é estressar a aplicação e o servidor e verificar quantas solicitações http simultâneas o servidor é capaz de suportar, como também o melhor caso e o caso médio de requisições.

❗ Iremos estressar até o ponto que o servidor venha a travar.

❗ É indicado utilizar a ferramenta apenas em ambientes controlados, em caso de uso indevido da ferramenta em servidores não autorizados, pode ocasionar em infrações legais para o requisitante, a ferramenta deve ser utilizada de forma responsável.

Como os testes irão funcionar?

Servidor

Na Amazon AWS, em uma única instância, será configurada uma aplicação em NodeJs que ficará escutando na porta 3000, cuja a única finalidade consiste em: ao ser solictada uma URL, a aplicação irá inserir um registro em um banco de dados (Postgres).

Dados do registro

  • id (gerado pelo sistema, UUID)
  • name (Tiago Rizzo, dado fixo)
  • email (tiagorizzo@gmail.com, dado fixo)
  • created_at (gerado pelo postgres)

A instância na AWS que irá receber a aplicação conterá as seguintes configurações:

  • Ubuntu 18.04;
  • 1 núcleo de processamento;
  • 1gb de ram;
  • SSD 20gb.

Cliente

No cliente, será utilizado o JMeter na versão 5.4.1 para realizar as requisições HTTP.

❗ Os parametros de desempenho serão coletados e expostos logo a baixo na sequência de passo a passo.

Testes: Passo a Passo

Já com o JMeter aberto...

JMeter

1 - Adicione o grupo:

Clique com o botão direito sobre Test Plan > Add > Threads (Users) > Thread Group

Na opção Numbers of Threads (users): 10

❗ Na máquina do cliente, será provisionado 10 threads para executar as requisições simultâneas, importante ter cuidado na quantidade de threads, pois, dependendo da quantidade escolhida em relação aos recursos de processamento, pode travar o sistema operacional.

JMeter

2 - Adicione o testador HTTP:

Clique com o botão direito sobre Test Group > Add > Sampler > HTTP Request

No campo Protocol [HTTP]: http
No campo Server Name or IP: ip_do_seu_servidor_de_aplicação
No campo Port Number: 80

JMeter

3 - Adicione o ouvinte (Relatórios):

Clique com o botão direito sobre Test Plan > Add > Listener > View Results in Table

JMeter

4 - Rodando o teste:

Clique no ícone de play, circulado na imagem a baixo para rodar os testes.

❗ Será solicitado o caminho para salvar o arquivo de configurações do teste.

JMeter

TESTS

Vídeo dos testes



Teste 1

  • 50 requisições de usuários simultâneos;
  • Cada requisição com 10 iterações.

Resultado:

  • A máquina demandou menos de 1% dos recursos de processamento;
  • 500 registros foram adicionados no banco de dados postgres.

Teste 2

  • 150 requisições de usuários simultâneos;
  • Cada requisição com 10 iterações.

Resultado:

  • A máquina demandou 24% dos recursos de processamento;
  • 1500 registros foram adicionados no banco de dados postgres.

Teste 3

  • 300 requisições de usuários simultâneos;
  • Cada requisição com 10 iterações.

Resultado:

  • A máquina demandou 35% dos recursos de processamento;
  • 3000 registros foram adicionados no banco de dados postgres.

Teste 4

  • 400 requisições de usuários simultâneos;
  • Cada requisição com 15 iterações.

Resultado:

  • A máquina demandou 75% dos recursos de processamento;
  • 6000 registros foram adicionados no banco de dados postgres.

Conclusões

1 - Podemos notar a eficiência do NodeJs em receber alto volume de requisições e performar muito bem;

2 - O melhor cenário foi 300 conexões simultâneas, onde os recursos ficariam processando em 35% da capacidade total.

Fonte de pesquisa

Autor

Edivam Enéas de Almeida Júnior

About

Estudo de caso de uma aplicação desenvolvida em Typescript + NodeJS + Postgres para testar os limites de sobrecargas de uma instância na AWS.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published