Om testspecifikation

Fuldført

Standardtesten kører på test/example.spec.ts specifikationen. Lad os pakke ud for at se, hvad den indeholder:

import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Expect a title "to contain" a substring.
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Click the get started link.
  await page.getByRole('link', { name: 'Get started' }).click();

  // Expects page to have a heading with the name of Installation.
  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

Hvis du har udført testdrevet udvikling eller end-to-end-test, bør strukturen og formatet af testene være velkendt. Men du vil måske også se et par nye koncepter. Før vi dykker ned i dem, lad os tale om teststruktur.

Forstå testhierarkiet

Sådan organiserer vi vores test i Playwright.

  • Hver test() metode i denne specifikation er en testcase. Når den køres i en konfiguration med flere projekter, instantierer hvert projekt en version af denne testcase og konfigurerer den, så den passer til projektkravene.
  • Alle eksekverbare udsagn i testcasen er en testhandling, der kan spores i flow for rapport, sporingsfremviser eller værktøjsflow for brugergrænsefladen.
  • Testcases kan grupperes eksplicit i testpakker ved hjælp af funktionen test.describe(). Du kan se et eksempel på dette i vores test-eksempler/demo-todo-app-spec.ts fil. Vi vender tilbage til testtilfældene senere.
  • Testcases er implicit grupperet i suiter baseret på det projekt, de tilhører, og den fil, de er indeholdt i, hvilket gør det muligt for Playwright at målrette grupper af tests på forskellige måder til udførelse.
  • Hver testkørsel har en rodpakke med en underordnet projektpakke for hvert konfigureret projekt. Projektpakker har underordnede filpakker for hver testspecifikation, der er identificeret for den pågældende kørsel. Filpakken kan have testcaseobjekter (individuelle) og Test Suite-objekter (eksplicit grupperet ved hjælp af beskriv) som underordnede.

Direktivet test.describe giver os mulighed for at gruppere Test Case-objekter logisk i en fil, så vi kan gøre ting som at anvende beforeEach og afterEach hooke på alle tests inden for en gruppe. Se følgende uddrag fra test-eksempler/demo-todo-app.spec.ts som reference:

test.describe('Mark all as completed', () => {
  test.beforeEach(async ({ page }) => {
    await createDefaultTodos(page);
    await checkNumberOfTodosInLocalStorage(page, 3);
  });

  test.afterEach(async ({ page }) => {
    await checkNumberOfTodosInLocalStorage(page, 3);
  });

  test('should allow me to mark all items as completed', async ({ page }) => {
    // test actions details omitted for clarity
  });

  test('should allow me to clear the complete state of all items', async ({ page }) => {
    // test actions details omitted for clarity
  });

  test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => {
    // test actions details omitted for clarity
  });
});

Forstå teststruktur

Vi kan se på en af de to foregående testspecifikationsuddrag (den første fra example.spec.ts, den anden fra demo-todo-app.spec.ts) til denne diskussion. Lad os bruge den anden, da den har en smule flere detaljer, der er relevante.

Test af dramatiker følger normalt mønsteret Arrange-Act-Assert:

  • Arranger: Indstiller miljøet til testen. Dette kan omfatte at levere de rigtige armaturer, men også løbekroge beforeEach/beforeAll , der opsætter den oprindelige tilstand for den test.
  • Handling: Dette er trinene i testen, der finder de rigtige elementer, som de skal interagere med, og derefter handle på dem. Testen kan f.eks. finde en knap og derefter vælge den. Andre handlinger omfatter markering/fjern markering (afkrydsningsfelter), udfyld (formularer), svæv (mouseover), fokus (på element), tryk (enkelt tast) og så videre.
  • Assert: Disse udsagn validerer de forventede resultater af handlingerne. Playwright understøtter webstartantagelser, hvor generiske udsagn (ved hjælp af forventer) kan kombineres med asynkrone matchs(for Locator) for at sikre, at destinationselementet er klar, før den indsatte betingelse evalueres.

Når du har forstået dette, bliver det nemmere at forstå, skrive og tilpasse dine testspecifikationer ved hjælp af værktøjet Playwright.

Forstå testkomponenter

Lad os se disse begreber i aktion ved at gennemgå testene/example.spec.ts fra tidligere i denne enhed.

import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Expect a title "to contain" a substring.
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Click the get started link.
  await page.getByRole('link', { name: 'Get started' }).click();

  // Expects page to have a heading with the name of Installation.
  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});
  1. Arranger: Der er ingen eksplicitte kroge i denne testspecifikation, men page det er en armatur , der også understøtter dette mål.
  2. Handling: page.goto er et eksempel på en navigationshandling , hvor browseren automatiserer brugerhandlingen med at navigere til den pågældende URL.
  3. Assert: er et eksempel på en expect.(\<locator>).toBeVisible(), hvor Playwright venter på, at det lokaliserede element er klar (ved hjælp af nye forsøg), før påstanden evalueres (er den synlig?).

Med dette enkle eksempel kender du tre effektive begreber i Test af dramatiker:

  • Inventar: Til etablering af miljø og testisolering.
  • Lokalisatorer: Til at finde elementer med automatisk ventetid og automatisk genforsøg.
  • Påstande: Til validering af resultater af automatiserede handlinger web-påstande.

Brug et par minutter på at gøre dig bekendt med dokumentationen til disse tre funktioner og API'er. Derefter bør du være klar til at dykke ned i at designe og oprette en komplet specifikation for eksempelprogrammet.

Udmærket! Lad os nu tale om kerneværktøjerne til udviklere til dramatiker!