This commit is contained in:
stef
2026-04-25 23:14:07 +02:00
commit 9fef8ec260
7 changed files with 1184 additions and 0 deletions

208
stress_test_report.html Normal file
View File

@@ -0,0 +1,208 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Stress Test Report</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
.container { max-width: 1200px; margin: auto; background: white; padding: 20px; border-radius: 10px; }
h1, h2 { color: #333; }
.metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; margin: 20px 0; }
.metric-card { background: #f9f9f9; padding: 15px; border-radius: 5px; border-left: 4px solid #007bff; }
.metric-value { font-size: 24px; font-weight: bold; margin: 10px 0; }
.metric-label { color: #666; font-size: 12px; text-transform: uppercase; }
canvas { margin: 20px 0; max-height: 400px; }
.error-list { max-height: 300px; overflow-y: auto; }
.error-item { padding: 5px; border-bottom: 1px solid #eee; }
</style>
</head>
<body>
<div class="container">
<h1>Stress Test Report</h1>
<p>Generated: 2026-04-25 22:35:54</p>
<h2>Summary Metrics</h2>
<div class="metrics-grid">
<div class="metric-card">
<div class="metric-label">Total Requests</div>
<div class="metric-value">335949</div>
</div>
<div class="metric-card">
<div class="metric-label">Success Rate</div>
<div class="metric-value">100.00%</div>
</div>
<div class="metric-card">
<div class="metric-label">Avg RPS</div>
<div class="metric-value">554.28</div>
</div>
<div class="metric-card">
<div class="metric-label">Avg Latency</div>
<div class="metric-value">81.00 ms</div>
</div>
<div class="metric-card">
<div class="metric-label">P95 Latency</div>
<div class="metric-value">134.00 ms</div>
</div>
<div class="metric-card">
<div class="metric-label">P99 Latency</div>
<div class="metric-value">166.00 ms</div>
</div>
</div>
<h2>RPS Over Time</h2>
<canvas id="rpsChart"></canvas>
<h2>Latency Over Time</h2>
<canvas id="latencyChart"></canvas>
<h2>Error Rate Over Time</h2>
<canvas id="errorChart"></canvas>
<h2>Errors by Type</h2>
<div class="error-list">
<div>Aucune erreur détectée</div>
</div>
</div>
<script>
const timeLabels = ["22:25:48","22:25:53","22:25:58","22:26:03","22:26:08","22:26:13","22:26:18","22:26:23","22:26:28","22:26:33","22:26:38","22:26:43","22:26:48","22:26:53","22:26:58","22:27:03","22:27:08","22:27:13","22:27:18","22:27:23","22:27:28","22:27:33","22:27:38","22:27:43","22:27:48","22:27:53","22:27:58","22:28:03","22:28:08","22:28:13","22:28:18","22:28:23","22:28:28","22:28:33","22:28:38","22:28:43","22:28:48","22:28:53","22:28:58","22:29:03","22:29:08","22:29:13","22:29:18","22:29:23","22:29:28","22:29:33","22:29:38","22:29:43","22:29:48","22:29:53","22:29:58","22:30:03","22:30:08","22:30:13","22:30:18","22:30:23","22:30:28","22:30:33","22:30:38","22:30:43","22:30:48","22:30:53","22:30:58","22:31:03","22:31:08","22:31:13","22:31:18","22:31:23","22:31:28","22:31:33","22:31:38","22:31:43","22:31:48","22:31:53","22:31:58","22:32:03","22:32:08","22:32:13","22:32:18","22:32:23","22:32:28","22:32:33","22:32:38","22:32:43","22:32:48","22:32:53","22:32:58","22:33:03","22:33:08","22:33:13","22:33:18","22:33:23","22:33:28","22:33:33","22:33:38","22:33:43","22:33:48","22:33:53","22:33:58","22:34:03","22:34:08","22:34:13","22:34:18","22:34:23","22:34:28","22:34:33","22:34:38","22:34:43","22:34:48","22:34:53","22:34:58","22:35:03","22:35:08","22:35:13","22:35:18","22:35:23","22:35:28","22:35:33","22:35:38","22:35:43","22:35:48","22:35:53"];
// RPS Chart
new Chart(document.getElementById('rpsChart'), {
type: 'line',
data: {
labels: timeLabels,
datasets: [{
label: 'Requests per Second',
data: [619.69,648.42,641.16,682.09,744.66,567.38,454.94,468.47,454.74,434.35,406.74,446.45,624.67,590.69,614.57,728.16,654.03,682.09,479.71,474.66,461.95,477.86,469.07,454.97,557.20,601.21,648.40,636.91,705.74,700.97,502.31,470.95,472.41,473.38,475.95,459.12,470.79,669.21,607.68,630.38,707.98,659.33,599.97,474.19,473.49,483.20,472.80,445.80,470.55,582.10,565.29,638.73,642.62,714.38,641.69,475.18,463.17,480.45,470.18,453.12,466.31,564.10,625.59,597.41,681.39,684.50,683.79,511.00,459.09,469.12,472.77,455.77,465.22,532.59,611.48,644.78,655.79,646.57,722.74,568.14,451.43,476.56,478.74,456.96,469.98,482.45,622.32,642.95,606.93,680.04,665.61,651.16,464.14,480.32,475.97,446.70,466.91,456.04,611.98,596.76,645.54,658.86,666.10,704.09,475.52,481.27,471.74,448.53,465.66,403.86,498.46,614.74,648.77,632.50,695.50,649.66,573.81,470.67,470.76,453.76,468.74,507.20],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.1)',
tension: 0.1,
fill: true
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
plugins: {
legend: { position: 'top' },
tooltip: { mode: 'index', intersect: false }
},
scales: {
y: {
beginAtZero: true,
title: { display: true, text: 'Requests per Second' }
},
x: {
title: { display: true, text: 'Time' },
ticks: {
maxRotation: 45,
minRotation: 45,
autoSkip: true,
maxTicksLimit: 15
}
}
}
}
});
// Latency Chart
new Chart(document.getElementById('latencyChart'), {
type: 'line',
data: {
labels: timeLabels,
datasets: [
{
label: 'Avg Latency (ms)',
data: [3.00,9.00,15.00,19.00,23.00,35.00,52.00,58.00,67.00,79.00,92.00,92.00,74.00,81.00,79.00,67.00,74.00,71.00,97.00,99.00,102.00,98.00,100.00,103.00,86.00,80.00,75.00,76.00,70.00,70.00,94.00,100.00,99.00,99.00,98.00,102.00,100.00,73.00,79.00,77.00,69.00,74.00,80.00,100.00,99.00,97.00,99.00,106.00,100.00,84.00,86.00,76.00,76.00,69.00,75.00,100.00,101.00,97.00,99.00,104.00,100.00,85.00,77.00,81.00,72.00,71.00,71.00,92.00,102.00,100.00,99.00,104.00,100.00,90.00,79.00,75.00,74.00,75.00,68.00,84.00,104.00,98.00,98.00,102.00,100.00,97.00,78.00,76.00,79.00,72.00,73.00,75.00,101.00,98.00,98.00,105.00,100.00,103.00,79.00,80.00,75.00,74.00,73.00,69.00,98.00,98.00,99.00,104.00,101.00,114.00,97.00,79.00,74.00,77.00,70.00,75.00,83.00,99.00,100.00,103.00,101.00,96.00],
borderColor: 'rgb(255, 99, 132)',
backgroundColor: 'rgba(255, 99, 132, 0.1)',
tension: 0.1,
fill: true
},
{
label: 'Min Latency (ms)',
data: [0.00,1.00,3.00,6.00,11.00,4.00,11.00,14.00,15.00,15.00,34.00,15.00,41.00,31.00,28.00,39.00,33.00,43.00,24.00,39.00,20.00,34.00,33.00,33.00,30.00,28.00,33.00,33.00,33.00,26.00,29.00,39.00,38.00,36.00,35.00,15.00,24.00,30.00,40.00,31.00,49.00,26.00,26.00,29.00,44.00,42.00,35.00,19.00,37.00,26.00,34.00,28.00,28.00,31.00,34.00,24.00,28.00,42.00,38.00,36.00,39.00,32.00,29.00,19.00,20.00,32.00,30.00,34.00,37.00,36.00,41.00,33.00,35.00,37.00,30.00,27.00,35.00,21.00,48.00,22.00,25.00,25.00,34.00,38.00,14.00,28.00,32.00,41.00,27.00,24.00,26.00,28.00,22.00,33.00,34.00,19.00,36.00,25.00,13.00,28.00,19.00,31.00,26.00,18.00,44.00,28.00,40.00,27.00,35.00,32.00,39.00,33.00,22.00,34.00,33.00,18.00,33.00,34.00,38.00,31.00,31.00,51.00],
borderColor: 'rgb(54, 162, 235)',
backgroundColor: 'rgba(54, 162, 235, 0.1)',
tension: 0.1,
fill: true
},
{
label: 'Max Latency (ms)',
data: [22.00,30.00,44.00,88.00,67.00,125.00,137.00,169.00,172.00,206.00,224.00,207.00,183.00,217.00,258.00,210.00,192.00,197.00,223.00,200.00,239.00,264.00,250.00,279.00,232.00,208.00,220.00,188.00,199.00,180.00,237.00,223.00,234.00,191.00,208.00,261.00,224.00,188.00,231.00,266.00,164.00,197.00,206.00,215.00,212.00,187.00,263.00,246.00,211.00,302.00,271.00,268.00,194.00,158.00,190.00,213.00,237.00,201.00,186.00,287.00,223.00,250.00,272.00,211.00,238.00,247.00,216.00,208.00,259.00,208.00,284.00,232.00,217.00,196.00,249.00,273.00,188.00,190.00,177.00,193.00,233.00,211.00,230.00,254.00,275.00,199.00,199.00,214.00,218.00,246.00,168.00,192.00,249.00,208.00,227.00,247.00,187.00,228.00,242.00,197.00,251.00,248.00,208.00,154.00,218.00,191.00,199.00,234.00,225.00,381.00,403.00,179.00,216.00,236.00,209.00,229.00,196.00,200.00,217.00,221.00,211.00,150.00],
borderColor: 'rgb(255, 206, 86)',
backgroundColor: 'rgba(255, 206, 86, 0.1)',
tension: 0.1,
fill: true
}
]
},
options: {
responsive: true,
maintainAspectRatio: true,
plugins: {
legend: { position: 'top' },
tooltip: { mode: 'index', intersect: false }
},
scales: {
y: {
beginAtZero: true,
title: { display: true, text: 'Latency (ms)' }
},
x: {
title: { display: true, text: 'Time' },
ticks: {
maxRotation: 45,
minRotation: 45,
autoSkip: true,
maxTicksLimit: 15
}
}
}
}
});
// Error Rate Chart
new Chart(document.getElementById('errorChart'), {
type: 'line',
data: {
labels: timeLabels,
datasets: [{
label: 'Error Rate (%)',
data: [0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00],
borderColor: 'rgb(255, 99, 132)',
backgroundColor: 'rgba(255, 99, 132, 0.1)',
tension: 0.1,
fill: true
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
plugins: {
legend: { position: 'top' },
tooltip: { mode: 'index', intersect: false }
},
scales: {
y: {
beginAtZero: true,
max: 100,
title: { display: true, text: 'Error Rate (%)' }
},
x: {
title: { display: true, text: 'Time' },
ticks: {
maxRotation: 45,
minRotation: 45,
autoSkip: true,
maxTicksLimit: 15
}
}
}
}
});
</script>
</body>
</html>