https://github.com/vhnegrisoli/api-stress-test
Aplicação em Python para realizar testes de carga e estresse em sites e APIs
https://github.com/vhnegrisoli/api-stress-test
http-client load-testing multithreading python3 requests-library-python stress-testing
Last synced: 4 months ago
JSON representation
Aplicação em Python para realizar testes de carga e estresse em sites e APIs
- Host: GitHub
- URL: https://github.com/vhnegrisoli/api-stress-test
- Owner: vhnegrisoli
- Created: 2021-12-18T13:31:57.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-06-18T12:34:48.000Z (about 3 years ago)
- Last Synced: 2025-01-10T15:49:20.365Z (5 months ago)
- Topics: http-client, load-testing, multithreading, python3, requests-library-python, stress-testing
- Language: Java
- Homepage:
- Size: 82 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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.

# 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çãoA 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:
```python
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):
```python
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```shell
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