Personalize e automatize os fluxos de usuários além do Gravador do Chrome DevTools

Ergün Erdogmus
Ergün Erdogmus

Vamos admitir, escrever testes automatizados não é a coisa mais divertida na vida de um desenvolvedor. Como desenvolvedores, queremos escrever recursos, corrigir bugs e melhorar o mundo. No entanto, quando não temos testes automatizados nos nossos fluxos de trabalho, a longo prazo, as coisas podem ficar um pouco "observadas". Portanto, também achamos que criar testes automatizados é importante.

Com o painel Recorder no Chrome DevTools, é possível gravar e reproduzir fluxos de usuários, exportá-los para vários formatos (por exemplo, scripts de teste) usando diferentes extensões e bibliotecas de terceiros, personalizar os fluxos de usuário com a biblioteca Puppeteer Replay e integrá-los aos fluxos de trabalho.

Nesta postagem do blog, vamos falar sobre:

  • Como exportar e reproduzir fluxos de usuários de maneira programática.
  • Como personalizar fluxos de usuários com a ajuda do Puppeteer Replay.
  • Como integrar seus fluxos de trabalho de CI/CD.

Esta postagem do blog presume que você já conhece os conceitos básicos do Gravador. Se você não conhece o Gravador, siga este breve tutorial introdutório e guia em vídeo para começar.

Exportar fluxos de usuários e reproduzir de forma programática

Por padrão, o Gravador permite exportar essas gravações como um script Puppeteer ou Puppeteer Replay ou como um arquivo JSON simples.

Opções de exportação.

Depois de exportar os fluxos de usuários como arquivos JSON, você tem a opção de importar de volta para o painel do Gravador e reproduzi-lo novamente ou de usar bibliotecas externas para reproduzi-lo. Puppeteer Replay é uma das bibliotecas disponíveis.

Jogue de novo com o Puppeteer Replay

Siga as instruções no repositório para instalar o Puppeteer Replay.

Digamos que você salve seus fluxos de usuário JSON na pasta recordings (por exemplo, projeto de demonstração). Use o comando a seguir para executar um ou mais fluxos de usuário:

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

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

Também é possível adicionar um script npm para executar as gravações. Adicione esta linha ao campo scripts em package.json:

"replay-all": "replay recordings"

Com isso, você pode executar npm run replay-all na linha de comando para repetir todas as gravações.

Por padrão, os fluxos do usuário são repetidos sem interface (também conhecido como modo headless). Para conferir a interface, defina a variável de ambiente PUPPETEER_HEADLESS como "false" antes de executar o comando.

PUPPETEER_HEADLESS=false npm run replay-all

Jogar novamente com bibliotecas de terceiros

Existem algumas bibliotecas de terceiros que você pode usar para reproduzir conteúdo além do navegador Chrome. Veja a lista completa de bibliotecas.

Por exemplo, o TestCafe é um framework de testes completo. Ele oferece suporte à repetição de fluxos de usuários JSON com o Safari e muito mais.

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

A Saucelabs é uma plataforma de testes baseada na nuvem. Ele oferece suporte à repetição de fluxos de usuários JSON com diferentes navegadores e versões na nuvem.

Confira um exemplo de arquivo de configuração no Saucelabs. Confira o repositório de demonstração (em inglês).

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

Exportar fluxos de usuários com extensões diferentes

Além das opções padrão, também é possível instalar extensões para exportar os fluxos de usuários para diferentes formatos.

Exporte fluxos de usuários com extensões diferentes.

Por exemplo, você pode registrar e exportar os fluxos de usuários como um script personalizado WebPageTest. Com o script, você pode testar o desempenho dos fluxos de usuários de várias etapas nos seus aplicativos. No entanto, às vezes criar esses scripts pode ser um desafio.

Além disso, se você já tem ferramentas de teste em vigor, há extensões para exportar fluxos de usuários para diferentes scripts de teste, como Cypress, Nightwatch, WebdriverIO, Testing Library e muito mais. Veja a lista completa. Isso pode ajudar você e sua equipe a começar a programar testes mais rapidamente.

Transformar em diferentes scripts de teste de maneira programática

Além das extensões, a maioria desses provedores de teste também publica bibliotecas para ajudar a converter vários fluxos de usuários JSON de forma programática.

Por exemplo, use as bibliotecas @cypress/chrome-recorder para exportar fluxos de usuários para testes do Cypress.

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

Repetir fluxos de usuários com extensões

A partir do Chrome 112, agora é possível melhorar sua experiência usando extensões para repetir gravações. Essas extensões permitem integrar perfeitamente serviços e infraestrutura de terceiros para repetir gravações sem sair do DevTools.

