# Overview - Teste de Carga
Todos os testes foram executados utilizando o framework K6.
## Payment Group
### Manual Payment Group
Utilizamos três domínios para teste:
- **openbanking.bit.one**
- **br.bit.one**
- **transferocaas-api-brazil.azurewebsites.net**
#### Plano de Teste
- **Cenário 1** ⇒ 50 requisições
- **Cenário 2** ⇒ 500 requisições
- **Cenário 3** ⇒ 1000 Requisições
#### Resultados e Análises
| | Requisições bem sucedidas | Rejeições | Taxa média (Req/s) | Tempo médio por req (s) | Tempo total(s) |
| --------- | ------------------------- | --------- |:------------------ |:----------------------- | -------------- |
| Cenário 1 | 50 | 0 | 1.3 | 34.82 | 36.4 |
| Cenário 2 | 191 | 0 | N/A | N/A | N/A |
| Cenário 3 | não realizado | | | | |
A API processou o Cenário 1 com sucesso, levando 36.4 segundos para processar as 50 requisições, com uma média de 34.82 segundos (1.3 req/s).
O Cenário 2 foi abortado prematuramente. A API processou 191 requisições e após isso o serviço caiu. Tentativas posteriores foram fracassadas. Suspeita-se que o gargalo foi no CosmosDB, mesmo dobrando sua capacidade. É possível que haja uma quantidade excessiva de requisições para o CosmosDB.
Não foi observado gargalos ou problemas de desempenho nas máquinas do serviço.
Não foram realizados outros cenários e testes de Payment Group.
#### Ações a serem tomadas
- Investigar lentidão na criação de Payment Group e Deposit Order
## Geração de QR Code
### QR Code Dinâmico
Bancos testados:
- BS2
#### Plano de Teste
- Cenário 1 ⇒ 50 QR Codes Dinâmicos (Requisição Direta)
- Cenário 2 ⇒ 500 QR Codes Dinâmicos (Requisição Direta)
- Cenário 3 ⇒ 1000 QR Codes Dinâmicos (Requisição Direta)
- Cenário 4 ⇒ 2000 QR Codes Dinâmicos (Requisição Direta)
- Cenário 5 ⇒ 3000 QR Codes Dinâmicos (Requisição Direta)
- Cenário 6 ⇒ 400 QR Codes Dinâmicos (Requisição Direta)
- Cenário 7 ⇒ 9000 QR Codes Dinâmicos (30 req/s por 5 minutos)
- Cenário 8 ⇒ 11000 QR Codes Dinâmicos (100 req/s por 2 minutos e 33 segundos)
#### Resultado e Análises
##### BS2
| | Requisições bem sucedidas | Rejeições | Taxa média (Req/s) | Tempo médio por req (s) | Tempo total (s) |
| ------------- | ------------------------- | --------- | ------------------ | ----------------------- | --------------- |
| Cenário 1 | 50 | 0 | 4.7 | 4.25 | 9.6 |
| Cenário 2 | 500 | 0 | 44.9 | 5.25 | 10.3 |
| Cenário 3 | 1000 | 0 | 64.2 | 8.04 | 14.8 |
| Cenário 4 | 1716 | 285 | 45.3 | 19.09 | 43.3 |
| Cenário 5 | 2765 | 236 | 54.7 | 28.69 | 54.0 |
| Cenário 6 (1) | 1822 | 2178 | 103 | 27.3 | 37.7 |
| Cenário 6 (2) | 3764 | 236 | 65.4 | 42.4 | 60.0 |
| Cenário 7 | 8662 | 338 | 28.2 | 1.16 | 5m06s |
| Cenário 8 | 10845 | 171 | 71.6 | 10.6 | 2m33s |
Os cenários de 1 a 3 foram executados com uma taxa de sucesso de 100%, sendo executados com uma média de 4 a 8 segundos por requisição, chegando a uma taxa de 64 req/s.
Os cenários 4, 5 e 6 tiveram requisições falhadas. Uma particularidade é que em todos os testes, a quantidade de falhas foi, respectivamente, 285, 236, e 237. A quantidade de requisições rejeitadas foi estranhamente próxima uma da outra.
Os testes tiveram médias de execução de, respectivamente, 28.7 segundos, 27.3 segundos, e 42.4 segundos, a uma taxa de 45 req/s, 54 req/s, e 103 req/s.
Uma segunda execução do cenário 6 resultou em 55.45% de requisições rejeitadas.
O cenário 7 não teve requisições rejeitadas. No intervalo de 5 minutos foram realizadas requisições a uma taxa real de 28 req/s, com um tempo médio de 1.16 segundo por requisição.
O cenário 8 gerou 171 rejeições e foi interrompido prematuramente. A taxa real foi de 71 req/s com um tempo médio de 10.6 segundos por requisição.
::: warning
Foi observado gargalos por SNAT Port Exhaustion (socketException) recomenda-se criar mais de 1 instância para sanar esse gargalo.
:::
### QR Code estático
#### Plano de teste
- Cenário 1 ⇒ 50 QR Codes Estáticos (Requisição Direta)
- Cenário 2 ⇒ 100 QR Codes Estáticos (Requisição Direta)
- Cenário 3 ⇒ 10000 QR Codes Estáticos (Requisição Direta)
#### Resultados e Análises
| | Requisições bem sucedidas | Rejeições | Taxa média (Req/s) | Tempo médio por req (s) | Tempo total (s) |
| --------- | ------------------------- | --------- | ------------------ |:----------------------- | --------------- |
| Cenário 1 | 50 | 0 | 4.2 | 6.92 | 11 |
| Cenário 2 | 0 | 100 | 1.6 | 59.4 | 60 |
| Cenário 3 | não realizado | | | | |
O cenário 1 foi completado com sucesso em 11 segundos, sem requisições rejeitadas, com uma taxa de 4.2 req/s, e uma média de 6.9 segundos por requisição.
O cenário 2 resultou numa taxa de 100% de rejeições. A média de execução foi de 59.2 segundos. O cenário foi concluído em 60 segundos.
O cenário 3 não foi realizado.
## Webhook
#### Plano de Teste
- Cenário 1 ⇒ 100 Transações (Requisição Direta)
- Cenário 2 ⇒ 1000 Transações (Requisição Direta)
- Cenário 3 ⇒ 2000 Transações (Requisição Direta)
- Cenário 4 ⇒ 5000 Transações (Requisição Direta)
- Cenário 5 ⇒ 7500 Transações (Requisição Direta)
#### Resultados e Análises
| | Requisições bem sucedidas | Rejeições | Taxa média (Req/s) | Tempo médio por req (s) | Tempo total (s) |
| --------- | ------------------------- | --------- | ------------------ | ----------------------- | ----------- |
| Cenário 1 | 100 | 0 | 197 | 0.397 | 0.5 |
| Cenário 2 | 1000 | 0 | 424 | 1.67 | 2.4 |
| Cenário 3 | 2000 | 0 | 295 | 2.99 | 6.8 |
| Cenário 4 | 4996 | 4 | 234 | 5.23 | 21.3 |
| Cenário 5 | 7328 | 172 | 351 | 6.77 | 21.3 |
O cenário 1 foi realizado sem nenhuma rejeição, e foi concluído em 0.5 segundos.
O cenário 2 foi realizado sem nenhuma rejeição, e foi concluído em 2.4 segundos.
O cenário 3 foi realizado sem nenhuma rejeição, e foi concluído em 6.8 segundos.
O cenário 4 gerou 4 rejeições, e foi concluído em 21.3 segundos.
O cenário 5 apresentou 172 rejeições. Grande parte foi devido a erros vindos do próprio BS2, e outra parte foram internal errors. O cenário foi concluído em 21.3 segundos.
Não foi observado gargalos ou problemas de desempenho nas máquinas do serviço.
#### Ações a serem tomadas
- Revisar Banking Service para entender motivo dos SocketExceptions em uma alta escala