Compare commits

...

6 Commits

Author SHA1 Message Date
c7cdd65f87 add link
All checks were successful
/ build (push) Successful in 3m51s
2025-03-03 20:37:47 +01:00
3b2adea40f up ver
All checks were successful
/ build (push) Successful in 34s
2025-03-02 22:21:00 +01:00
8e82c90734 use python asyncio
All checks were successful
/ build (push) Successful in 43s
2025-03-02 22:19:41 +01:00
ea7529c443 cleanup asp deps
All checks were successful
/ build (push) Successful in 35s
2025-03-02 22:05:30 +01:00
d83d53180d up theme
All checks were successful
/ build (push) Successful in 32s
2025-03-02 21:57:32 +01:00
511fdbce7c fix asp db score
All checks were successful
/ build (push) Successful in 1m25s
2025-03-02 21:54:05 +01:00
6 changed files with 932 additions and 871 deletions

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@ I can develop proper API design following [**DDD / Hexa**](https://en.wikipedia.
I encourage `TDD` or at least proper **integration tests** on any backend frameworks, following **AAA** aka *Arrange Act Assert* principle :
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) for *.NET Core*
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks

View File

@ -8,7 +8,5 @@ Main packages involved :
* [Fluent Validation](https://fluentvalidation.net/) for strongly typed validation
* [dotnet-format](https://github.com/dotnet/format) as official formatter
* [xUnit.net](https://xunit.net/) as framework test
* [Fluent Assertions](https://fluentassertions.com/) for strongly typed assertions within the API
* [Respawn](https://github.com/jbogard/Respawn) as for optimal integration tests isolation
* [Bogus](https://github.com/bchavez/Bogus) for strongly typed fake data generator
* [Bullseye](https://github.com/adamralph/bullseye) as a nice CLI publisher tool with dependency graph

View File

@ -9,7 +9,7 @@ We'll be comparing the read performance of 6 Web APIs frameworks, sharing the sa
{{< /lead >}}
{{< alert >}}
Update April 2024 for PHP: I replaced previous Apache results by new [FrankenPHP](https://frankenphp.dev/). Now PHP is back in the game, with huge performance increase thanks to worker mode.
Outdated post, check the [lastest]({{< ref "/posts/23-web-api-benchmarks-2025" >}}) for updated benchs.
{{< /alert >}}
This is not a basic synthetic benchmark, but a real world benchmark with DB data tests, and multiple scenarios. This post may be updated when new versions of frameworks will be released or any suggestions for performance related improvement in below commentary section.

View File

@ -12,10 +12,10 @@ This is a 2025 update from previous [2024 benchmark]({{< ref "/posts/22-web-api-
| Framework & Source code | Runtime | ORM |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -------------- |
| [Laravel 11](https://github.com/adr1enbe4udou1n/laravel-realworld-example-app) ([api](https://laravelrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/laravel/latest)) | FrankenPHP 8.4 | Eloquent |
| [Laravel 12](https://github.com/adr1enbe4udou1n/laravel-realworld-example-app) ([api](https://laravelrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/laravel/latest)) | FrankenPHP 8.4 | Eloquent |
| [Symfony 7.2](https://github.com/adr1enbe4udou1n/symfony-realworld-example-app) ([api](https://symfonyrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/symfony/latest)) | FrankenPHP 8.4 | Doctrine |
| [FastAPI](https://github.com/adr1enbe4udou1n/fastapi-realworld-example-app) ([api](https://fastapirealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/fastapi/latest)) | Python 3.13 | SQLAlchemy 2.0 |
| [NestJS 10](https://github.com/adr1enbe4udou1n/nestjs-realworld-example-app) ([api](https://nestjsrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/nestjs/latest)) | Node 22 | Prisma 6 |
| [FastAPI](https://github.com/adr1enbe4udou1n/fastapi-realworld-example-app) ([api](https://fastapirealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/fastapi/latest)) | Python 3.13 (asyncio) | SQLAlchemy 2.0 (asyncio) |
| [NestJS 11](https://github.com/adr1enbe4udou1n/nestjs-realworld-example-app) ([api](https://nestjsrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/nestjs/latest)) | Node 22 | Prisma 6 |
| [Spring Boot 3.4](https://github.com/adr1enbe4udou1n/spring-boot-realworld-example-app) ([api](https://springbootrealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/spring-boot/latest)) | Java 21 | Hibernate 6 |
| [ASP.NET Core 9](https://github.com/adr1enbe4udou1n/aspnetcore-realworld-example-app) ([api](https://aspnetcorerealworld.okami101.io/api/) / [image](https://gitea.okami101.io/conduit/-/packages/container/aspnet-core/latest)) | .NET 9.0 | EF Core 9 |
@ -147,6 +147,7 @@ services:
- DB_PASSWORD=okami
- DB_DATABASE=conduit_fastapi
- JWT_PASSPHRASE=c2b344e1-1a20-47fc-9aef-55b0c0d568a7
- UVICORN_WORKERS=2
networks:
- postgres_db
- traefik_public
@ -155,7 +156,7 @@ services:
- traefik.enable=true
- traefik.http.routers.fastapi.entrypoints=websecure
- traefik.http.services.fastapi.loadbalancer.server.port=8000
replicas: 4
replicas: 2
placement:
max_replicas_per_node: 2
constraints:
@ -1036,23 +1037,23 @@ As a side note here, uvicorn is limited to 1 CPU core, so I use 2 replicas on ea
Iteration creation rate = **15/s**
```txt
checks.........................: 100.00% 39678 out of 39678
data_received..................: 321 MB 5.2 MB/s
data_sent......................: 3.4 MB 55 kB/s
dropped_iterations.............: 123 1.983368/s
http_req_blocked...............: avg=23.83µs min=213ns med=799ns max=113.17ms p(90)=1.41µs p(95)=1.59µs
http_req_connecting............: avg=1.42µs min=0s med=0s max=6.53ms p(90)=0s p(95)=0s
http_req_duration..............: avg=69.21ms min=6.41ms med=54.17ms max=382.34ms p(90)=142.86ms p(95)=166.33ms
{ expected_response:true }...: avg=69.21ms min=6.41ms med=54.17ms max=382.34ms p(90)=142.86ms p(95)=166.33ms
http_req_failed................: 0.00% 0 out of 39678
http_req_receiving.............: avg=491.01µs min=23.44µs med=282.51µs max=20.46ms p(90)=1.01ms p(95)=1.6ms
http_req_sending...............: avg=106.95µs min=17.61µs med=85.46µs max=20.9ms p(90)=155.94µs p(95)=189.16µs
http_req_tls_handshaking.......: avg=18.91µs min=0s med=0s max=34.33ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=68.62ms min=6.23ms med=53.56ms max=381.34ms p(90)=142.08ms p(95)=165.56ms
http_reqs......................: 39678 639.805458/s
iteration_duration.............: avg=3.56s min=1s med=3.68s max=5.11s p(90)=4.22s p(95)=4.38s
iterations.....................: 778 12.545205/s
vus............................: 3 min=3 max=50
checks.........................: 100.00% 39525 out of 39525
data_received..................: 324 MB 5.2 MB/s
data_sent......................: 3.5 MB 56 kB/s
dropped_iterations.............: 126 2.032659/s
http_req_blocked...............: avg=22.84µs min=258ns med=1.01µs max=41.9ms p(90)=1.45µs p(95)=1.6µs
http_req_connecting............: avg=1.32µs min=0s med=0s max=3.49ms p(90)=0s p(95)=0s
http_req_duration..............: avg=69.4ms min=6.28ms med=62.49ms max=323.87ms p(90)=131.32ms p(95)=147.63ms
{ expected_response:true }...: avg=69.4ms min=6.28ms med=62.49ms max=323.87ms p(90)=131.32ms p(95)=147.63ms
http_req_failed................: 0.00% 0 out of 39525
http_req_receiving.............: avg=410.93µs min=24.46µs med=281.1µs max=17.76ms p(90)=784.35µs p(95)=1.12ms
http_req_sending...............: avg=121.75µs min=14.48µs med=105.29µs max=11.05ms p(90)=179.47µs p(95)=221.68µs
http_req_tls_handshaking.......: avg=19.44µs min=0s med=0s max=28.07ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=68.87ms min=5.63ms med=61.98ms max=323.69ms p(90)=130.68ms p(95)=147ms
http_reqs......................: 39525 637.625912/s
iteration_duration.............: avg=3.57s min=822.25ms med=3.74s max=5.09s p(90)=4.25s p(95)=4.37s
iterations.....................: 775 12.502469/s
vus............................: 1 min=1 max=50
vus_max........................: 50 min=50 max=50
```
@ -1064,13 +1065,13 @@ vus_max........................: 50 min=50 max=50
{
label: 'Req/s',
data: [
205, 686, 625, 657, 643, 684, 625, 652, 606,
656, 610, 662, 672, 687, 647, 650, 636, 663,
665, 617, 600, 621, 637, 655, 628, 681, 649,
637, 662, 568, 669, 667, 630, 625, 630, 685,
654, 647, 667, 631, 618, 656, 614, 695, 650,
659, 629, 638, 646, 609, 642, 661, 647, 677,
601, 662, 665, 608, 671, 628, 632, 629, 150
30, 575, 674, 684, 617, 668, 634, 638, 647,
621, 662, 661, 670, 659, 617, 672, 644, 653,
623, 606, 663, 650, 634, 666, 625, 652, 650,
671, 651, 617, 598, 620, 624, 626, 602, 657,
646, 649, 650, 638, 669, 640, 639, 636, 628,
636, 654, 651, 668, 643, 663, 645, 644, 618,
575, 627, 622, 660, 643, 644, 637, 626, 413
]
}
]
@ -1085,12 +1086,12 @@ vus_max........................: 50 min=50 max=50
{
label: 'VUs',
data: [
15, 18, 22, 30, 31, 36, 37, 41, 49, 50, 49, 50,
47, 48, 47, 48, 49, 47, 49, 44, 47, 48, 48, 50,
46, 46, 45, 50, 48, 47, 45, 50, 45, 49, 45, 45,
50, 47, 48, 50, 47, 50, 46, 47, 49, 47, 50, 47,
50, 46, 49, 46, 47, 49, 48, 49, 47, 47, 48, 49,
38, 3
13, 18, 20, 24, 29, 33, 38, 41, 49, 47, 49, 49,
46, 49, 49, 50, 42, 47, 49, 50, 50, 48, 50, 49,
48, 46, 45, 50, 50, 49, 49, 50, 50, 47, 47, 48,
50, 48, 50, 46, 49, 50, 50, 49, 50, 48, 47, 49,
49, 48, 50, 49, 50, 49, 49, 48, 46, 48, 49, 49,
34, 1
]
}
]
@ -1101,12 +1102,12 @@ vus_max........................: 50 min=50 max=50
{
label: 'Duration (ms)',
data: [
19, 22, 29, 35, 44, 46, 57, 60, 71, 73, 80, 73,
73, 67, 76, 74, 73, 73, 70, 80, 76, 77, 76, 74,
77, 65, 70, 75, 73, 84, 68, 71, 80, 74, 79, 64,
74, 77, 69, 77, 79, 71, 78, 67, 75, 72, 77, 76,
74, 78, 71, 73, 74, 70, 78, 76, 71, 75, 71, 79,
71, 49, 17
19, 17, 24, 27, 36, 41, 48, 57, 64, 73, 71, 75,
73, 71, 76, 72, 77, 67, 70, 80, 73, 75, 74, 75,
78, 76, 73, 69, 74, 80, 79, 78, 78, 77, 81, 71,
74, 74, 75, 75, 71, 72, 76, 76, 78, 74, 72, 76,
71, 75, 70, 75, 75, 79, 84, 78, 77, 72, 74, 76,
74, 64, 27
]
}
]
@ -1120,11 +1121,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.01, 0.48, 0.69, 0.7,
0.69, 0.7, 0.7, 0.69,
0.71, 0.69, 0.68, 0.69,
0.69, 0.41, 0.01, 0.02,
0.01, 0.01
0.02, 0.09, 0.72, 0.72,
0.76, 0.76, 0.75, 0.75,
0.75, 0.75, 0.76, 0.77,
0.78, 0.78, 0.17, 0.02,
0.02, 0.02, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -1133,11 +1134,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.01, 0.16, 0.26, 0.26,
0.24, 0.24, 0.25, 0.25,
0.26, 0.25, 0.24, 0.24,
0.24, 0.16, 0.01, 0.02,
0.01, 0.01
0.01, 0.04, 0.22, 0.21,
0.22, 0.23, 0.22, 0.22,
0.22, 0.22, 0.21, 0.23,
0.22, 0.22, 0.06, 0.01,
0.02, 0.01, 0.01
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -1151,11 +1152,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.02, 0.11, 0.46, 0.49,
0.48, 0.5, 0.5, 0.49,
0.48, 0.48, 0.47, 0.49,
0.48, 0.49, 0.05, 0.02,
0.02, 0.02
0.02, 0.04, 0.32, 0.33,
0.34, 0.34, 0.34, 0.35,
0.34, 0.33, 0.34, 0.33,
0.34, 0.35, 0.11, 0.02,
0.02, 0.02, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -1164,11 +1165,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.02, 0.06, 0.24, 0.35,
0.28, 0.35, 0.33, 0.3,
0.28, 0.32, 0.27, 0.34,
0.29, 0.3, 0.04, 0.02,
0.02, 0.02
0.03, 0.03, 0.16, 0.2,
0.19, 0.2, 0.21, 0.23,
0.23, 0.19, 0.22, 0.18,
0.23, 0.2, 0.07, 0.02,
0.02, 0.03, 0.03
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -1185,24 +1186,24 @@ vus_max........................: 50 min=50 max=50
Iteration creation rate = **2/s**
```txt
checks.........................: 100.00% 82414 out of 82414
data_received..................: 164 MB 1.8 MB/s
data_sent......................: 6.1 MB 68 kB/s
dropped_iterations.............: 64 0.711058/s
http_req_blocked...............: avg=13.71µs min=208ns med=783ns max=143.23ms p(90)=1.39µs p(95)=1.56µs
http_req_connecting............: avg=1.28µs min=0s med=0s max=25.89ms p(90)=0s p(95)=0s
http_req_duration..............: avg=43.46ms min=3.99ms med=24.29ms max=315.4ms p(90)=108.49ms p(95)=129.33ms
{ expected_response:true }...: avg=43.46ms min=3.99ms med=24.29ms max=315.4ms p(90)=108.49ms p(95)=129.33ms
http_req_failed................: 0.00% 0 out of 82414
http_req_receiving.............: avg=205.46µs min=16.8µs med=103.34µs max=23.42ms p(90)=394.08µs p(95)=591.95µs
http_req_sending...............: avg=94.88µs min=17.56µs med=78.81µs max=14.63ms p(90)=143.76µs p(95)=171.26µs
http_req_tls_handshaking.......: avg=9.75µs min=0s med=0s max=29.89ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=43.16ms min=23.62µs med=23.97ms max=315.14ms p(90)=108.17ms p(95)=129.04ms
http_reqs......................: 82414 915.642582/s
iteration_duration.............: avg=1m5s min=44.88s med=1m10s max=1m14s p(90)=1m13s p(95)=1m13s
iterations.....................: 36 0.39997/s
vus............................: 21 min=2 max=50
vus_max........................: 50 min=50 max=50
checks.........................: 67.75% 35254 out of 52029
data_received..................: 92 MB 1.0 MB/s
data_sent......................: 3.8 MB 42 kB/s
dropped_iterations.............: 70 0.777606/s
http_req_blocked...............: avg=23.08µs min=232ns med=1µs max=103.63ms p(90)=1.42µs p(95)=1.56µs
http_req_connecting............: avg=977ns min=0s med=0s max=5.29ms p(90)=0s p(95)=0s
http_req_duration..............: avg=74.22ms min=3.71ms med=57.69ms max=366.12ms p(90)=157.54ms p(95)=180.86ms
{ expected_response:true }...: avg=68.87ms min=3.71ms med=52.82ms max=366.12ms p(90)=147.21ms p(95)=170.41ms
http_req_failed................: 32.24% 16775 out of 52029
http_req_receiving.............: avg=237.94µs min=18.29µs med=130.97µs max=11.5ms p(90)=498.83µs p(95)=758.8µs
http_req_sending...............: avg=116.57µs min=16.04µs med=104.78µs max=5.81ms p(90)=174.59µs p(95)=212.82µs
http_req_tls_handshaking.......: avg=19.29µs min=0s med=0s max=27.95ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=73.86ms min=3.02ms med=57.38ms max=365.81ms p(90)=157.13ms p(95)=180.31ms
http_reqs......................: 52029 577.972273/s
iteration_duration.............: avg=1m26s min=1m26s med=1m26s max=1m26s p(90)=1m26s p(95)=1m26s
iterations.....................: 3 0.033326/s
vus............................: 47 min=2 max=50
vus_max........................: 50 min=50 max=50
```
{{< tabs >}}
@ -1213,15 +1214,15 @@ vus_max........................: 50 min=50 max=50
{
label: 'Req/s',
data: [
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
880, 884, 538
34, 277, 442, 502, 566, 530, 612, 611, 593, 630, 577,
606, 619, 529, 568, 567, 599, 606, 559, 567, 557, 613,
604, 558, 617, 580, 607, 586, 581, 615, 564, 610, 612,
576, 596, 561, 610, 602, 561, 616, 571, 612, 604, 577,
586, 593, 595, 598, 566, 599, 592, 589, 585, 590, 603,
596, 608, 580, 571, 580, 583, 598, 606, 541, 581, 575,
595, 580, 591, 625, 577, 584, 601, 591, 585, 592, 620,
598, 574, 598, 571, 599, 596, 592, 603, 590, 593, 578,
599, 585, 113
]
}
]
@ -1240,10 +1241,10 @@ vus_max........................: 50 min=50 max=50
26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 49, 49, 50, 50, 50, 50, 50, 50,
49, 49, 49, 49, 48, 47, 46, 46, 46, 45, 45, 44,
43, 43, 43, 42, 41, 40, 40, 40, 38, 36, 35, 34,
32, 30, 29, 26, 25, 21
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 48, 47, 47, 47
]
}
]
@ -1254,14 +1255,14 @@ vus_max........................: 50 min=50 max=50
{
label: 'Duration (ms)',
data: [
20, 14, 12, 9, 10, 11, 12, 14, 16, 19, 21, 23,
26, 27, 32, 32, 36, 38, 38, 44, 41, 45, 46, 47,
54, 52, 51, 55, 54, 55, 54, 55, 54, 55, 53, 54,
49, 53, 51, 56, 50, 52, 53, 51, 55, 50, 53, 53,
49, 53, 53, 50, 53, 53, 57, 50, 52, 49, 52, 54,
54, 52, 50, 53, 54, 49, 49, 47, 49, 49, 47, 45,
50, 47, 47, 45, 44, 44, 41, 45, 42, 41, 39, 36,
38, 31, 33, 32, 31, 28, 24
28, 11, 11, 14, 16, 21, 21, 25, 28, 30, 36, 37,
40, 50, 50, 56, 55, 58, 64, 67, 73, 71, 75, 83,
79, 84, 83, 83, 88, 81, 89, 82, 81, 86, 83, 89,
81, 85, 87, 80, 88, 82, 81, 88, 84, 83, 84, 86,
86, 84, 83, 85, 86, 84, 81, 85, 81, 86, 88, 83,
86, 85, 83, 91, 86, 87, 86, 85, 85, 80, 84, 85,
83, 84, 85, 85, 82, 83, 85, 84, 84, 86, 84, 84,
84, 82, 86, 81, 81, 79, 80
]
}
]
@ -1275,11 +1276,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.01, 0.24, 0.65, 0.68,
0.66, 0.69, 0.68, 0.68,
0.68, 0.69, 0.69, 0.71,
0.69, 0.68, 0.7, 0.7,
0.69, 0.68, 0.65
0.02, 0.03, 0.53, 0.76,
0.8, 0.81, 0.83, 0.83,
0.83, 0.83, 0.83, 0.83,
0.8, 0.75, 0.83, 0.8,
0.83, 0.8, 0.75
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -1288,11 +1289,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.01, 0.08, 0.23, 0.26,
0.25, 0.28, 0.27, 0.25,
0.25, 0.25, 0.25, 0.27,
0.28, 0.26, 0.27, 0.28,
0.27, 0.24, 0.24
0.02, 0.02, 0.12, 0.17,
0.17, 0.17, 0.17, 0.17,
0.17, 0.17, 0.17, 0.17,
0.17, 0.16, 0.17, 0.17,
0.17, 0.17, 0.16
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -1306,11 +1307,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.02, 0.03, 0.24, 0.24,
0.25, 0.26, 0.28, 0.28,
0.29, 0.28, 0.29, 0.28,
0.27, 0.28, 0.29, 0.28,
0.28, 0.27, 0.28
0.02, 0.02, 0.17, 0.26,
0.24, 0.21, 0.22, 0.21,
0.22, 0.23, 0.22, 0.22,
0.22, 0.23, 0.22, 0.22,
0.23, 0.22, 0.22
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -1319,11 +1320,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.02, 0.02, 0.13, 0.16,
0.2, 0.23, 0.23, 0.24,
0.26, 0.26, 0.26, 0.23,
0.23, 0.25, 0.24, 0.25,
0.25, 0.23, 0.23
0.02, 0.02, 0.13, 0.21,
0.24, 0.26, 0.26, 0.22,
0.23, 0.26, 0.24, 0.26,
0.26, 0.25, 0.26, 0.26,
0.26, 0.26, 0.26
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -1953,23 +1954,23 @@ vus_max........................: 50 min=50 max=50
Iteration creation rate = **30/s**
```txt
checks.........................: 100.00% 60537 out of 60537
data_received..................: 1.4 GB 22 MB/s
data_sent......................: 5.4 MB 88 kB/s
dropped_iterations.............: 614 10.010036/s
http_req_blocked...............: avg=18.21µs min=164ns med=643ns max=119.65ms p(90)=1.2µs p(95)=1.39µs
http_req_connecting............: avg=1.19µs min=0s med=0s max=7.21ms p(90)=0s p(95)=0s
http_req_duration..............: avg=47.41ms min=3.21ms med=47.19ms max=150.24ms p(90)=64.58ms p(95)=70.42ms
{ expected_response:true }...: avg=47.41ms min=3.21ms med=47.19ms max=150.24ms p(90)=64.58ms p(95)=70.42ms
http_req_failed................: 0.00% 0 out of 60537
http_req_receiving.............: avg=1.27ms min=21.28µs med=577.04µs max=53.67ms p(90)=2.93ms p(95)=4.89ms
http_req_sending...............: avg=115.28µs min=14.99µs med=72.14µs max=30.87ms p(90)=151.69µs p(95)=216.28µs
http_req_tls_handshaking.......: avg=14.34µs min=0s med=0s max=52.71ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=46.02ms min=2.92ms med=46.04ms max=148.92ms p(90)=62.52ms p(95)=67.86ms
http_reqs......................: 60537 986.934156/s
iteration_duration.............: avg=2.48s min=1s med=2.51s max=2.79s p(90)=2.64s p(95)=2.68s
iterations.....................: 1187 19.35165/s
vus............................: 24 min=24 max=50
checks.........................: 100.00% 81702 out of 81702
data_received..................: 1.9 GB 31 MB/s
data_sent......................: 7.3 MB 120 kB/s
dropped_iterations.............: 199 3.262028/s
http_req_blocked...............: avg=12.12µs min=184ns med=633ns max=55.88ms p(90)=1.14µs p(95)=1.32µs
http_req_connecting............: avg=704ns min=0s med=0s max=7.92ms p(90)=0s p(95)=0s
http_req_duration..............: avg=34.17ms min=2.66ms med=33.04ms max=186.52ms p(90)=49.32ms p(95)=56.04ms
{ expected_response:true }...: avg=34.17ms min=2.66ms med=33.04ms max=186.52ms p(90)=49.32ms p(95)=56.04ms
http_req_failed................: 0.00% 0 out of 81702
http_req_receiving.............: avg=1.76ms min=16.84µs med=876.33µs max=42.4ms p(90)=4.11ms p(95)=6.3ms
http_req_sending...............: avg=120.32µs min=18.4µs med=75.84µs max=14.69ms p(90)=167.92µs p(95)=246.59µs
http_req_tls_handshaking.......: avg=9.86µs min=0s med=0s max=30.66ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=32.28ms min=1.77ms med=31.33ms max=185.44ms p(90)=46.46ms p(95)=52.38ms
http_reqs......................: 81702 1339.267336/s
iteration_duration.............: avg=1.79s min=655.17ms med=1.81s max=2.11s p(90)=1.93s p(95)=1.96s
iterations.....................: 1602 26.260144/s
vus............................: 1 min=1 max=50
vus_max........................: 50 min=50 max=50
```
@ -1981,14 +1982,15 @@ vus_max........................: 50 min=50 max=50
{
label: 'Req/s',
data: [
500, 987, 969, 985, 980, 1036, 987, 1003,
980, 965, 1017, 988, 1013, 948, 961, 1024,
989, 1018, 996, 981, 1016, 993, 981, 987,
964, 1020, 985, 1018, 997, 972, 1010, 994,
998, 1001, 970, 1028, 1021, 1000, 1013, 975,
1013, 965, 993, 972, 960, 1029, 975, 1005,
998, 962, 1024, 991, 1001, 981, 962, 1015,
985, 993, 1001, 968, 1008, 466
31, 1147, 1280, 1276, 1368, 1314, 1416,
1396, 1246, 1394, 1362, 1398, 1406, 1312,
1389, 1317, 1305, 1349, 1287, 1352, 1345,
1361, 1368, 1293, 1371, 1344, 1364, 1370,
1311, 1324, 1312, 1373, 1343, 1326, 1374,
1325, 1397, 1376, 1328, 1391, 1323, 1386,
1368, 1318, 1390, 1328, 1404, 1350, 1291,
1387, 1328, 1380, 1378, 1307, 1360, 1297,
1396, 1367, 1309, 1377, 1302, 1015
]
}
]
@ -2003,12 +2005,12 @@ vus_max........................: 50 min=50 max=50
{
label: 'VUs',
data: [
30, 46, 50, 50, 50, 50, 49, 50, 50, 49, 49, 46,
50, 50, 47, 50, 49, 50, 49, 48, 50, 49, 50, 50,
48, 50, 49, 49, 48, 50, 50, 48, 50, 50, 49, 49,
49, 49, 49, 50, 49, 50, 50, 50, 48, 47, 50, 50,
50, 48, 49, 50, 49, 50, 49, 50, 50, 49, 50, 50,
24
22, 32, 40, 46, 46, 50, 47, 48, 48, 47, 48, 45,
48, 49, 47, 49, 47, 49, 49, 47, 50, 50, 49, 47,
48, 49, 48, 48, 50, 46, 49, 48, 49, 48, 47, 48,
47, 49, 47, 50, 47, 49, 50, 47, 48, 48, 48, 48,
47, 48, 50, 48, 49, 47, 48, 47, 48, 50, 46, 47,
1
]
}
]
@ -2019,12 +2021,12 @@ vus_max........................: 50 min=50 max=50
{
label: 'Duration (ms)',
data: [
16, 31, 49, 49, 48, 47, 48, 48, 50, 48, 47, 49,
47, 51, 50, 47, 48, 48, 48, 49, 47, 49, 49, 49,
49, 47, 48, 48, 48, 49, 46, 49, 48, 47, 50, 46,
47, 48, 48, 49, 47, 49, 48, 49, 51, 47, 48, 48,
47, 50, 48, 48, 48, 49, 50, 47, 49, 48, 48, 49,
42, 22
16, 15, 22, 29, 34, 35, 33, 34, 38, 34, 34, 34,
33, 36, 34, 34, 37, 35, 37, 35, 35, 35, 34, 37,
34, 34, 35, 35, 36, 35, 36, 35, 35, 37, 34, 35,
34, 35, 36, 34, 35, 35, 33, 37, 33, 35, 34, 35,
37, 34, 35, 35, 33, 37, 35, 36, 34, 34, 36, 34,
36, 21
]
}
]
@ -2038,11 +2040,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.02, 0.1, 0.6, 0.58,
0.58, 0.58, 0.57, 0.58,
0.6, 0.58, 0.57, 0.58,
0.57, 0.57, 0.04, 0.01,
0.02, 0.02
0.02, 0.02, 0.6, 0.66,
0.66, 0.63, 0.64, 0.63,
0.65, 0.64, 0.64, 0.64,
0.65, 0.64, 0.17, 0.02,
0.01, 0.02, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -2051,11 +2053,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.01, 0.05, 0.25, 0.24,
0.23, 0.24, 0.25, 0.24,
0.24, 0.24, 0.24, 0.24,
0.25, 0.24, 0.03, 0.01,
0.02, 0.02
0.02, 0.01, 0.27, 0.29,
0.29, 0.28, 0.28, 0.29,
0.28, 0.28, 0.28, 0.29,
0.28, 0.28, 0.08, 0.01,
0.01, 0.01, 0.01
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -2069,11 +2071,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.01, 0.02, 0.5, 0.77,
0.76, 0.76, 0.76, 0.76,
0.77, 0.77, 0.75, 0.76,
0.76, 0.77, 0.42, 0.02,
0.02, 0.02, 0.02
0.02, 0.02, 0.58, 0.71,
0.73, 0.74, 0.73, 0.74,
0.73, 0.75, 0.74, 0.74,
0.74, 0.74, 0.24, 0.02,
0.01, 0.02, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -2082,11 +2084,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.02, 0.02, 0.17, 0.23,
0.23, 0.24, 0.24, 0.23,
0.23, 0.23, 0.23, 0.23,
0.23, 0.23, 0.14, 0.02,
0.02, 0.02, 0.02
0.02, 0.02, 0.19, 0.24,
0.23, 0.22, 0.23, 0.23,
0.23, 0.22, 0.23, 0.22,
0.22, 0.22, 0.08, 0.01,
0.02, 0.02, 0.01
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -2103,23 +2105,23 @@ vus_max........................: 50 min=50 max=50
Iteration creation rate = **10/s**
```txt
checks.........................: 100.00% 155200 out of 155200
data_received..................: 930 MB 14 MB/s
data_sent......................: 14 MB 206 kB/s
dropped_iterations.............: 500 7.429243/s
http_req_blocked...............: avg=7.19µs min=170ns med=579ns max=70.57ms p(90)=1.14µs p(95)=1.32µs
http_req_connecting............: avg=367ns min=0s med=0s max=4.55ms p(90)=0s p(95)=0s
http_req_duration..............: avg=20.06ms min=1.85ms med=17.93ms max=227.21ms p(90)=35.09ms p(95)=41.47ms
{ expected_response:true }...: avg=20.06ms min=1.85ms med=17.93ms max=227.21ms p(90)=35.09ms p(95)=41.47ms
http_req_failed................: 0.00% 0 out of 155200
http_req_receiving.............: avg=1.3ms min=16.13µs med=566.94µs max=41.66ms p(90)=3.1ms p(95)=5.12ms
http_req_sending...............: avg=94.15µs min=11.56µs med=62.76µs max=35.14ms p(90)=130.16µs p(95)=171.55µs
http_req_tls_handshaking.......: avg=5.61µs min=0s med=0s max=52.65ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=18.66ms min=0s med=16.5ms max=226.18ms p(90)=33.14ms p(95)=39.31ms
http_reqs......................: 155200 2306.036927/s
iteration_duration.............: avg=31.5s min=28.79s med=31.76s max=33.25s p(90)=32.83s p(95)=32.95s
iterations.....................: 100 1.485849/s
vus............................: 12 min=10 max=50
checks.........................: 100.00% 169168 out of 169168
data_received..................: 1.0 GB 14 MB/s
data_sent......................: 15 MB 213 kB/s
dropped_iterations.............: 492 6.923966/s
http_req_blocked...............: avg=6.5µs min=201ns med=682ns max=49.52ms p(90)=1.15µs p(95)=1.32µs
http_req_connecting............: avg=296ns min=0s med=0s max=3.92ms p(90)=0s p(95)=0s
http_req_duration..............: avg=18.09ms min=1.68ms med=16.09ms max=138.4ms p(90)=32.62ms p(95)=38.84ms
{ expected_response:true }...: avg=18.09ms min=1.68ms med=16.09ms max=138.4ms p(90)=32.62ms p(95)=38.84ms
http_req_failed................: 0.00% 0 out of 169168
http_req_receiving.............: avg=1.11ms min=16.62µs med=543.46µs max=35.08ms p(90)=2.62ms p(95)=4.16ms
http_req_sending...............: avg=99.48µs min=11.38µs med=75.49µs max=15.01ms p(90)=149.69µs p(95)=200.71µs
http_req_tls_handshaking.......: avg=5.01µs min=0s med=0s max=25.8ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=16.88ms min=0s med=14.83ms max=136.41ms p(90)=30.95ms p(95)=37.04ms
http_reqs......................: 169168 2380.718287/s
iteration_duration.............: avg=28.45s min=11.15s med=30.18s max=31.36s p(90)=31.06s p(95)=31.12s
iterations.....................: 109 1.533968/s
vus............................: 1 min=1 max=50
vus_max........................: 50 min=50 max=50
```
@ -2131,15 +2133,15 @@ vus_max........................: 50 min=50 max=50
{
label: 'Req/s',
data: [
180, 1475, 1881, 1960, 1863, 2200, 2252, 2434,
2455, 2328, 2416, 2404, 2395, 2326, 2170, 2357,
2314, 2513, 2381, 2355, 2438, 2318, 2496, 2455,
2375, 2358, 2309, 2498, 2439, 2409, 2293, 2370,
2363, 2383, 2290, 2339, 2316, 2460, 2386, 2413,
2263, 2320, 2508, 2199, 2323, 2374, 2273, 2441,
2319, 2344, 2328, 2328, 2507, 2430, 2307, 2431,
2291, 2380, 2494, 2388, 2265, 2362, 2418, 2456,
2245, 2323, 2199, 1317
13, 1111, 1992, 2356, 2484, 2319, 2500, 2480,
2551, 2589, 2489, 2593, 2499, 2624, 2531, 2438,
2553, 2400, 2585, 2524, 2341, 2473, 2479, 2630,
2549, 2467, 2519, 2482, 2583, 2572, 2393, 2439,
2488, 2566, 2547, 2415, 2498, 2457, 2574, 2531,
2472, 2537, 2494, 2514, 2584, 2425, 2493, 2421,
2564, 2558, 2320, 2435, 2471, 2537, 2592, 2446,
2566, 2471, 2597, 2565, 2379, 2464, 2391, 2533,
2415, 1875, 1710, 1707, 1773, 1749, 1688, 788
]
}
]
@ -2156,10 +2158,10 @@ vus_max........................: 50 min=50 max=50
data: [
10, 20, 30, 40, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 50, 48,
47, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 48, 49, 49, 50, 49, 49, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
50, 49, 44, 40, 34, 27, 12
50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 49, 50,
46, 40, 35, 27, 9, 9, 9, 9, 9, 9, 1
]
}
]
@ -2170,12 +2172,12 @@ vus_max........................: 50 min=50 max=50
{
label: 'Duration (ms)',
data: [
8, 7, 11, 15, 21, 22, 22, 20, 20, 21, 20, 21,
20, 21, 23, 21, 21, 20, 21, 21, 20, 21, 20, 20,
21, 21, 21, 20, 20, 21, 21, 21, 21, 20, 21, 21,
21, 19, 21, 20, 22, 21, 20, 22, 21, 21, 22, 20,
21, 21, 21, 21, 20, 20, 21, 20, 22, 21, 20, 21,
22, 21, 20, 18, 17, 14, 12, 7
32, 7, 9, 12, 15, 20, 20, 20, 20, 19, 20, 19,
19, 19, 19, 20, 19, 20, 19, 20, 21, 20, 20, 19,
19, 20, 20, 20, 19, 19, 21, 20, 20, 19, 19, 20,
19, 20, 19, 20, 20, 20, 20, 20, 19, 20, 20, 20,
19, 19, 21, 20, 20, 20, 19, 20, 19, 20, 19, 19,
21, 19, 17, 14, 12, 6, 5, 5, 5, 5, 5, 5
]
}
]
@ -2189,11 +2191,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.01, 0.04, 0.49, 0.59,
0.58, 0.6, 0.6, 0.59,
0.58, 0.59, 0.59, 0.59,
0.61, 0.58, 0.6, 0.17,
0.02, 0.01, 0.01
0.02, 0.02, 0.2, 0.6,
0.6, 0.59, 0.59, 0.6,
0.59, 0.6, 0.59, 0.6,
0.59, 0.58, 0.59, 0.53,
0.4, 0.02, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -2202,11 +2204,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.01, 0.03, 0.31, 0.35,
0.36, 0.37, 0.35, 0.35,
0.37, 0.37, 0.37, 0.37,
0.37, 0.37, 0.37, 0.12,
0.01, 0.01, 0.01
0.02, 0.01, 0.11, 0.38,
0.38, 0.38, 0.38, 0.37,
0.39, 0.38, 0.38, 0.38,
0.38, 0.4, 0.39, 0.4,
0.3, 0.01, 0.02
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -2220,11 +2222,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'User',
data: [
0.02, 0.02, 0.23, 0.46,
0.49, 0.48, 0.51, 0.5,
0.49, 0.48, 0.49, 0.48,
0.49, 0.51, 0.5, 0.36,
0.02, 0.02, 0.02
0.02, 0.01, 0.09, 0.38,
0.4, 0.4, 0.4, 0.4,
0.4, 0.4, 0.4, 0.4,
0.41, 0.41, 0.41, 0.35,
0.25, 0.01, 0.02
],
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
@ -2233,11 +2235,11 @@ vus_max........................: 50 min=50 max=50
{
label: 'System',
data: [
0.02, 0.01, 0.17, 0.33,
0.35, 0.36, 0.36, 0.35,
0.34, 0.36, 0.35, 0.36,
0.36, 0.34, 0.35, 0.26,
0.02, 0.02, 0.02
0.02, 0.02, 0.07, 0.27,
0.29, 0.3, 0.29, 0.3,
0.29, 0.3, 0.28, 0.28,
0.29, 0.29, 0.29, 0.26,
0.19, 0.02, 0.02
],
borderColor: '#ff6384',
backgroundColor: '#ff6384',
@ -2290,13 +2292,13 @@ Here are the final req/s results for each framework against PgSQL database.
borderColor: "#0f766e",
backgroundColor: "#0f766e",
data: [
205, 686, 625, 657, 643, 684, 625, 652, 606,
656, 610, 662, 672, 687, 647, 650, 636, 663,
665, 617, 600, 621, 637, 655, 628, 681, 649,
637, 662, 568, 669, 667, 630, 625, 630, 685,
654, 647, 667, 631, 618, 656, 614, 695, 650,
659, 629, 638, 646, 609, 642, 661, 647, 677,
601, 662, 665, 608, 671, 628, 632, 629, 150
30, 575, 674, 684, 617, 668, 634, 638, 647,
621, 662, 661, 670, 659, 617, 672, 644, 653,
623, 606, 663, 650, 634, 666, 625, 652, 650,
671, 651, 617, 598, 620, 624, 626, 602, 657,
646, 649, 650, 638, 669, 640, 639, 636, 628,
636, 654, 651, 668, 643, 663, 645, 644, 618,
575, 627, 622, 660, 643, 644, 637, 626, 413
],
},
{
@ -2334,14 +2336,15 @@ Here are the final req/s results for each framework against PgSQL database.
borderColor: "#6d28d9",
backgroundColor: "#6d28d9",
data: [
500, 987, 969, 985, 980, 1036, 987, 1003,
980, 965, 1017, 988, 1013, 948, 961, 1024,
989, 1018, 996, 981, 1016, 993, 981, 987,
964, 1020, 985, 1018, 997, 972, 1010, 994,
998, 1001, 970, 1028, 1021, 1000, 1013, 975,
1013, 965, 993, 972, 960, 1029, 975, 1005,
998, 962, 1024, 991, 1001, 981, 962, 1015,
985, 993, 1001, 968, 1008, 466
31, 1147, 1280, 1276, 1368, 1314, 1416,
1396, 1246, 1394, 1362, 1398, 1406, 1312,
1389, 1317, 1305, 1349, 1287, 1352, 1345,
1361, 1368, 1293, 1371, 1344, 1364, 1370,
1311, 1324, 1312, 1373, 1343, 1326, 1374,
1325, 1397, 1376, 1328, 1391, 1323, 1386,
1368, 1318, 1390, 1328, 1404, 1350, 1291,
1387, 1328, 1380, 1378, 1307, 1360, 1297,
1396, 1367, 1309, 1377, 1302, 1015
],
},
]
@ -2386,15 +2389,15 @@ Here are the final req/s results for each framework against PgSQL database.
borderColor: "#0f766e",
backgroundColor: "#0f766e",
data: [
12, 155, 362, 681, 799, 914, 973, 975, 984, 928, 959,
964, 934, 975, 874, 924, 883, 908, 931, 888, 983, 935,
967, 959, 898, 942, 939, 935, 933, 904, 926, 909, 911,
904, 945, 929, 990, 962, 973, 896, 998, 962, 930, 983,
891, 1007, 944, 925, 983, 952, 938, 984, 939, 936, 872,
959, 996, 983, 968, 945, 909, 964, 973, 897, 921, 996,
953, 986, 941, 929, 942, 966, 880, 943, 901, 956, 925,
944, 967, 899, 935, 937, 924, 960, 899, 999, 917, 891,
880, 884, 538
34, 277, 442, 502, 566, 530, 612, 611, 593, 630, 577,
606, 619, 529, 568, 567, 599, 606, 559, 567, 557, 613,
604, 558, 617, 580, 607, 586, 581, 615, 564, 610, 612,
576, 596, 561, 610, 602, 561, 616, 571, 612, 604, 577,
586, 593, 595, 598, 566, 599, 592, 589, 585, 590, 603,
596, 608, 580, 571, 580, 583, 598, 606, 541, 581, 575,
595, 580, 591, 625, 577, 584, 601, 591, 585, 592, 620,
598, 574, 598, 571, 599, 596, 592, 603, 590, 593, 578,
599, 585, 113
],
},
{