As extensões de repetição permitem que as extensões adicionem um painel ao DevTools para configurar a repetição e exibir os resultados da repetição.

Para começar, consulte a lista de extensões disponíveis ou saiba como criar sua própria extensão personalizada.

Criar suas próprias extensões ou bibliotecas

Por trás de tudo, todas as extensões e bibliotecas são criadas com base na biblioteca Puppeteer Replay. Além de permitir que você reproduza os fluxos de usuários, o Puppeteer Replay oferece APIs que permitem personalizar ou transformar a repetição dos fluxos de usuários.

Personalizar a repetição dos fluxos de usuários

Vamos criar um plug-in de captura de tela. Para cada fluxo de usuário, queremos:

  • Para fazer uma captura de tela no fim de cada etapa e salvá-la na pasta _screenshots.
  • Para enviar uma mensagem quando a execução do fluxo do usuário for concluída.

Veja o snippet de código. Você pode fazer o download e usar esta demonstração.

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

O código em si é bastante expressivo. Estendemos a API PuppeteerRunnerExtension para salvar a captura de tela após cada etapa e registrar uma mensagem após todas as etapas.

Salve o arquivo para executar os fluxos de usuário com essa extensão usando o seguinte 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

Esta é a saída:

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.

Transforme os fluxos de usuários

Outra maneira de personalizar o fluxo do usuário é transformá-lo em diferentes formatos (por exemplo, scripts de teste Cypress ou Nightwatch).

Por exemplo, seu fluxo de usuário contém uma etapa para navegar até um URL. O arquivo JSON vai ficar assim:

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

Você pode criar um plug-in stringify para transformar a etapa em JavaScript. Você também pode conferir outras bibliotecas para saber como elas fazem isso.

Por exemplo, o snippet de código a seguir mostra como WebdriverIO transforma a etapa de navegação:


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 você executa o plug-in com os fluxos de usuários, a linha de navegação é convertida em await browser.url(‘https://coffee-cart.netlify.app/’).

Personalizar a experiência de repetição do DevTools

As extensões de repetição oferecem uma maneira de repetir gravações usando serviços e infraestrutura de terceiros, tudo isso sem sair do Gravador do DevTools.

Melhore sua experiência de repetição com as extensões do navegador.

Para criar sua própria extensão de repetição, consulte a documentação sobre a extensão de repetição e veja uma extensão de exemplo para orientações.

Publicar extensões do Chrome

Depois de personalizar e transformar os fluxos de usuários, você pode empacotá-los como uma extensão do Chrome e publicar na Chrome Web Store.

Confira esta demonstração e instruções para aprender a depurar localmente e publicar uma extensão do Chrome.

Integrar ao pipeline de CI/CD

Há várias maneiras de fazer isso e há muitas ferramentas por aí. Veja um exemplo de como automatizar esse processo com ações do 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

Neste exemplo, vamos repetir os fluxos de usuários quando:

  • as novas alterações são enviadas para a ramificação main
  • todos os dias às 12h30

Além do GitHub Actions, também é possível fazer a integração com seus provedores de nuvem favoritos. Acesse esta demonstração para saber como usar o job do Google Cloud Run para executar até 10.000 fluxos de usuários em paralelo.

Conclusão

Nesta postagem do blog, discutimos as diferentes opções para exportar fluxos de usuários como arquivos JSON, personalizar repetições com PuppeteerReplayExtension, transformar fluxos de usuário com PuppeteerStringifyExtension e integrá-los aos fluxos de trabalho de CI.

Espero que esta postagem do blog tenha trazido algumas ideias sobre como você pode usar o painel do Gravador e as ferramentas fornecidas para facilitar a integração de um fluxo de trabalho de teste em seus projetos. Mal posso esperar para ver o que você vai criar!

Fazer o download dos canais de visualização

Use o Chrome Canary, Dev ou Beta como navegador de desenvolvimento padrão. Esses canais de pré-visualização dão acesso aos recursos mais recentes do DevTools, testam as APIs de plataforma da Web modernas e encontram problemas no seu site antes que os usuários o encontrem.

Entrar em contato com a equipe do Chrome DevTools

Use as opções abaixo para discutir os novos recursos e mudanças na postagem ou qualquer outro assunto relacionado ao DevTools.

  • Envie uma sugestão ou feedback em crbug.com.
  • Informe um problema do DevTools em Mais opções   Mais   > Ajuda > Informar problemas no DevTools.
  • Publique no Twitter em @ChromeDevTools.
  • Deixe comentários nos vídeos do YouTube sobre o que há de novo ou nos vídeos do YouTube de dicas sobre o DevTools.