Personalizza e automatizza i flussi utente oltre a Chrome DevTools Registratore

Erdogmus
Ergün Erdogmus
Jecelyn Yeen
Jecelyn Yeen

Ammettiamolo, scrivere test automatici non è la cosa più divertente nella vita di uno sviluppatore. In qualità di sviluppatori, vogliamo scrivere funzionalità, correggere bug e migliorare il mondo. Tuttavia, quando non disponiamo di test automatici nei nostri flussi di lavoro, a lungo termine le cose possono diventare piuttosto "buggy". Quindi, pensiamo anche che scrivere test automatici sia importante.

Con il riquadro Registratore in Chrome DevTools, puoi registrare e riprodurre i flussi utente, esportarli in vari formati (ad esempio script di test) tramite diverse estensioni e librerie di terze parti, personalizzare i flussi utente con la libreria Puppeteer Replay e integrarli nei flussi di lavoro esistenti.

In questo post del blog, tratteremo i seguenti argomenti:

  • Come esportare e riprodurre i flussi utente in modo programmatico.
  • Come personalizzare i flussi utente con l'aiuto di Puppeteer Replay.
  • Come eseguire l'integrazione con i flussi di lavoro CI/CD.

Questo post del blog presuppone che tu conosca già le nozioni di base di Registratore. Se non hai mai utilizzato Registratore, segui questo breve tutorial introduttivo e guida video per iniziare.

Esporta i flussi utente e riproduci di nuovo in modo programmatico

Per impostazione predefinita, Registratore consente di esportare queste registrazioni come script Puppeteer o Puppeteer Replay o come file JSON normale.

Opzioni di esportazione.

Dopo aver esportato i flussi utente come file JSON, puoi importarli di nuovo nel riquadro Registratore e riproducirli, oppure utilizzare librerie esterne per riprodurli. La raccolta Puppeteer Replay è una delle raccolte disponibili.

Replay con Puppeteer Replay

Segui le istruzioni nel repository per installare Puppeteer Replay.

Supponiamo di salvare i flussi utente JSON nella cartella recordings (ad esempio progetto demo). Puoi utilizzare il seguente comando per eseguire uno o più flussi utente:

# replay one user flow
npx @puppeteer/replay ./recordings/order-a-coffee.json

