Technical

Generování test dat pomocí AI — od fixtures po E2E scénáře

Kde najdete reálná uživatelská data na testování, která nejsou GDPR noční můrou? Nikde. Buď je máte anonymizovaná (drahé a pracné), nebo si je vygenerujete. AI udělala ze syntetických dat prakticky použitelnou věc.

Tenhle článek pokrývá tři úrovně generování: fixtures, factory patterny a datové scénáře pro E2E.

Úroveň 1: Fixtures s AI

Fixture je statický JSON soubor v cypress/fixtures/, který test načítá. AI zvládne generovat konzistentní, schema-aware fixtures během sekund.

> Vygeneruj cypress/fixtures/users/premium-users.json
obsahujúci 20 používateľov s nasledujúcou schemou:

{
  id: UUID v4,
  email: unikátny gmail,
  name: { first, last } — slovenské mená,
  subscription: { plan: "premium", validUntil: ISO date in future },
  preferences: { language: "sk" | "en", marketing: boolean }
}

Dátum validity rozlož od 30 do 400 dní od dnes.

Claude vygeneruje validní JSON, který v testu použijete okamžitě: cy.fixture('users/premium-users.json').

Úroveň 2: Factory patterns

Factory vygeneruje uživatele s možností přepsat hodnoty přímo v testu. Použijte @faker-js/faker a AI na metody:

// cypress/support/factories/userFactory.ts
import { faker } from '@faker-js/faker/locale/sk';

export const userFactory = {
  build(overrides = {}) {
    return {
      id: faker.string.uuid(),
      email: faker.internet.email({ provider: 'example.sk' }),
      firstName: faker.person.firstName(),
      lastName: faker.person.lastName(),
      phone: faker.phone.number('+421 9## ### ###'),
      address: {
        street: faker.location.streetAddress(),
        city: faker.location.city(),
        zip: faker.location.zipCode(),
      },
      ...overrides,
    };
  },

  buildPremium(overrides = {}) {
    return this.build({
      subscription: {
        plan: 'premium',
        validUntil: faker.date.future({ years: 1 }).toISOString(),
      },
      ...overrides,
    });
  },
};

// Use in test:
const user = userFactory.build({ email: 'test@example.sk' });

AI při psaní scénáře rozumí userFactory.buildPremium() a sáhne po něm sama.

Úroveň 3: Datové scénáře pro E2E (náročnější)

Složitý E2E test potřebuje konzistentní data napříč třemi a více entitami: uživatel + jeho objednávky + historie plateb + scénáře refundace. Ručně na to padnou hodiny. AI to vygeneruje z jednoho promptu na vysoké úrovni:

> Vygeneruj seed dáta pre E2E scenár "refund process":

Scenár potrebuje:
- 1 používateľ (premium plan, valid payment method)
- 3 objednávky za posledných 30 dní (rôzne statusy: delivered,
  in-transit, cancelled)
- 1 objednávka s poškodeným produktom, vhodná na refund
- Admin používateľ s refund permissions

Výstup:
- cypress/fixtures/scenarios/refund.json — dáta
- cypress/support/scenarios/refund.ts — setup helper
  (API calls na seednutie)

Výstupem je kompletní setup, který v testu zavoláte přes cy.setupScenario('refund').

GDPR-safe patterns

Obzvlášť kritické v pojišťovnictví, zdravotnictví a bankovnictví:

  • Nikdy nepoužívejte produkční data. I anonymizovaná se dají deanonymizovat.
  • Data respektující lokalizaci. České jméno, česká adresa, české rodné číslo (s platnou kontrolní číslicí).
  • Rodná čísla generovaná synteticky — faker.cz má generátor RČ; pro SK dopíšeme helper, který dodrží formát RRMMDD/XXXX s platnou kontrolní číslicí.
  • Žádné reálné e-maily. Používejte domény jako example.cz nebo test.local. Pokud potřebujete ověřit doručitelnost, Mailgun má sandboxovou doménu.

Schema-aware AI: inspirace z OpenAPI

Pokud máte OpenAPI spec svého backendu, AI vygeneruje fixtures pro každý endpoint automaticky:

> Pozri na api/openapi.yaml. Pre každý GET endpoint
vygeneruj 1 fixture súbor v cypress/fixtures/api/
s realistickou odpoveďou podľa schémy.
Použij sk locale, GDPR-safe dáta.

Claude přečte YAML, pochopí schémata a vygeneruje konzistentní JSON odpovědi. 20+ fixtures za 60 sekund.

Multi-tenant patterny

SaaS aplikace potřebují izolovat data mezi tenanty. Factory na to musí myslet:

export const orderFactory = {
  buildForTenant(tenantId: string, overrides = {}) {
    return {
      id: `${tenantId}-${faker.string.uuid()}`,
      tenantId,
      // ... ostatné fields
      ...overrides,
    };
  },
};

U E2E testu, který volá AI generátor, vždy dodejte kontext tenanta: „naseeduj data pro tenanta 'acme-corp' tak, aby byla izolovaná od ostatních testů". AI to respektuje.

Praktické ROI

  • Čas na napsání seed souboru: z průměrných 45 minut na 4.
  • Konzistence fixtures mezi testy: vyšší (AI drží konvenci).
  • GDPR: produkčních dat se vůbec nedotkneme.

Chcete stejný přístup u vás? Napište nám — domluvíme 30minutový discovery call.