Architecture Decision Record

Active theme: Light

← Esempi di registri delle decisioni

Registro delle decisioni architetturali: framework di automazione del browser per test E2E (Playwright o Selenium)

1. Contesto

Stiamo selezionando un framework di automazione del browser per la nostra pipeline di test end-to-end (E2E). Questo framework sarà parte integrante dei nostri processi CI/CD, eseguendo test che simulano interazioni reali degli utenti sulla nostra piattaforma. In particolare, i test copriranno scenari come registrazione/accesso degli utenti, caricamento di file, interazioni con la dashboard e download di report.

Come startup, il nostro focus è sullo sviluppo agile, con la necessità di iterare ed evolvere rapidamente. Il nostro team lavora prevalentemente con TypeScript e Python, e la capacità di scrivere test in questi linguaggi è essenziale. Inoltre, la piattaforma contiene grafici e dashboard interattivi, il che rende fondamentale che lo strumento di automazione supporti bene UI ricche e dinamiche.

I due candidati per questo compito sono Playwright e Selenium, ciascuno con i suoi punti di forza e compromessi. Dobbiamo valutare questi framework in base alle funzionalità e ai requisiti descritti di seguito.

2. Opzioni considerate

  • Playwright (di Microsoft)
  • Selenium (del Selenium Project)

3. Fattori determinanti della decisione

I fattori che influenzano la nostra decisione sono i seguenti:

  1. Sviluppo agile: lo strumento scelto deve consentire cicli di sviluppo rapidi e flessibili.
  2. Supporto dei linguaggi: il nostro team richiede il supporto sia di TypeScript sia di Python.
  3. Test di UI interattive: la capacità di testare in modo affidabile grafici interattivi, dashboard ed elementi dinamici è essenziale.
  4. Velocità di runtime: sebbene non sia una preoccupazione primaria, le prestazioni nelle pipeline CI/CD sono una considerazione.
  5. Scalabilità: non pianifichiamo una scalabilità massiccia nell'immediato futuro, ma vogliamo assicurarci che la soluzione possa gestire la crescita futura.
  6. Compatibilità all'indietro: i sistemi legacy e la compatibilità con i browser più vecchi non sono critici per il nostro progetto in questo momento.
  7. Test su mobile: sebbene non sia un focus immediato, il framework dovrebbe poter testare funzionalità responsive per il mobile o essere estendibile per tali casi d'uso.
  8. Test con più schermi: il supporto per configurazioni con più schermi è un requisito secondario, specialmente se in futuro scaleremo fino a testare flussi di lavoro utente più complessi.
  9. Test di caricamento di file: il framework deve gestire in modo efficiente il caricamento di file, un requisito fondamentale delle nostre esigenze di test.

4. Criteri di valutazione

  • Facilità d'uso: quanto è facile scrivere e mantenere i test?
  • Supporto dei linguaggi: il framework supporta TypeScript e Python, i due linguaggi che il nostro team usa più spesso?
  • Test di UI interattive: quanto bene il framework gestisce interfacce utente complesse e interattive come grafici, caricamenti di file e dati dinamici?
  • Integrazione CI/CD: quanto bene il framework si integra con strumenti e servizi CI/CD comuni?
  • Supporto di più browser: quali browser sono supportati e quanto bene funzionano?
  • Prestazioni e velocità: quanto velocemente girano i test, specialmente in una pipeline CI/CD?
  • Scalabilità: quanto bene può scalare il framework se si aggiungono più test o scenari più complessi?
  • Comunità ed ecosistema: quanto è attiva la comunità del framework? Ci sono abbondanti integrazioni e plugin?

5. Considerazioni

5.1 Playwright

Pro:
  1. API più intelligente per il caricamento di file locali: l'API di Playwright per interagire con i file locali ed eseguire caricamenti di file è più semplice e intuitiva. Ciò renderebbe i test di caricamento di file più facili da implementare e mantenere.
  2. Sintassi e generazione di codice: Playwright ha una sintassi più breve e concisa. Ciò porta a meno boilerplate, migliorando la manutenibilità e l'efficienza degli sviluppatori. Inoltre, la sintassi più breve migliora la qualità della generazione di codice di OpenAI, rendendo più facile generare automaticamente script di test.
  3. Test di UI interattive: Playwright eccelle nel testare applicazioni web dinamiche e interattive, per esempio quelle con grafici ricchi, interazioni utente complesse e aggiornamenti in tempo reale. Gestisce WebSocket, WebRTC, shadow DOM e altre tecnologie web moderne in modo molto efficace.
  4. Supporto di più browser: Playwright supporta Chromium, WebKit e Firefox. Ha prestazioni coerenti su questi browser, il che dovrebbe coprire la maggior parte delle nostre esigenze di test.
  5. Integrazione CI/CD: Playwright si integra senza problemi con le piattaforme CI/CD moderne (GitHub Actions, Jenkins ecc.). Può eseguire test in parallelo su browser diversi, ottimizzando i tempi di esecuzione dei test e rendendolo adatto allo sviluppo rapido.
  6. Veloce e affidabile: Playwright è generalmente più veloce di Selenium, specialmente in modalità headless, e più resiliente rispetto agli elementi web asincroni.