# replay all user flows under recordings folder
npx @puppeteer/replay ./recordings/*.json

Facoltativamente, puoi aggiungere uno script npm per l'esecuzione delle registrazioni; aggiungi questa riga al campo scripts in package.json:

"replay-all": "replay recordings"

Detto questo, puoi eseguire npm run replay-all nella riga di comando per riprodurre di nuovo tutte le registrazioni.

Per impostazione predefinita, la riproduzione dei flussi utente viene riprodotta senza UI (nota anche come modalità headless). Se vuoi visualizzare l'interfaccia utente, imposta la variabile di ambiente PUPPETEER_HEADLESS su false prima di eseguire il comando.

PUPPETEER_HEADLESS=false npm run replay-all

Riproduci di nuovo con librerie di terze parti

Esistono alcune librerie di terze parti che puoi usare per riprodurre contenuti al di fuori del browser Chrome. Ecco l'elenco completo delle librerie.

Ad esempio, TestCafe è un framework di test end-to-end. Supporta la riproduzione dei flussi utente JSON con Safari e altro ancora.

npm install -g testcafe

# replay with selected browsers
testcafe safari ./recordings/order-one-coffee.json
testcafe firefox ./recordings/order-one-coffee.json
testcafe chrome ./recordings/order-one-coffee.json

# replay with all browsers
testcafe all ./recordings/order-one-coffee.json

Saucelabs è invece una piattaforma di test basata su cloud. Supporta la riproduzione di flussi utente JSON con browser e versioni diversi sul cloud.

Ecco un esempio di file di configurazione in Saucelabs. Consulta il repository dimostrativo.

apiVersion: v1alpha
kind: puppeteer-replay
suites:
  - name: "order a coffee"
    recordings: [ "recordings/order-a-coffee.json" ]
…

Esportare i flussi utente con estensioni diverse

Oltre alle opzioni predefinite, puoi anche installare estensioni per esportare i flussi utente in diversi formati.

Esporta i flussi utente con estensioni diverse.

Ad esempio, puoi registrare ed esportare i flussi utente come script personalizzato WebPageTest. Con lo script, puoi testare le prestazioni dei flussi utente in più passaggi attraverso le tue applicazioni. Scrivere questi script, tuttavia, a volte può essere difficile.

Inoltre, se hai già degli strumenti di test, esistono estensioni per esportare i flussi utente in diversi script di test, come Cypress, Nightwatch, WebdriverIO, Testing Library e altri ancora. Ecco l'elenco completo. In questo modo, tu e il tuo team potete iniziare a scrivere test più velocemente.

Trasforma in script di test diversi in modo programmatico

Oltre alle estensioni, la maggior parte di questi provider di test pubblica anche librerie per aiutarti a convertire più flussi utente JSON in modo programmatico.

Ad esempio, utilizza le librerie @cypress/chrome-recorder per esportare i flussi utente nei test Cypress.

npm install -g @cypress/chrome-recorder
npx @cypress/chrome-recorder ./recordings/*.json

Riprodurre di nuovo i flussi utente con le estensioni

A partire da Chrome 112, puoi migliorare la tua esperienza utilizzando le estensioni per riprodurre le registrazioni. Queste estensioni ti consentono di integrare perfettamente i servizi e l'infrastruttura di terze parti per riprodurre le registrazioni senza mai uscire da DevTools.

Le estensioni di riproduzione consentono alle estensioni di aggiungere un riquadro a DevTools per configurare la riproduzione e la riproduzione dei risultati.

Per iniziare, consulta l'elenco delle estensioni disponibili o scopri come creare la tua estensione personalizzata.

Crea le tue estensioni o librerie

Dietro le quinte, tutte le estensioni e le librerie sono costruite sopra la raccolta Puppeteer Replay. Oltre a consentirti di riprodurre i flussi utente, Puppeteer Replay offre API che ti consentono di personalizzare o trasformare la riproduzione dei flussi utente.

Personalizza la riproduzione dei flussi utente

Creiamo un plug-in per gli screenshot. Per ogni flusso utente, vogliamo:

  • Per fare uno screenshot alla fine di ogni passaggio e salvarlo nella cartella _screenshots.
  • Per generare un messaggio al termine dell'esecuzione del flusso utente.

Ecco lo snippet di codice. Puoi anche scaricare questa demo e giocarci.

/* screenshot-plugin.mjs */

import { mkdirSync } from "fs";
import { PuppeteerRunnerExtension } from "@puppeteer/replay";

// create folder if not exist
let screenshotFolder = "_screenshots";
mkdirSync(screenshotFolder, { recursive: true });

export default class ScreenshotPlugin extends PuppeteerRunnerExtension {
  count = 0;

  async afterEachStep(step, flow) {
    await super.afterEachStep(step, flow);
    this.count = this.count + 1;

    const path = `${screenshotFolder}/${flow.title}-${this.count}.png`;
    await this.page.screenshot({ path });

    console.log(`Saved screenshot as ${path}`);
  }

  async afterAllSteps(step, flow) {
    await super.afterAllSteps(step, flow);
    console.log("Operation completed successfully.");
  }
}

Il codice è piuttosto espressivo di per sé. Estendiamo l'API PuppeteerRunnerExtension per salvare lo screenshot dopo ogni passaggio e per registrare un messaggio dopo tutti i passaggi.

Salva il file, dopodiché potremo eseguire le procedure con questa estensione utilizzando il seguente comando:

# replay one user flow with plugin 
npx @puppeteer/replay --extension ./screenshot-plugin.mjs  ./recordings/order-a-coffee.json

