Dostosuj i automatyzuj przepływy użytkowników poza Chrome DevTools Recorder

Ergün Erdogmus
Ergün Erdogmus

Przyznajmy, że pisanie testów automatycznych nie należy do najprzyjemniejszych zajęć w życiu programisty. Jako deweloperzy chcemy pisać funkcje, naprawiać błędy i ulepszać świat. Jeśli jednak nie stosujemy zautomatyzowanych testów w naszych przepływach pracy, na dłuższą metę wszystko może wykazywać pewne błędy. Dlatego uważamy, że pisanie zautomatyzowanych testów jest ważne.

Panel Dyktafon w Narzędziach deweloperskich w Chrome pozwala rejestrować i odtwarzać wzorce użytkownika, eksportować je do różnych formatów (na przykład skryptów testowych) przy użyciu różnych rozszerzeń i bibliotek innych firm, dostosowywać przepływy użytkowników za pomocą biblioteki Puppeteer Replay oraz integrować je z dotychczasowymi przepływami pracy.

W tym poście na blogu omówimy:

  • Jak za pomocą kodu wyeksportować i odtworzyć ścieżki użytkownika.
  • Jak dostosować ścieżki użytkowników za pomocą Puppeteer Replay.
  • Jak zintegrować się z przepływami pracy CI/CD.

W tym poście zakładamy, że znasz już podstawy Dyktafonu. Jeśli dopiero zaczynasz korzystać z nagrywarki, obejrzyj krótki samouczek i przewodnik wideo, aby dowiedzieć się, jak zacząć.

Eksportowanie procesów użytkownika i odtwarzanie ich programowo

Domyślnie możesz eksportować te nagrania jako skrypt Puppeteer lub Puppeteer Replay albo jako zwykły plik JSON.

Opcje eksportu.

Po wyeksportowaniu sekwencji użytkownika jako plików JSON możesz zaimportować je z powrotem na panel Recorder i odtworzyć lub użyć do tego zewnętrznych bibliotek. Biblioteka Puppeteer Replay jest jedną z dostępnych bibliotek.

Odtwarzanie za pomocą Puppeteer Replay

Postępuj zgodnie z instrukcjami w repozytorium, aby zainstalować Puppeteer Replay.

Załóżmy, że w folderze recordings (np. demo project) zapisujesz przepływy użytkowników w formacie JSON. Możesz użyć tego polecenia, aby wykonać co najmniej 1 przepływ użytkowników:

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

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

Opcjonalnie możesz dodać skrypt npm służący do uruchamiania nagrań. Dodaj ten wiersz do pola scripts w package.json:

"replay-all": "replay recordings"

Dzięki temu możesz uruchomić polecenie npm run replay-all w wierszu poleceń, aby ponownie odtworzyć wszystkie nagrania.

Domyślnie przepływy danych użytkownika są odtwarzane bez interfejsu użytkownika (znany też jako tryb bez interfejsu). Jeśli chcesz zobaczyć interfejs użytkownika, przed uruchomieniem polecenia ustaw zmienną środowiskową PUPPETEER_HEADLESS na wartość false.

PUPPETEER_HEADLESS=false npm run replay-all

Ponowne odtwarzanie w bibliotekach zewnętrznych

Istnieją biblioteki innych firm, których można używać do odtwarzania poza przeglądarką Chrome. Oto pełna lista bibliotek.

Na przykład TestCafe to kompleksowy framework testowy. Obsługuje również odtwarzanie wzorców użytkownika JSON w Safari i nie tylko.

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

Z kolei Saucelabs to platforma testowa działająca w chmurze. Obsługuje ponowne odtwarzanie przepływów użytkowników JSON w różnych przeglądarkach i wersjach w chmurze.

Oto przykładowy plik konfiguracji w Saucelabs. Zapoznaj się z repozytorium demonstracyjnym.

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

Eksportowanie schematów użytkowników z różnymi rozszerzeniami

Oprócz opcji domyślnych możesz też instalować rozszerzenia, aby eksportować ścieżki użytkowników do różnych formatów.

Eksportuj schematy użytkowników z różnymi rozszerzeniami.

Możesz na przykład rejestrować i eksportować przepływy użytkowników jako skrypt niestandardowy WebPageTest. Dzięki temu skryptowi możesz testować skuteczność wieloetapowych procesów w aplikacjach. Pisanie takich skryptów może jednak być czasochłonne.

Jeśli masz już zainstalowane narzędzia do testowania, możesz też skorzystać z rozszerzeń do eksportowania ścieżek użytkownika do różnych skryptów testowych, takich jak Cypress, Nightwatch, WebdriverIO czy Testing Library. Oto pełna lista. Może to pomóc Tobie i Twojemu zespołowi szybciej rozpocząć pisanie testów.

Przekształcanie za pomocą kodu różnych skryptów testowych

Oprócz rozszerzeń większość dostawców testów publikuje też biblioteki, które ułatwiają konwertowanie wielu przepływów danych użytkownika w formacie JSON za pomocą kodu.

Możesz na przykład użyć bibliotek @cypress/chrome-recorder, by eksportować przepływy użytkowników do testów Cypress.

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

Powtarzaj czynności związane z użytkownikami dzięki rozszerzeniom

Od wersji 112 Chrome możesz korzystać z rozszerzeń, aby odtwarzać nagrania. Te rozszerzenia umożliwiają bezproblemową integrację usług i infrastruktury innych firm w celu odtwarzania nagrań bez konieczności opuszczania Narzędzi deweloperskich.

