Teil unserer Performance & Scalability-Serie
Den vollständigen Leitfaden lesenAuslastungsteststrategien für Webanwendungen: Finden Sie Schwachstellen, bevor Benutzer es tun
80 % der Leistungsprobleme werden von Endbenutzern entdeckt, nicht durch Tests. Lasttests kehren dieses Verhältnis um, indem sie reale Verkehrsmuster für Ihre Anwendung simulieren, bevor Benutzer auf Probleme stoßen. Der Unterschied zwischen einer Website, die den Black Friday-Verkehr verarbeitet, und einer Website, die abstürzt, besteht fast immer darin, ob jemand zuerst einen Auslastungstest durchgeführt hat.
Dieser Leitfaden behandelt die Auslastungstestmethodik, die Toolauswahl, das Testdesign und die Ergebnisinterpretation für Webanwendungen, E-Commerce-Plattformen und ERP-Systeme.
Wichtige Erkenntnisse
- Lasttests sollten realistisches Benutzerverhalten simulieren und nicht nur einen einzelnen Endpunkt belasten
- Legen Sie vor der Optimierung Leistungsgrundwerte fest – Sie können nicht verbessern, was Sie nicht gemessen haben
- Lasttests in einer produktionsähnlichen Umgebung durchführen; Die Staging-Ergebnisse spiegeln möglicherweise nicht das Produktionsverhalten wider – Automatisieren Sie Lasttests in CI/CD, um Leistungsrückgänge vor der Bereitstellung zu erkennen
Arten von Lasttests
| Testtyp | Zweck | Dauer | Muster laden |
|---|---|---|---|
| Rauchtest | Überprüfen Sie die Grundfunktionalität unter minimaler Last | 1-2 Minuten | 1-5 Benutzer |
| Belastungstest | Leistung unter erwartetem Datenverkehr validieren | 10-30 Minuten | Normaler Verkehr |
| Stresstest | Finden Sie den Bruchpunkt | 15-30 Minuten | Allmählich zunehmend |
| Spike-Test | Testen Sie plötzliche Verkehrsanstiege | 5-10 Minuten | Plötzlicher Sprung |
| Einweichtest | Speicherlecks und -verschlechterung erkennen | 2-8 Stunden | Anhaltende Normallast |
Lasttest mit k6
Grundlegender Lasttest
// k6/load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 }, // Ramp up to 50 users
{ duration: '5m', target: 50 }, // Stay at 50 users
{ duration: '2m', target: 100 }, // Ramp up to 100 users
{ duration: '5m', target: 100 }, // Stay at 100 users
{ duration: '2m', target: 0 }, // Ramp down
],
thresholds: {
http_req_duration: ['p(95)<500', 'p(99)<1000'],
http_req_failed: ['rate<0.01'],
http_reqs: ['rate>100'],
},
};
export default function () {
// Simulate realistic user behavior
const homeResponse = http.get('https://example.com/');
check(homeResponse, {
'homepage status is 200': (r) => r.status === 200,
'homepage loads in under 1s': (r) => r.timings.duration < 1000,
});
sleep(Math.random() * 3 + 1); // 1-4 seconds think time
const productsResponse = http.get('https://example.com/api/v1/products');
check(productsResponse, {
'products API is 200': (r) => r.status === 200,
'products API under 500ms': (r) => r.timings.duration < 500,
});
sleep(Math.random() * 2 + 1);
}
E-Commerce-User-Journey-Test
// k6/ecommerce-journey.js
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export const options = {
scenarios: {
browsing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 200 },
{ duration: '10m', target: 200 },
{ duration: '5m', target: 0 },
],
exec: 'browsingScenario',
},
purchasing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 20 },
{ duration: '10m', target: 20 },
{ duration: '5m', target: 0 },
],
exec: 'purchaseScenario',
},
},
thresholds: {
'http_req_duration{scenario:browsing}': ['p(95)<800'],
'http_req_duration{scenario:purchasing}': ['p(95)<2000'],
http_req_failed: ['rate<0.01'],
},
};
export function browsingScenario() {
group('Browse Products', () => {
http.get('https://store.example.com/');
sleep(2);
http.get('https://store.example.com/products');
sleep(3);
http.get('https://store.example.com/products/sample-product');
sleep(2);
});
}
export function purchaseScenario() {
group('Purchase Flow', () => {
// Browse
http.get('https://store.example.com/products/sample-product');
sleep(1);
// Add to cart
http.post('https://store.example.com/api/cart', JSON.stringify({
productId: 'prod_123',
quantity: 1,
}), { headers: { 'Content-Type': 'application/json' } });
sleep(2);
// Checkout
http.get('https://store.example.com/cart');
sleep(3);
// Place order (simulated)
const orderResponse = http.post('https://store.example.com/api/checkout/validate', JSON.stringify({
email: `test-${__VU}@example.com`,
}), { headers: { 'Content-Type': 'application/json' } });
check(orderResponse, {
'checkout validates': (r) => r.status === 200 || r.status === 201,
});
sleep(1);
});
}
Stresstest (Den Bruchpunkt finden)
// k6/stress-test.js
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 },
{ duration: '5m', target: 200 },
{ duration: '2m', target: 500 },
{ duration: '5m', target: 500 },
{ duration: '2m', target: 1000 },
{ duration: '5m', target: 1000 },
{ duration: '5m', target: 0 },
],
};
export default function () {
const res = http.get('https://example.com/api/v1/products');
check(res, {
'status is 200': (r) => r.status === 200,
});
}
Ergebnisse interpretieren
Schlüsselmetriken
| Metrisch | Gesund | Warnung | Kritisch |
|---|---|---|---|
| P95 Reaktionszeit | <500ms | 500ms-2s | >2s |
| P99 Reaktionszeit | <1s | 1-5s | >5s |
| Fehlerrate | <0,1 % | 0,1-1 % | >1% |
| Durchsatz | Erfüllt Ziel | 80 % des Ziels | <80 % des Ziels |
Häufige Engpassmuster
CPU-bedingter Engpass: Die Reaktionszeit steigt linear mit der Auslastung. P95 und P99 weichen langsam voneinander ab.
- Fix: Hot-Code-Pfade optimieren, CPU-Kapazität hinzufügen oder horizontal skalieren
Datenbankengpass: Die Reaktionszeit steigt bei einem bestimmten Lastschwellenwert exponentiell an. Erschöpfung des Verbindungspools.
- Fix: Abfrageoptimierung, Verbindungspooling, Lesereplikate (siehe Anleitung zur Datenbankskalierung)
Speicherengpass: Allmähliche Verschlechterung im Laufe der Zeit. GC-Pausen verursachen Latenzspitzen.
- Fix: Speicher erhöhen, Speicherlecks beheben, Objektzuordnung optimieren
Netzwerkengpass: Die Reaktionszeit erhöht sich gleichmäßig über alle Endpunkte hinweg. Bandbreitensättigung. – Fix: CDN für statische Assets, Komprimierung, Reduzierung der Nutzlastgrößen
Leistungsbasislinien
Festlegung einer Baseline
Dokumentieren Sie vor der Optimierung Ihre aktuelle Leistung:
# Run baseline test
k6 run --out json=baseline-results.json k6/load-test.js
# Compare after optimization
k6 run --out json=optimized-results.json k6/load-test.js
Leistungsbudget
Definieren Sie eine akzeptable Leistung für jeden Endpunkt:
| Endpunkt | P95 Ziel | Durchsatzziel |
|---|---|---|
| Startseite | 500ms | 200 Anforderungen/s |
| Produktliste | 800ms | 150 Anforderungen/s |
| Produktdetails | 600ms | 200 Anforderungen/s |
| In den Warenkorb legen | 300ms | 100 Anforderungen/s |
| Kasse | 2000ms | 50 Anforderungen/s |
| Suchen | 500ms | 100 Anforderungen/s |
| Admin-Dashboard | 1500ms | 20 Anforderungen/s |
CI/CD-Integration
Automatisierte Leistungsregressionstests
# .github/workflows/performance.yml
name: Performance Test
on:
push:
branches: [main]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 load test
uses: grafana/[email protected]
with:
filename: k6/load-test.js
flags: --out json=results.json
env:
K6_TARGET_URL: ${{ secrets.STAGING_URL }}
- name: Check thresholds
run: |
if grep -q '"thresholds":{".*":"fail"' results.json; then
echo "Performance thresholds exceeded!"
exit 1
fi
Checkliste für Auslastungstests
Vor dem Testen
- Umgebung entspricht der Produktion (Instanztypen, Datenbankgröße)
- Testdaten sind repräsentativ (realistische Produktanzahl, Benutzeranzahl)
- Überwachung ist aktiv (Servermetriken während des Tests verfolgen)
- Stakeholder werden benachrichtigt (Belastungstests können Warnungen auslösen)
- CDN und Caching sind wie in der Produktion konfiguriert
Während des Tests
- Server-CPU, Speicher, Festplatten-E/A überwachen
- Überwachen Sie Datenbankverbindungen und Abfragelatenz
- Achten Sie auf einen Anstieg der Fehlerquote
- Auf Ressourcenerschöpfung prüfen (Dateideskriptoren, Verbindungen)
- Beachten Sie die Laststufe, bei der die Leistung nachlässt
Nach dem Testen
- Basisergebnisse dokumentieren
- Identifizieren Sie Engpässe und deren Auslastungsschwellen
- Erstellen Sie Tickets für Leistungsverbesserungen
- Mit Leistungsbudget vergleichen
- Planen Sie Folgetests nach Optimierungen
Häufig gestellte Fragen
Sollten wir die Testproduktion oder das Staging laden?
Wenn möglich beides. Staging für regelmäßige Tests und CI/CD-Integration. Produktion zur regelmäßigen Validierung (während verkehrsarmer Zeiten), da sich das Staging häufig in der Datenbankgröße, der Cache-Wärme, der CDN-Konfiguration und der Netzwerktopologie unterscheidet. Wenn Sie nur eine Umgebung testen können, testen Sie das Staging, aber machen Sie es so produktionsähnlich wie möglich.
Wie oft sollten wir Auslastungstests durchführen?
Rauchtests bei jeder Bereitstellung (automatisiert in CI/CD). Volllasttests wöchentlich oder vor Hauptversionen. Stresstests vierteljährlich oder vor bekanntermaßen stark frequentierten Ereignissen (Verkäufe, Markteinführungen). Halten Sie vierteljährlich Tests ab, um Speicherlecks und langfristige Verschlechterungen zu erkennen.
Wie führen wir einen Lasttest eines ERP-Systems durch?
Beim ERP-Lasttest müssen gleichzeitige Benutzer simuliert werden, die verschiedene Aufgaben ausführen: Rechnungen erstellen, Bestellungen erstellen, Berichte ausführen, Daten importieren. Konzentrieren Sie sich auf die schwersten Vorgänge (Berichterstellung, Datenimporte) und die gleichzeitigsten Vorgänge (Auftragseingabe während der Spitzenzeiten). ECOSIRE bietet im Rahmen unserer Supportleistungen Odoo-Leistungstests an.
Was ist eine realistische Bedenkzeit zwischen Anfragen?
Für E-Commerce-Browsing: 2–5 Sekunden. Zum Ausfüllen des Formulars: 10–30 Sekunden. Zur Kasse: 15–60 Sekunden. Für Administrator-/ERP-Nutzung: 5–15 Sekunden. Fügen Sie Ihren Belastungstests immer eine zufällige Bedenkzeit hinzu – konstante Intervalle führen zu unrealistischen synchronisierten Belastungsmustern.
Was als nächstes kommt
Lasttests decken Engpässe auf, die Ihre Optimierungsbemühungen leiten. Führen Sie anschließend Datenbankskalierung für Datenbankengpässe, CDN-Optimierung für die Bereitstellung statischer Assets und automatische Skalierung für elastische Kapazität durch.
Kontaktieren Sie ECOSIRE für Leistungstests und -optimierungen oder erkunden Sie unseren DevOps-Leitfaden für die vollständige Infrastrukturstrategie.
Herausgegeben von ECOSIRE – Unterstützung von Unternehmen bei der Entwicklung von Anwendungen, die unter Druck funktionieren.
Geschrieben von
ECOSIRE Research and Development Team
Entwicklung von Enterprise-Digitalprodukten bei ECOSIRE. Einblicke in Odoo-Integrationen, E-Commerce-Automatisierung und KI-gestützte Geschäftslösungen.
Verwandte Artikel
Power BI-Leistungsoptimierung: DAX, Modelle und Abfragen
Optimieren Sie die Leistung von Power BI-Berichten mit DAX Studio-Analyse, Korrekturen langsamer DAX-Muster, Reduzierung der Modellgröße, Aggregationstabellen und Kapazitätsoptimierung.
Optimierung der Leistung von KI-Agenten: Geschwindigkeit, Genauigkeit und Kosteneffizienz
Optimieren Sie die Leistung von KI-Agenten in Bezug auf Reaktionszeit, Genauigkeit und Kosten mit bewährten Techniken für schnelles Engineering, Caching, Modellauswahl und Überwachung.
API-Gateway-Muster und Best Practices für moderne Anwendungen
Implementieren Sie API-Gateway-Muster einschließlich Ratenbegrenzung, Authentifizierung, Anforderungsrouting, Leistungsschalter und API-Versionierung für skalierbare Webarchitekturen.
Mehr aus Performance & Scalability
Power BI-Leistungsoptimierung: DAX, Modelle und Abfragen
Optimieren Sie die Leistung von Power BI-Berichten mit DAX Studio-Analyse, Korrekturen langsamer DAX-Muster, Reduzierung der Modellgröße, Aggregationstabellen und Kapazitätsoptimierung.
Optimierung der Leistung von KI-Agenten: Geschwindigkeit, Genauigkeit und Kosteneffizienz
Optimieren Sie die Leistung von KI-Agenten in Bezug auf Reaktionszeit, Genauigkeit und Kosten mit bewährten Techniken für schnelles Engineering, Caching, Modellauswahl und Überwachung.
Testen und Überwachen von KI-Agenten: Zuverlässigkeitstechnik für autonome Systeme
Vollständiger Leitfaden zum Testen und Überwachen von KI-Agenten, der Unit-Tests, Integrationstests, Verhaltenstests, Beobachtbarkeit und Produktionsüberwachungsstrategien umfasst.
CDN-Leistungsoptimierung: Der vollständige Leitfaden für eine schnellere globale Bereitstellung
Optimieren Sie die CDN-Leistung mit Caching-Strategien, Edge Computing, Bildoptimierung und Multi-CDN-Architekturen für eine schnellere globale Inhaltsbereitstellung.
Mobile SEO für E-Commerce: Vollständiger Optimierungsleitfaden für 2026
Mobiler SEO-Leitfaden für E-Commerce-Websites. Behandelt Mobile-First-Indexierung, Core Web Vitals, strukturierte Daten, Optimierung der Seitengeschwindigkeit und Ranking-Faktoren für die mobile Suche.
Produktionsüberwachung und Alarmierung: Der vollständige Einrichtungsleitfaden
Richten Sie Produktionsüberwachung und Alarmierung mit Prometheus, Grafana und Sentry ein. Deckt Metriken, Protokolle, Ablaufverfolgungen, Warnrichtlinien und Arbeitsabläufe zur Reaktion auf Vorfälle ab.