# replay all user flows with plugin under recordings folder
npx @puppeteer/replay --extension ./screenshot-plugin.mjs ./recordings/*.json

Ecco l'output:

Saved screenshot as _screenshots/order-a-coffee-1.png
Saved screenshot as _screenshots/order-a-coffee-2.png
Saved screenshot as _screenshots/order-a-coffee-3.png
…

Operation completed successfully.

Trasforma i flussi utente

Un altro modo per personalizzare il flusso utente è trasformarlo in diversi formati (ad esempio script di test Cypress o Nightwatch).

Ad esempio, la procedura contiene un passaggio per accedere a un URL. Ecco l'aspetto del file JSON:

{
  "title": "order-a-coffee",
  "steps": [
    {
      "type": "navigate",
      "url": "https://coffee-cart.netlify.app/"
    },
    …
  ]
}

Puoi creare un plug-in stringify per trasformare il passaggio in JavaScript. Puoi anche visualizzare altre librerie esistenti per scoprire come fanno.

Ad esempio, il seguente snippet di codice mostra come WebdriverIO trasforma il passaggio di navigazione:


export class StringifyPlugin extends PuppeteerStringifyExtension {

  #appendStepType(out: LineWriter, step: Step, flow: UserFlow) {
        switch (step.type) {
        case 'navigate':
    return out.appendLine(`await browser.url(${formatAsJSLiteral(step.url)})`)
        …
  }

Quando esegui il plug-in con i flussi utente, la riga di navigazione si traduce in await browser.url(‘https://coffee-cart.netlify.app/’).

Personalizza l'esperienza di riproduzione di DevTools

Le estensioni di riproduzione offrono un modo per riprodurre le registrazioni utilizzando servizi e infrastrutture di terze parti, il tutto senza uscire dal Registratore DevTools.

Migliora la tua esperienza di riproduzione con le estensioni del browser.

Per creare una tua estensione di riproduzione, consulta la documentazione relativa all'estensione di riproduzione e consulta un'estensione di esempio.

Pubblicare le estensioni di Chrome

Dopo aver personalizzato e trasformato i flussi utente, puoi pacchettizzarli come estensione di Chrome e pubblicarli sul Chrome Web Store.

Guarda questa demo e le istruzioni per scoprire come eseguire il debug in locale e pubblicare un'estensione di Chrome.

Integrazione con la tua pipeline CI/CD

Esistono diversi modi per farlo e ci sono molti strumenti disponibili sul mercato. Ecco un esempio di automazione di questo processo con le azioni GitHub:

# .github/node.js.yml

name: Replay recordings

on:
  push:
    branches: [ "main" ]
  schedule:
    - cron: '30 12 * * *' # daily 12:30pm

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 18.x
        cache: 'npm'
    - run: npm install puppeteer
    - run: npm run replay-all
    - run: npm run start

In questo esempio, ripetiamo i flussi utente quando:

  • vengono inviate le nuove modifiche al ramo main
  • tutti i giorni alle 12:30

Oltre a GitHub Actions, puoi anche eseguire l'integrazione con i tuoi cloud provider preferiti. Vai a questa demo per scoprire come utilizzare il job Google Cloud Run per eseguire fino a 10.000 flussi utente in parallelo.

Conclusione

In questo post del blog abbiamo parlato delle diverse opzioni per esportare i flussi utente come file JSON, personalizzare le repliche con PuppeteerReplayExtension, trasformare i flussi utente con PuppeteerStringifyExtension e integrarli nei flussi di lavoro CI.

Spero che questo post del blog ti abbia dato alcune idee su come utilizzare il riquadro Registratore e gli strumenti forniti per semplificare l'integrazione di un flusso di lavoro di test nei tuoi progetti. Non vedo l'ora di scoprire cosa realizzerai.

Scaricare i canali in anteprima

Prendi in considerazione l'utilizzo di Chrome Canary, Dev o Beta come browser di sviluppo predefinito. Questi canali in anteprima ti consentono di accedere alle ultime funzionalità DevTools, testare le API delle piattaforme web all'avanguardia e individuare eventuali problemi sul tuo sito prima che lo facciano gli utenti.

Contattare il team di Chrome DevTools

Utilizza le seguenti opzioni per discutere delle nuove funzionalità e modifiche nel post o qualsiasi altra informazione relativa a DevTools.

  • Inviaci un suggerimento o un feedback tramite crbug.com.
  • Segnala un problema di DevTools utilizzando Altre opzioni   Altre   > Guida > Segnala i problemi di DevTools in DevTools.
  • Tweet all'indirizzo @ChromeDevTools.
  • Lascia commenti sui video di YouTube o sui suggerimenti di DevTools sui video di YouTube di DevTools.