Skip to content

Latest commit

 

History

History
130 lines (89 loc) · 4.14 KB

README.md

File metadata and controls

130 lines (89 loc) · 4.14 KB

API Stress Test

Aplicação em Python para realizar testes de carga e estresse em sites e APIs utilizando client HTTP e multithreading.

Tecnologias

  • Python 3
  • Requests
  • Time
  • Threading

Executando

É possível executar de 2 maneiras diferentes:

  • Rodando com valores padrões de concorrência e tempo
  • Rodando com valores de concorrência e tempo especificados por parâmetro

Executando com valores padrões

Basta rodar o comando:

python api_stress_test.py

A concorrência e o tempo serão os que estão setados no arquivo config.py, caso queira um valor default diferente, terá que alterar o arquivo.

Executando com valores informados por parâmetro

Basta rodar o comando:

python api_stress_test.py valor_concorrencia valor_tempo

Exemplo:

python api_stress_test.py 10 60 -> executará o teste de estresse com 10 usuários concorrentes por 60 segundos.

O valor default, caso não sejam informados os parâmetros, será de 10 usuários durante 3 segundos.

Worflow do funcionamento do teste

Abaixo, está exemplificado em um worflow qual será o funcionamento do software.

Workflow

Configurar teste

A configuração do teste fica no arquivo config.py.

Neste arquivo, existirão 3 objetos e uma função para exportá-los.

  • concorrencia
  • tempo
  • requisicao

Configuração do teste

Existem 2 configurações principais do teste de carga:

  • Concorrência
  • Duração

A concorrência será a quantidade de threads que serão criadas para simular requisições sendo enviadas, e a duração será a quantidade de segundos em que o total de threads criadas estará disparando requisições.

Cada thread irá simular um usuário realizando uma requisição ao servidor.

Exemplo:

concorrencia = 100
tempo = 120

No exemplo acima, serão criadas 100 threads que farão loops de disparos durante 120 segundos (2 minutos). Cada thread irá disparar uma requisição após a outra em loop. Ao fim dos 120 segundos, as requisições não serão mais disparadas, e a aplicação irá aguardar as restantes (caso existam) para realizar o cálculo das métricas.

Configuração da requisição

O objeto requisicao é um dicionário contendo método, url, dados (body) e headers, que também é um dicionário contendo um par chave/valor.

Exemplo de configuração (dados fictícios):

requisicao = {
    'metodo': 'POST',
    'url': 'http://localhost:8080/api/v1/user/save',
    'dados': '{"usuario":"[email protected]","senha":"123456"}',
    'headers': {
        'content-type': 'application/json'
    }
}

Output da aplicação

O output da aplicação irá informar os seguintes dados:

  • URL - Método HTTP - Status HTTP - Tempo em ms
  • Total de requisições enviadas
  • Disponibilidade (total de sucessos pelo total de requisições)
  • Total de sucessos
  • Total de falhas
  • Tempo médio
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.2s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.25s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.08s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.22s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.25s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.16s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.14s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.16s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.23s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.27s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.3s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.33s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.33s
http://localhost:8080/api/v1/cep/86010580/ - POST - Resposta: 200 - 0.19s
Total: 256
Disponibilidade: 100.0%
Sucessos: 256
Falhas: 0
Requisição mais rápida: 0.06s
Requisição mais lenta: 0.66s
Tempo médio: 0.19s

Autor

  • Victor Hugo Negrisoli
  • Desenvolvedor de Software Back-End