Fuldautomatisk Playwright-test med Microsoft MFA-login
At skabe en fuldt automatiseret Playwright-test, der kan håndtere Microsoft Multi-Factor Authentication (MFA), er en udfordring, da MFA er designet til at forhindre netop automatiseret adgang. Standard-MFA-prompter, såsom notifikationer på en telefon, kræver manuel interaktion. Den mest robuste og udbredte metode til at opnå fuld automatisering er ved at anvende Time-based One-Time Passwords (TOTP) i dine tests.
Denne metode indebærer, at du konfigurerer en testkonto til at bruge en authenticator-app og derefter bruger den hemmelige nøgle (secret key) i din Playwright-test til programmatisk at generere de nødvendige engangskoder.
Her er en trin-for-trin guide til, hvordan du kan implementere dette:
Trin 1: Konfigurer din testbrugerkonto i Azure AD/Microsoft
Før du kan automatisere login-processen, skal du konfigurere den testbruger, din Playwright-test skal bruge.
Opret en dedikeret testbruger: Undgå at bruge personlige eller produktionskonti til automatiserede tests. Opret en ny bruger i dit Azure Active Directory (Azure AD) eller din Microsoft-konto, som udelukkende skal bruges til testformål.
Aktiver MFA for brugeren: Gå til brugerens sikkerhedsindstillinger. Dette findes typisk under "Security info" på https://mysignins.microsoft.com/security-info.
Tilføj "Authenticator app" som login-metode:
Vælg at tilføje en ny metode og vælg "Authenticator app".
Vigtigt: Når du bliver præsenteret for en QR-kode, skal du vælge muligheden for at indtaste en hemmelig nøgle manuelt (ofte et link som "I want to use a different authenticator app" eller "Can't scan image?").
Kopiér og gem den hemmelige nøgle (Secret Key): Dette er en lang streng af tegn. Denne nøgle er afgørende for din automatiserede test, så opbevar den sikkert, f.eks. i en secret manager som Azure Key Vault eller som en environment variable i dit CI/CD-system. Del aldrig denne nøgle i din kodebase.
Bekræft opsætningen: Brug en authenticator-app (som Google Authenticator eller Authy) til at scanne QR-koden eller indtaste den hemmelige nøgle for at generere en kode og fuldføre opsætningen. Dette sikrer, at nøglen er korrekt.
Gør TOTP til standardmetode: Hvis muligt, konfigurer brugeren til at foretrække en kode fra en authenticator-app frem for en push-notifikation.
Trin 2: Opsæt dit Playwright-projekt
I dit Playwright-projekt skal du installere et bibliotek, der kan generere TOTP-koder. Et populært valg til Node.js er otpauth.
Installer otpauth: npm install otpauth
Gør den hemmelige nøgle tilgængelig for din test:Brug environment-variabler til at håndtere din hemmelige nøgle og brugeroplysninger. Opret en .env-fil i roden af dit projekt (husk at tilføje .env til din .gitignore-fil for at undgå at committe den)..env-fil eksempel: TEST_USERNAME="[email protected]" TEST_PASSWORD="din-adgangskode" MFA_SECRET="den-hemmelige-nøgle-fra-trin-1"
Trin 3: Skriv din Playwright-login-test
Nu kan du skrive din test, der bruger oplysningerne til at logge ind. Det anbefales at adskille login-logikken i en separat "setup"-fil, som Playwright kan køre før dine faktiske tests. Dette gemmer den godkendte session, så dine tests kan genbruge den uden at skulle logge ind hver gang.
Eksempel: global.setup.ts
import { test as setup, expect } from '@playwright/test';import * as OTPAuth from 'otpauth';import * as dotenv from 'dotenv'; // Indlæs environment-variablerdotenv.config(); const authFile = 'playwright/.auth/user.json';
setup('authenticate', async ({ page }) => { const username = process.env.TEST_USERNAME!; const password = process.env.TEST_PASSWORD!; const mfaSecret = process.env.MFA_SECRET!;
// Valider at alle nødvendige variabler er satif (!username || !password || !mfaSecret) { throw new Error('Test user credentials or MFA secret are not set in environment variables.'); } // Naviger til login-sidenawait page.goto('https://login.microsoftonline.com'); // Eller den specifikke login-URL for din app// Indtast brugernavnawait page.getByPlaceholder('Email, phone, or Skype').fill(username); await page.getByRole('button', { name: 'Next' }).click();
// Indtast adgangskodeawait page.getByPlaceholder('Password').fill(password); await page.getByRole('button', { name: 'Sign in' }).click();
// Håndter MFA-promptenawait expect(page.getByText('Verify your identity')).toBeVisible({ timeout: 10000 });
// Generer TOTP-kodenconst totp = new OTPAuth.TOTP({ issuer: 'Microsoft', label: 'AzureAD', algorithm: 'SHA1', digits: 6, period: 30, secret: mfaSecret, }); const code = totp.generate(); console.log(Generated OTP code: ${code});
// Indtast den genererede kodeawait page.getByPlaceholder('Code').fill(code); // Nogle gange skal man klikke på en "Verify" eller lignende knap// Dette kan variere baseret på jeres specifikke Azure AD-opsætningawait page.getByRole('button', { name: 'Verify' }).click();
// Håndter "Stay signed in?" prompten// Det er ofte bedst at vælge "No" i en automatiseret kontekstawait page.getByRole('button', { name: 'No' }).click();
// Vent på at blive fuldt omdirigeret og logget ind// Erstat URL'en med en side, du forventer at se efter et succesfuldt loginawait expect(page).toHaveURL(/din-app-start-url/);
// Gem den godkendte tilstand (cookies, local storage etc.)await page.context().storageState({ path: authFile }); });
Trin 4: Konfigurer Playwright til at bruge den gemte session
I din playwright.config.ts-fil skal du nu konfigurere dine testprojekter til at afhænge af din setup-fil.
playwright.config.ts eksempel:
import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ // … andre konfigurationerprojects: [ // Først, kør setup-filen for at logge ind { name: 'setup', testMatch: /.*.setup.ts/ },// Derefter, kør dine tests med den gemte session { name: 'chromium', use: { ...devices['Desktop Chrome'], // Brug den gemte 'storageState' for at starte som logget indstorageState: 'playwright/.auth/user.json', }, dependencies: ['setup'], }, // ... andre browsere
],
// … andre konfigurationer });
Alternative og supplerende strategier
Brug af testkonti uden MFA: Den simpleste løsning er at have et dedikeret testmiljø, hvor MFA kan deaktiveres for specifikke testbrugere. Dette kan opnås gennem Conditional Access-politikker i Azure AD, der f.eks. undtager brugere fra MFA, når de logger ind fra en kendt IP-adresse (f.eks. din build-agents IP).
Gemt godkendelsestilstand (Auth State): Som vist i eksemplet ovenfor er genbrug af en gemt session en best practice. Det fremskynder testkørslen markant, da login-processen kun skal gennemføres én gang. Du skal dog have en strategi for at opdatere denne session, når den udløber.
Ved at følge ovenstående metode med TOTP kan du opbygge en robust og fuldt automatiseret Playwright-testsuite, der pålideligt kan håndtere Microsoft MFA-login i dine CI/CD-pipelines.














