Playwright-Projekt perf (nur mit PERF_WEB_URL, nur lesend, nie in der CI): CDP-Drosselung 100 ms / 10 Mbit/s, mind. 100 Suchen, Messung im Browser vom letzten Tastendruck bis zur ersten Kachel. Ladeskript fuer synthetisches Volumen unter supabase/perf/. Messung und Aussagegrenzen in der Umsetzungsdoku. Refs #3 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
71 lines
2.6 KiB
TypeScript
71 lines
2.6 KiB
TypeScript
import { defineConfig, devices, type Project } from '@playwright/test';
|
|
|
|
// Bewusst ohne Import von support/auth-config: Ein reiner perf-Lauf (PERF_ONLY=1) darf keine lokalen
|
|
// Auth-Konstanten voraussetzen. Der Standardwert ist derselbe wie env.webUrl.
|
|
const webUrl = process.env.WEB_URL ?? 'http://localhost:3000';
|
|
const perfUrl = process.env.PERF_WEB_URL;
|
|
/** Reiner Messlauf (Krit. 7): nur Projekt `perf`, kein lokaler Web-Server, keine lokalen Konstanten. */
|
|
const perfOnly = process.env.PERF_ONLY === '1';
|
|
|
|
/**
|
|
* Projekte (Spec #1 § 7):
|
|
* - api GoTrue ueber Kong + Mailpit-Helfer
|
|
* - web gebaute Flutter-Web-App (`app/build/web`, statisch auf Port 3000)
|
|
* - throttle Drosselung (Krit. 7) gegen den Extra-Container, nur mit THROTTLE_GOTRUE_URL
|
|
* - spike SMTP-Spike (Issue #37), nur mit SPIKE_GOTRUE_URL, nicht blockierend
|
|
* - perf Latenzmessung der Katalogsuche (KAT-01 Krit. 7), nur mit PERF_WEB_URL, nur lesend,
|
|
* nie in der CI (kein Teil von e2e-run.sh); PERF_ONLY=1 startet keinen lokalen Web-Server
|
|
*/
|
|
const projects: Project[] = perfOnly ? [] : [
|
|
{ name: 'api', testDir: './tests/api', use: {} },
|
|
{
|
|
name: 'web',
|
|
testDir: './tests/web',
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
baseURL: webUrl,
|
|
// Englische Texte (app_en.arb); die App waehlt die Sprache nach dem Browser.
|
|
locale: 'en-US',
|
|
// Der Flutter-Service-Worker wuerde alte Builds cachen.
|
|
serviceWorkers: 'block',
|
|
},
|
|
},
|
|
];
|
|
|
|
if (perfUrl) {
|
|
projects.push({
|
|
name: 'perf',
|
|
testDir: './tests/perf',
|
|
timeout: 900_000,
|
|
retries: 0,
|
|
fullyParallel: false,
|
|
use: { ...devices['Desktop Chrome'], baseURL: perfUrl, locale: 'en-US', serviceWorkers: 'block' },
|
|
});
|
|
}
|
|
if (!perfOnly && process.env.THROTTLE_GOTRUE_URL) {
|
|
projects.push({ name: 'throttle', testDir: './tests/throttle', use: {} });
|
|
}
|
|
if (!perfOnly && process.env.SPIKE_GOTRUE_URL) {
|
|
projects.push({ name: 'spike', testDir: './tests/spike', use: {}, retries: 0 });
|
|
}
|
|
|
|
export default defineConfig({
|
|
timeout: 60_000,
|
|
expect: { timeout: 10_000 },
|
|
fullyParallel: true,
|
|
forbidOnly: !!process.env.CI,
|
|
retries: process.env.CI ? 1 : 0,
|
|
workers: process.env.CI ? 2 : 4,
|
|
reporter: process.env.CI ? [['list'], ['html', { open: 'never' }]] : [['list']],
|
|
use: { trace: 'retain-on-failure' },
|
|
projects,
|
|
// SPA-Fallback (`-s`), sonst liefert /auth/confirm?... 404. Entfaellt beim reinen Messlauf.
|
|
webServer: perfOnly
|
|
? undefined
|
|
: {
|
|
command: 'npx serve -s ../app/build/web -l 3000 --no-clipboard',
|
|
url: webUrl,
|
|
reuseExistingServer: !process.env.CI,
|
|
timeout: 30_000,
|
|
},
|
|
});
|