Contro:
  1. Test su mobile limitati: sebbene Playwright supporti l'emulazione mobile per i browser, manca delle capacità integrate di test su mobile come l'integrazione di Selenium con Appium per il vero test su mobile.
  2. Ecosistema più piccolo: Playwright è ancora più nuovo e meno consolidato di Selenium. Anche se ha una comunità in rapida crescita e una buona documentazione, potrebbe non avere ancora il grande ecosistema di plugin e integrazioni che Selenium offre.
  3. Supporto dei browser limitato: sebbene Playwright copra i principali browser moderni (Chrome, Safari, Firefox), il suo supporto per i browser più vecchi (per esempio Internet Explorer) non è robusto come quello di Selenium.

5.2 Selenium

Pro:
  1. Storia più lunga e maturità: Selenium esiste da molto tempo e ha un comprovato curriculum. È ampiamente usato da molti team e settori, il che ha portato a un grande ecosistema di plugin, integrazioni e risorse.
  2. Supporto di più browser e piattaforme: Selenium supporta un'ampia gamma di browser e versioni, incluso Internet Explorer, e può anche integrarsi con vari strumenti come Docker, Selenium Grid e servizi cloud per i test distribuiti.
  3. Test su mobile: Selenium, tramite la sua integrazione con Appium, è molto più robusto per il test su mobile, comprese le applicazioni sia Android sia iOS. Ciò lo rende la scelta migliore per progetti mobile-first o con forte focus sul mobile.
  4. Test con più schermi: Selenium offre un supporto migliore per scenari con più schermi o interazioni complesse con più finestre.
Contro:
  1. Complessità: l'API di Selenium è più verbosa ed esplicita. Anche se in alcuni casi può essere un vantaggio, significa più codice da scrivere e mantenere, il che può ridurre l'agilità degli sviluppatori, particolarmente importante in un ambiente startup.
  2. Prestazioni: Selenium gira generalmente più lentamente di Playwright, specialmente in modalità headless. Ciò può influire sulle pipeline CI/CD, specialmente quando il numero di test cresce.
  3. Test di UI interattive: Selenium non è così fluido come Playwright nel testare UI web moderne e interattive, specialmente con grafici e aggiornamenti di dati in tempo reale. Richiede più configurazione e gestione per interagire in modo affidabile con contenuti dinamici.

6. Riepilogo del confronto

Funzionalità Playwright Selenium
Facilità d'uso Sintassi più breve, più intuitivo per le UI moderne Più esplicito, richiede più boilerplate
Supporto dei linguaggi TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
Test di UI interattive Eccellente per UI dinamiche in tempo reale Gestisce UI di base, ma più verboso e complesso per interazioni ricche
Test di caricamento di file API più intelligente per i caricamenti di file API più verbosa, meno intuitiva
Integrazione CI/CD Facile integrazione con GitHub Actions, Jenkins Forte integrazione con molti strumenti CI
Test su mobile Limitato, solo emulazione Supporto completo tramite Appium
Supporto di più browser Chromium, WebKit, Firefox Supporto completo per browser principali e più vecchi
Prestazioni Veloce, ottimizzato per i test headless Più lento, specialmente in modalità headless
Test con più schermi Limitato Buon supporto per configurazioni con più schermi
Comunità ed ecosistema In crescita, buona documentazione Grande, maturo, ecosistema esteso

7. Decisione

Dopo aver considerato i requisiti e i compromessi, Playwright è la scelta migliore per le nostre esigenze attuali. La sua API più intelligente per testare il caricamento di file locali, la sintassi concisa e il forte supporto per i test di UI interattive ne fanno un abbinamento ideale per il nostro ciclo di sviluppo agile. Il fatto che supporti sia TypeScript sia Python è cruciale per il nostro team e l'approccio moderno del framework ai test ci permette di scrivere codice pulito e manutenibile.

Sebbene Selenium resti uno strumento eccellente, specialmente per i test su mobile, il supporto dei browser più vecchi e le configurazioni con più schermi, è meno adatto alle nostre esigenze attuali. La sua verbosità, le prestazioni più lente e la gestione più complessa delle UI dinamiche come i grafici lo rendono meno ottimale per il nostro caso d'uso.

8. Conseguenze

  • Azione immediata: adotteremo Playwright per i nostri test E2E, concentrandoci sul testare i flussi utente che coinvolgono registrazione, accesso, caricamenti di file, dashboard e download di report.
  • Considerazioni a lungo termine: terremo d'occhio l'evoluzione dell'ecosistema di Playwright. Se le nostre esigenze cambiano, soprattutto riguardo ai test su mobile o al supporto dei browser più vecchi, potremo riconsiderare Selenium.
  • Formazione e documentazione: i team di sviluppo dovranno familiarizzare con l'API di Playwright, in particolare per gestire UI dinamiche e caricamenti di file.
  • Migrazione: i test Selenium esistenti (se presenti) saranno migrati gradualmente a Playwright.

9. Considerazioni future