Rozszerzenia odtwarzania ponownie umożliwiają rozszerzeniom dodawanie do Narzędzi deweloperskich panelu umożliwiającego skonfigurowanie ponownego odtwarzania i wyświetlania wyników.

Na początek przejrzyj listę dostępnych rozszerzeń lub dowiedz się, jak utworzyć własne rozszerzenie niestandardowe.

Tworzenie własnych rozszerzeń lub bibliotek

Wszystkie rozszerzenia i biblioteki są budowane na podstawie biblioteki Puppeteer Replay. Oprócz możliwości odtwarzania procesów użytkownika Puppeteer Replay udostępnia interfejsy API, które umożliwiają dostosowywanie lub przekształcanie odtwarzania procesów użytkownika.

Dostosowywanie odtwarzania ścieżek użytkownika

Stwórzmy wtyczkę do zrzutów ekranu. W przypadku każdego procesu chcemy:

  • Aby zrobić zrzut ekranu na końcu każdego kroku i zapisać go w folderze _screenshots.
  • Aby wyświetlić wiadomość po zakończeniu wykonywania przepływu danych użytkownika.

Oto fragment kodu. Możesz pobrać to demo i spróbować zagrać.

/* 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.");
  }
}

Kod sam w sobie jest bardzo ekspresyjny. Rozszerzamy interfejs API PuppeteerRunnerExtension, aby po każdym kroku zapisywać zrzut ekranu i rejestrować wiadomość.

Zapisz plik, a potem uruchom ścieżki użytkownika z tym rozszerzeniem, używając tego polecenia:

# 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

Oto wynik:

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.

Przekształcanie schematów działań użytkowników

Innym sposobem na dostosowanie procesu użytkownika jest przekształcenie go na różne formaty (np. za pomocą cyprysu lub skryptu testowego Nightwatch).

Na przykład wzorzec przeglądania zawiera krok prowadzący do adresu URL. Oto jak wygląda plik JSON:

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

Możesz utworzyć wtyczkę stringify, aby przekształcić krok w JavaScript. Możesz też wyświetlić inne istniejące biblioteki, aby zobaczyć, jak to robią.

Na przykład ten fragment kodu pokazuje, jak WebdriverIO przekształca krok nawigacji:


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)})`)
        …
  }

Gdy uruchomisz wtyczkę z przepływami użytkownika, linia nawigacji przekształci się w await browser.url(‘https://coffee-cart.netlify.app/’).

Dostosowywanie odtwarzania w Narzędziach deweloperskich

Rozszerzenia odtwarzania umożliwiają ponowne odtwarzanie nagrań za pomocą usług i infrastruktur innych firm – a wszystko to bez opuszczania Dyktafonu w Narzędziach deweloperskich.

Ulepszenie odtwarzania dzięki rozszerzeniom przeglądarki.

Aby utworzyć własne rozszerzenie do odtwarzania, zapoznaj się z dokumentacją rozszerzenia do odtwarzaniaprzykładem rozszerzenia.

Publikowanie rozszerzeń do Chrome

Po dostosowaniu i przekształceniu wzorców użytkownika możesz je spakować jako rozszerzenia do Chrome i opublikować w Chrome Web Store.

Obejrzyj to demo i postępuj zgodnie z podanymi instrukcjami, aby dowiedz się, jak debugować lokalnie i publikować rozszerzenia do Chrome.

Integracja z obiegiem CI/CD

Można to zrobić na wiele sposobów i za pomocą wielu narzędzi. Oto przykład automatyzacji tego procesu za pomocą GitHub Actions:

# .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

W tym przykładzie odtworzymy ścieżki użytkownika, gdy:

  • nowe zmiany są przesyłane do gałęzi main
  • codziennie o 12:30

Oprócz działań GitHub możesz też korzystać z integracji z ulubionymi dostawcami usług w chmurze. Otwórz tę prezentację, aby zobaczyć, jak za pomocą zadania Google Cloud Run wykonać równolegle do 10 000 przepływów użytkowników.

Podsumowanie

W tym wpisie na blogu omawiamy różne opcje eksportowania ścieżek użytkownika jako plików JSON, dostosowywania odtwarzania za pomocą PuppeteerReplayExtension, przekształcania ścieżek użytkownika za pomocą PuppeteerStringifyExtension oraz integrowania ich w przepływach CI.

Mam nadzieję, że ten post podsunie Ci pomysły na temat korzystania z panelu Dyktafon i udostępnionych narzędzi, które ułatwią Ci zintegrowanie przepływu pracy z projektami. Nie możemy się doczekać, aby zobaczyć, co stworzysz.

Pobieranie kanałów podglądu

Rozważ użycie przeglądarki Chrome Canary, Dev lub Beta jako domyślnej przeglądarki deweloperskiej. Te kanały wersji wstępnej zapewniają dostęp do najnowszych funkcji DevTools, umożliwiają testowanie najnowocześniejszych interfejsów API platformy internetowej i pomagają znaleźć problemy w witrynie, zanim zrobią to użytkownicy.

Kontakt z zespołem Narzędzi deweloperskich w Chrome

Aby omówić nowe funkcje, aktualizacje lub inne kwestie związane z Narzędziami deweloperskimi, skorzystaj z tych opcji.