{"id":1651,"date":"2021-12-13T11:32:00","date_gmt":"2021-12-13T10:32:00","guid":{"rendered":"https:\/\/brentasoft.com\/blog\/test-automation-selenium-cypress-playwright-2021\/"},"modified":"2021-12-13T11:32:00","modified_gmt":"2021-12-13T10:32:00","slug":"test-automation-selenium-cypress-playwright-2021","status":"publish","type":"post","link":"https:\/\/brentasoft.com\/blog\/test-automation-selenium-cypress-playwright-2021\/","title":{"rendered":"Test automation 2021: Selenium, Cypress, Playwright per PMI"},"content":{"rendered":"<div class=\"bs-article-tldr\">\n<p><strong>TL;DR \u2014 In sintesi:<\/strong> Nel 2021 il test automation E2E non \u00e8 pi\u00f9 un &#8220;nice to have&#8221;: per una software house o PMI con team superiore ai 5 sviluppatori il manual testing diventa il principale bottleneck di rilascio. I tre framework dominanti sono <strong>Selenium WebDriver<\/strong> (rilascio 4.0 il 13 ottobre 2021, ora W3C standard), <strong>Cypress<\/strong> (versione 9.0 da luglio 2021) e <strong>Playwright<\/strong> (Microsoft, versione 1.16 di novembre 2021). In questo articolo confrontiamo architettura, costi e produttivit\u00e0, con un caso reale di migrazione da Selenium a Playwright che ha portato la suite di test da 18 min a 4 min e ridotto la flakiness dell&#8217;82%.<\/p>\n<\/div>\n<h1>Test automation 2021: Selenium, Cypress, Playwright per PMI<\/h1>\n<p>Quanto tempo impiega oggi il tuo team a validare manualmente una release? Tre ore? Una giornata intera? Per molte PMI software italiane il QA manuale resta ancora la norma \u2014 fino al momento in cui il backlog di feature cresce, il numero di sviluppatori supera i 5-6 e il tempo di regression testing si moltiplica con ogni nuovo modulo. A quel punto il test automation non \u00e8 pi\u00f9 una scelta tecnologica ma una <strong>questione di sopravvivenza<\/strong> sul mercato.<\/p>\n<p>Il 2021 \u00e8 stato un anno spartiacque per l&#8217;ecosistema del testing. Il 13 ottobre 2021 \u00e8 uscito <strong>Selenium 4.0<\/strong>, primo rilascio major dopo cinque anni di sviluppo, allineato finalmente allo standard W3C WebDriver. <strong>Cypress<\/strong>, lanciato nel 2017, ha raggiunto la versione 9.0 a luglio 2021 con supporto stabile a Firefox e session API. Ma il vero scossone arriva da Redmond: <strong>Playwright<\/strong>, rilasciato da Microsoft nel 2020 e cresciuto rapidamente, ha pubblicato la 1.16 a novembre 2021 con auto-wait nativo, multi-browser cross-platform e supporto a JavaScript, TypeScript, Python, Java e .NET.<\/p>\n<p>In questa guida operativa analizziamo i framework dominanti, i loro casi d&#8217;uso ideali, gli strumenti complementari (visual regression, API testing, performance) e come strutturare un piano di adozione in 60 giorni per una PMI italiana. Vediamo prima i fondamentali concettuali, poi entriamo nei tool e infine in un caso concreto di migrazione.<\/p>\n<h2>Test pyramid di Mike Cohn: la base teorica<\/h2>\n<p>Prima di scegliere un framework occorre capire quale livello di test stiamo automatizzando. Il modello di riferimento resta la <strong>Test Pyramid<\/strong> introdotta da Mike Cohn nel suo libro &#8220;Succeeding with Agile&#8221; del 2009 e poi resa popolare da Martin Fowler. La piramide divide i test in tre strati:<\/p>\n<ul>\n<li><strong>Unit test (base, ~70%)<\/strong>: testano singole funzioni o classi in isolamento. Veloci (millisecondi), economici da scrivere e mantenere. Tool: <strong>Jest<\/strong>, <strong>Mocha<\/strong> + <strong>Chai<\/strong> per JavaScript, <strong>PyTest<\/strong> per Python, JUnit + <strong>Mockito<\/strong> per Java, PHPUnit per PHP.<\/li>\n<li><strong>Integration test (~20%)<\/strong>: verificano l&#8217;interazione tra moduli, chiamate API, query database. Pi\u00f9 lenti (centinaia di ms), ma coprono comportamenti che gli unit test non vedono.<\/li>\n<li><strong>End-to-End (E2E, ~10%)<\/strong>: simulano l&#8217;utente reale che usa l&#8217;applicazione tramite browser. Lenti (secondi-minuti), costosi da mantenere, ma sono gli unici a validare il flusso completo.<\/li>\n<\/ul>\n<p>Il problema pi\u00f9 comune che vediamo nelle PMI italiane \u00e8 la <strong>&#8220;piramide invertita&#8221;<\/strong>: pochi unit test, molti test E2E. Risultato: suite che impiegano un&#8217;ora a girare, flakiness alta, ogni piccolo refactoring rompe decine di scenari. La regola pratica: se hai 100 test totali, almeno 70 devono essere unit, 20 integration, 10 E2E. Selenium, Cypress e Playwright lavorano principalmente sull&#8217;apice della piramide, ma la qualit\u00e0 della tua suite dipende soprattutto da quanto \u00e8 solida la base.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/img_w50_54_inline1.jpg\" alt=\"Terminal con risultati di unit test passing e checkmark verde\" class=\"aligncenter size-large\" \/><\/p>\n<h2>Cos&#8217;\u00e8 il test automation E2E e perch\u00e9 serve davvero<\/h2>\n<p>Un test E2E (End-to-End) \u00e8 uno script che <strong>simula un utente reale<\/strong>: apre il browser, clicca link, compila form, attende risposte AJAX, verifica che i dati salvati appaiano correttamente nella UI. \u00c8 l&#8217;unico tipo di test che convalida il sistema &#8220;as a whole&#8221;: frontend + backend + database + servizi esterni.<\/p>\n<p>Per una PMI software i benefici concreti sono tre. Primo: <strong>riduzione del regression testing<\/strong> da giorni a minuti. Secondo: confidenza nel deploy continuo (CI\/CD) \u2014 senza E2E automatizzati il &#8220;deploy del venerd\u00ec&#8221; resta un terno al lotto. Terzo: documentazione vivente. Uno script Cypress ben scritto descrive il comportamento atteso meglio di qualsiasi pagina Confluence.<\/p>\n<p>Lo svantaggio principale dei test E2E \u00e8 la <strong>fragilit\u00e0<\/strong>: dipendono dal DOM, dalla rete, dai tempi di rendering. Un test che funziona in locale pu\u00f2 fallire sporadicamente in CI (&#8220;flaky test&#8221;) creando rumore e perdita di fiducia. La scelta del framework giusto incide direttamente su questo aspetto.<\/p>\n<h2>Selenium WebDriver: il veterano (e Selenium 4)<\/h2>\n<p>Nato nel 2004 da un progetto interno di ThoughtWorks come &#8220;JavaScriptTestRunner&#8221;, <strong>Selenium<\/strong> \u00e8 il framework di test automation pi\u00f9 longevo e diffuso al mondo. La versione WebDriver, sviluppata da Simon Stewart a partire dal 2007, \u00e8 oggi il de-facto standard per pilotare browser via codice.<\/p>\n<p>Il 13 ottobre 2021 \u00e8 uscito <strong>Selenium 4.0<\/strong>, primo major release dopo 5 anni di lavoro. Le novit\u00e0 chiave:<\/p>\n<ul>\n<li><strong>W3C WebDriver Recommendation<\/strong>: protocollo standardizzato dal W3C nel 2018 e ora pienamente adottato. Niente pi\u00f9 JSON Wire Protocol legacy.<\/li>\n<li><strong>Selenium Grid 4<\/strong>: architettura rifatta con Docker support nativo, observability (tracing OpenTelemetry), e UI pi\u00f9 moderna.<\/li>\n<li><strong>Relative Locators<\/strong>: API tipo above(), below(), near() per selezionare elementi in base alla posizione visuale.<\/li>\n<li><strong>Chrome DevTools Protocol (CDP)<\/strong>: accesso a network throttling, geolocation, console log.<\/li>\n<\/ul>\n<p>I punti di forza di <strong>Selenium WebDriver<\/strong> restano la <strong>maturit\u00e0<\/strong> (community immensa, decine di migliaia di articoli, libri, corsi), il <strong>multi-language<\/strong> (Java, Python, C#, Ruby, JavaScript, Kotlin), e l&#8217;integrazione con <em>tutti<\/em> i browser farm cloud (<strong>BrowserStack<\/strong>, <strong>Sauce Labs<\/strong>, <strong>LambdaTest<\/strong>). Selenium \u00e8 la scelta giusta quando hai sviluppatori back-end Java\/.NET, devi testare browser legacy (IE 11 ancora richiesto da clienti enterprise) o hai vincoli di compliance.<\/p>\n<p>Lato negativo: architettura WebDriver &#8220;out-of-process&#8221; (comandi inviati via HTTP REST al driver) introduce latenza, no auto-wait nativo (servono WebDriverWait + ExpectedConditions espliciti), e debugging meno comodo rispetto ai framework moderni.<\/p>\n<h2>Cypress: la dev experience friendly<\/h2>\n<p>Lanciato nel 2017 dalla startup californiana Cypress.io, <strong>Cypress<\/strong> ha cambiato le regole del gioco con un&#8217;architettura radicalmente diversa: invece di pilotare il browser dall&#8217;esterno via protocollo HTTP, Cypress <strong>gira dentro il browser<\/strong> con il test e l&#8217;applicazione nello stesso event loop. Questo elimina molti problemi di sincronizzazione tipici di Selenium.<\/p>\n<p>Caratteristiche distintive:<\/p>\n<ul>\n<li><strong>Time Travel Debugger<\/strong>: ogni comando crea uno snapshot del DOM. Puoi tornare indietro nel tempo e ispezionare lo stato esatto del test in qualsiasi step.<\/li>\n<li><strong>Auto-wait nativo<\/strong>: Cypress attende automaticamente che gli elementi siano visibili, abilitati, attached al DOM prima di interagire.<\/li>\n<li><strong>Network stubbing nativo<\/strong>: intercetti chiamate XHR\/fetch con cy.intercept() senza tool esterni.<\/li>\n<li><strong>Dashboard cloud<\/strong> (a pagamento da ~<strong>75$\/mese<\/strong>): video recording, parallel execution, analytics.<\/li>\n<\/ul>\n<p>La versione <strong>Cypress 9.0<\/strong> di luglio 2021 ha portato supporto stabile a Firefox (precedentemente beta) e session API (cy.session()) per cache di login tra test. La community \u00e8 in forte crescita: secondo lo State of JS 2021, <strong>Cypress<\/strong> \u00e8 il framework di testing E2E pi\u00f9 utilizzato dagli sviluppatori JavaScript con il <strong>38%<\/strong> di adoption, superando Selenium tra chi lavora su frontend SPA.<\/p>\n<p>Limiti: solo JavaScript\/TypeScript (niente Python, Java), supporto multi-tab limitato, niente Safari (al 2021), no controllo browser nativo come click su dialog del sistema operativo, esecuzione sequenziale su singolo browser per default.<\/p>\n<h2>Playwright: la sfida di Microsoft<\/h2>\n<p>Annunciato a gennaio 2020 da Microsoft (autori in gran parte ex-team Puppeteer di Google migrati a Redmond), <strong>Playwright<\/strong> ha avuto un&#8217;evoluzione fulminea. La versione <strong>1.16<\/strong> rilasciata a novembre 2021 lo posiziona come alternativa moderna a Selenium con un&#8217;esperienza developer simile a Cypress ma senza i suoi limiti.<\/p>\n<p>Punti di forza chiave:<\/p>\n<ul>\n<li><strong>Multi-browser<\/strong>: Chromium, Firefox e WebKit (motore Safari) tutti gestiti con un&#8217;unica API. Cross-browser reale, anche su Linux\/CI.<\/li>\n<li><strong>Multi-language<\/strong>: bindings ufficiali per JavaScript\/TypeScript, Python, Java, .NET. Non solo Node.js come <strong>Cypress<\/strong>.<\/li>\n<li><strong>Auto-wait built-in<\/strong>: ogni azione (click, fill, selectOption) attende automaticamente che l&#8217;elemento sia &#8220;actionable&#8221;.<\/li>\n<li><strong>Parallel execution nativa<\/strong>: la 1.10 (marzo 2021) ha introdotto il test runner ufficiale con parallel workers out-of-the-box.<\/li>\n<li><strong>Trace Viewer<\/strong>: GUI che mostra timeline, network, console, screenshot per ogni step. Game-changer per debug.<\/li>\n<li><strong>Multi-context<\/strong>: gestisce pi\u00f9 tab, popup, iframe e contesti di sessione paralleli (utile per testare chat, multi-user).<\/li>\n<\/ul>\n<p>Lo svantaggio \u00e8 una community ancora pi\u00f9 piccola di <strong>Selenium<\/strong> e meno integrazione con tool legacy. Ma per nuovi progetti, soprattutto su stack moderno (React, Vue, Angular, Next.js), <strong>Playwright<\/strong> \u00e8 oggi la scelta tecnicamente pi\u00f9 solida.<\/p>\n<h2>Selenium vs Cypress vs Playwright: tabella comparativa<\/h2>\n<table>\n<thead>\n<tr>\n<th>Criterio<\/th>\n<th>Selenium 4<\/th>\n<th>Cypress 9<\/th>\n<th>Playwright 1.16<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Architettura<\/td>\n<td>WebDriver (out-of-process)<\/td>\n<td>In-browser (in-process)<\/td>\n<td>CDP-based (out-of-process, async)<\/td>\n<\/tr>\n<tr>\n<td>Browser<\/td>\n<td>Chrome, Firefox, Safari, Edge, IE11<\/td>\n<td>Chrome, Edge, Firefox, Electron<\/td>\n<td>Chromium, Firefox, WebKit<\/td>\n<\/tr>\n<tr>\n<td>Linguaggi<\/td>\n<td>Java, Python, C#, JS, Ruby, Kotlin<\/td>\n<td>JS\/TS<\/td>\n<td>JS\/TS, Python, Java, .NET<\/td>\n<\/tr>\n<tr>\n<td>Auto-wait<\/td>\n<td>Manuale (WebDriverWait)<\/td>\n<td>S\u00ec, nativo<\/td>\n<td>S\u00ec, nativo<\/td>\n<\/tr>\n<tr>\n<td>Parallel locale<\/td>\n<td>S\u00ec (Grid)<\/td>\n<td>No (solo dashboard a pagamento)<\/td>\n<td>S\u00ec, nativo<\/td>\n<\/tr>\n<tr>\n<td>Network stub<\/td>\n<td>Limitato (CDP in 4)<\/td>\n<td>Nativo (cy.intercept)<\/td>\n<td>Nativo (page.route)<\/td>\n<\/tr>\n<tr>\n<td>Multi-tab<\/td>\n<td>S\u00ec<\/td>\n<td>Workaround<\/td>\n<td>S\u00ec, nativo<\/td>\n<\/tr>\n<tr>\n<td>Pricing<\/td>\n<td>OSS gratis<\/td>\n<td>OSS + Dashboard cloud (~<strong>75$\/mese<\/strong>)<\/td>\n<td>OSS gratis<\/td>\n<\/tr>\n<tr>\n<td>Community 2021<\/td>\n<td>Enorme (15+ anni)<\/td>\n<td>Grande, in crescita<\/td>\n<td>Media, in forte crescita<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/img_w50_54_inline2.jpg\" alt=\"Cross browser testing su laptop con multiple device e responsive layout\" class=\"aligncenter size-large\" \/><\/p>\n<h2>TestCafe: l&#8217;alternativa open source di DevExpress<\/h2>\n<p>Tra le alternative meno note ma valide segnaliamo <strong>TestCafe<\/strong>, sviluppato da DevExpress e reso open source nel 2016. \u00c8 un framework Node.js che non richiede driver esterni: inietta uno script nelle pagine, intercetta richieste via proxy e supporta tutti i browser moderni inclusi i dispositivi mobile remoti.<\/p>\n<p>Punti di forza: zero configuration (installi via npm e parti), supporto a TypeScript nativo, ottimo per team JavaScript che non vogliono la lock-in del dashboard <strong>Cypress<\/strong>. Per il 2021 resta una nicchia ma \u00e8 una scelta solida per progetti che cercano un&#8217;alternativa a costo zero al cloud di Cypress.<\/p>\n<h2>Mobile testing: Appium e Detox<\/h2>\n<p>Per applicazioni mobile native o ibride (React Native, Flutter, Cordova) i framework E2E browser-based non bastano. I due tool dominanti nel 2021 sono:<\/p>\n<ul>\n<li><strong>Appium<\/strong>: framework open source nato nel 2012, basato su WebDriver protocol. Nel 2021 la versione mainstream \u00e8 1.x; la 2.0 alpha \u00e8 in sviluppo. Funziona con iOS, Android, anche app desktop (Windows, Mac). Linguaggi: tutti quelli supportati da <strong>Selenium<\/strong>. Lo svantaggio \u00e8 la curva di apprendimento e i tempi di esecuzione.<\/li>\n<li><strong>Detox<\/strong>: sviluppato da Wix, specifico per React Native. Architettura &#8220;grey-box&#8221;: il framework ha visibilit\u00e0 interna sull&#8217;app e pu\u00f2 sincronizzarsi con il render loop. Risultato: test molto pi\u00f9 veloci e affidabili di Appium per progetti React Native, ma vincolato a quello stack.<\/li>\n<\/ul>\n<h2>Visual regression testing: Percy, Chromatic, Applitools, BackstopJS<\/h2>\n<p>I test E2E classici verificano che il bottone esista e sia cliccabile, ma non che sia <strong>bello<\/strong>. Un cambio di CSS pu\u00f2 rompere il layout senza far fallire alcun test. Per questo serve il visual regression testing:<\/p>\n<ul>\n<li><strong>Percy<\/strong>: piattaforma SaaS lanciata nel 2015, acquisita da <strong>BrowserStack<\/strong> nel 2020. Integrazione nativa con <strong>Cypress<\/strong>, <strong>Playwright<\/strong>, <strong>Selenium<\/strong>. Pricing parte da ~<strong>149$\/mese<\/strong> per team.<\/li>\n<li><strong>Chromatic<\/strong>: dal team di Storybook. Ideale se hai una component library: ogni story diventa un test visivo. Pricing da <strong>149$\/mese<\/strong>.<\/li>\n<li><strong>Applitools<\/strong>: pioniere del visual testing con AI-based comparison (riduce falsi positivi su antialiasing). Enterprise-oriented, pricing su quote.<\/li>\n<li><strong>BackstopJS<\/strong>: open source, gratis, basato su Puppeteer. Pi\u00f9 &#8220;fai-da-te&#8221; ma valido per PMI con budget zero.<\/li>\n<\/ul>\n<h2>API testing: Postman, REST Assured, Karate DSL, SuperTest<\/h2>\n<p>Prima di testare la UI conviene testare le API. Strumenti di riferimento 2021:<\/p>\n<ul>\n<li><strong>Postman<\/strong>: il pi\u00f9 diffuso, con tab Collections e Newman per esecuzione CI. Versione free generosa, team plan da <strong>12$\/utente\/mese<\/strong>.<\/li>\n<li><strong>REST Assured<\/strong>: libreria Java fluida (&#8220;given\/when\/then&#8221;). Standard de facto per progetti enterprise Java\/Spring.<\/li>\n<li><strong>Karate DSL<\/strong>: framework BDD-style, scrivi test in Gherkin-like syntax senza Java. Ottimo per team misti dev + QA non programmatori.<\/li>\n<li><strong>SuperTest<\/strong>: libreria Node.js per testare API Express\/Koa\/Fastify. Si integra con Jest e Mocha.<\/li>\n<\/ul>\n<h2>Performance e load testing: k6, JMeter, Artillery, Gatling<\/h2>\n<p>Quando l&#8217;app \u00e8 in produzione il numero di utenti concorrenti determina se l&#8217;architettura regge. Tool 2021:<\/p>\n<ul>\n<li><strong>k6<\/strong>: open source, scritto in Go, script in JavaScript. Acquisito da Grafana Labs a ottobre 2021. DX moderna, integrazione nativa con Grafana per dashboard.<\/li>\n<li><strong>JMeter<\/strong>: il veterano (Apache, 1998). GUI Swing, supporta load test complessi. Standard per chi viene da background enterprise Java.<\/li>\n<li><strong>Artillery<\/strong>: Node.js, script YAML semplici. Ottimo per test rapidi su API REST\/WebSocket.<\/li>\n<li><strong>Gatling<\/strong>: Scala-based, report HTML dettagliati. Forte adoption in ambito JVM.<\/li>\n<\/ul>\n<h2>CI\/CD: integrare l&#8217;automation nella pipeline<\/h2>\n<p>Un test che non gira in CI non esiste. Le piattaforme di riferimento nel 2021:<\/p>\n<ul>\n<li><strong>GitHub Actions<\/strong>: lanciato GA novembre 2019, marketplace con migliaia di action. Free tier generoso per progetti pubblici.<\/li>\n<li><strong>GitLab CI<\/strong>: incluso nativamente in GitLab, runners self-hosted o shared. Ottima per chi gi\u00e0 usa GitLab.<\/li>\n<li><strong>Jenkins<\/strong>: il veterano OSS, pipeline-as-code con Jenkinsfile. Ancora molto presente in enterprise.<\/li>\n<li><strong>CircleCI<\/strong>: SaaS storico, caching avanzato, parallelizzazione automatica.<\/li>\n<\/ul>\n<p>Per il <strong>cross-browser testing<\/strong> in cloud i tre dominanti sono <strong>BrowserStack<\/strong> (Automate da <strong>29$\/mese<\/strong>), <strong>Sauce Labs<\/strong> (open API, plan enterprise), <strong>LambdaTest<\/strong> (alternativa pi\u00f9 economica, da <strong>15$\/mese<\/strong>). Tutti supportano <strong>Selenium<\/strong> e <strong>Playwright<\/strong>; <strong>Cypress<\/strong> richiede plugin specifici.<\/p>\n<h2>Code coverage: Istanbul, JaCoCo, Coverage.py<\/h2>\n<p>La metrica per misurare quanta parte del codice \u00e8 coperta dai test. Standard 2021:<\/p>\n<ul>\n<li><strong>Istanbul<\/strong> (nyc): standard JS\/TS, integrato in Jest, supporta line\/branch\/function coverage.<\/li>\n<li><strong>JaCoCo<\/strong>: standard Java, plugin Maven\/Gradle, report HTML\/XML per SonarQube.<\/li>\n<li><strong>Coverage.py<\/strong>: standard Python, integrato con PyTest via pytest-cov.<\/li>\n<\/ul>\n<p>Obiettivo realistico per PMI: <strong>70-80% coverage<\/strong> su modulo business core, <strong>50-60%<\/strong> complessivo. Coverage al 100% \u00e8 generalmente uno spreco di risorse.<\/p>\n<h2>Errori comuni nelle PMI italiane<\/h2>\n<ul>\n<li><strong>Piramide invertita<\/strong>: troppi E2E, pochi unit. Risultato: suite lente e flaky.<\/li>\n<li><strong>Flaky test tollerati<\/strong>: &#8220;ogni tanto fallisce, ma se rilancio passa&#8221;. Sintomo di problemi reali (race condition, dipendenze esterne, dati condivisi).<\/li>\n<li><strong>No maintenance time<\/strong>: scrivere test \u00e8 il <strong>30%<\/strong> del lavoro, manutenerli il <strong>70%<\/strong>. Senza tempo dedicato la suite si degrada in 6 mesi.<\/li>\n<li><strong>Test accoppiati ai selettori CSS<\/strong>: ogni refactor di markup rompe tutto. Soluzione: data-attributes dedicati (data-testid).<\/li>\n<li><strong>No isolamento dei test<\/strong>: test A modifica DB, test B legge dati alterati. Soluzione: fixture per scenario, transaction rollback, cleanup hooks.<\/li>\n<li><strong>Tutto E2E<\/strong>: anche logiche pure (calcolo IVA, formattazione data) testate via browser. Lentissimo. Vanno coperte da unit test.<\/li>\n<\/ul>\n<h2>Caso reale: PMI SaaS B2B migra da Selenium a Playwright<\/h2>\n<p>Software house italiana, 12 sviluppatori, prodotto SaaS B2B per gestione documentale (40k utenti). Stato pre-migrazione (gennaio 2021):<\/p>\n<ul>\n<li>Suite <strong>Selenium WebDriver<\/strong> Java + JUnit, 320 test E2E.<\/li>\n<li>Execution time CI: <strong>18 minuti<\/strong> in sequenziale.<\/li>\n<li>Flakiness: <strong>14%<\/strong> (circa 45 test su 320 falliscono sporadicamente).<\/li>\n<li>Tempo medio settimanale per analizzare e re-run flaky test: <strong>9 ore-uomo<\/strong>.<\/li>\n<li>Sviluppatori demotivati: &#8220;i test E2E sono peggio del bug che dovrebbero scovare&#8221;.<\/li>\n<\/ul>\n<p>Decisione: migrazione progressiva a <strong>Playwright<\/strong> TypeScript in 4 mesi. Step:<\/p>\n<ol>\n<li><strong>Mese 1<\/strong>: POC <strong>Playwright<\/strong> su 20 test critici. Confronto execution time e stabilit\u00e0.<\/li>\n<li><strong>Mese 2<\/strong>: ri-architettura Page Object Model, introduzione data-testid in tutti i componenti React.<\/li>\n<li><strong>Mese 3<\/strong>: porting graduale dei restanti 300 test, doppia run (<strong>Selenium<\/strong> + <strong>Playwright<\/strong>) per validazione.<\/li>\n<li><strong>Mese 4<\/strong>: dismissione <strong>Selenium<\/strong>, parallelizzazione su 4 worker <strong>GitHub Actions<\/strong>.<\/li>\n<\/ol>\n<p>Risultati post-migrazione (maggio 2021):<\/p>\n<ul>\n<li>Execution time CI: <strong>4 minuti<\/strong> (riduzione del <strong>78%<\/strong>).<\/li>\n<li>Flakiness: <strong>2.5%<\/strong> (riduzione dell&#8217;<strong>82%<\/strong>).<\/li>\n<li>Tempo settimanale su flaky: <strong>1.5 ore-uomo<\/strong> (risparmio 7.5 ore\/settimana).<\/li>\n<li>Deploy in produzione passati da 2 volte\/settimana a 1.7 volte\/giorno.<\/li>\n<li>Bug critici sfuggiti in produzione: <strong>-64%<\/strong> nei 3 mesi successivi.<\/li>\n<\/ul>\n<p>Il ROI della migrazione si \u00e8 realizzato in <strong>11 settimane<\/strong> contando il risparmio di tempo ingegneri. Il caso conferma che la scelta del framework giusto non \u00e8 un tecnicismo ma un fattore di velocit\u00e0 competitiva.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2026\/06\/img_w50_54_inline3.jpg\" alt=\"Team QA in retrospective con sticky notes sul muro e kanban board\" class=\"aligncenter size-large\" \/><\/p>\n<h2>Roadmap di adozione test automation in 60 giorni<\/h2>\n<p>Piano operativo per una PMI software che parte da zero o ha pochi test sporadici. Cinque step concreti per arrivare a una suite funzionante in due mesi.<\/p>\n<div class=\"bs-howto\" itemscope itemtype=\"https:\/\/schema.org\/HowTo\">\n<meta itemprop=\"name\" content=\"Adottare test automation in PMI in 60 giorni\"><br \/>\n<meta itemprop=\"totalTime\" content=\"P60D\"><\/p>\n<h3 itemprop=\"step\" itemscope itemtype=\"https:\/\/schema.org\/HowToStep\"><span itemprop=\"name\">Step 1 \u2014 Settimana 1-2: assessment e scelta stack<\/span><\/h3>\n<div itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/HowToDirection\">\n<p itemprop=\"text\">Inventario delle aree critiche dell&#8217;applicazione (autenticazione, checkout, upload). Scelta del framework in base allo stack (Cypress o Playwright per React\/Vue, Selenium per Java enterprise). Setup del progetto in un repo dedicato o cartella \/e2e. Installa dipendenze, CI base con GitHub Actions.<\/p>\n<\/div>\n<h3 itemprop=\"step\" itemscope itemtype=\"https:\/\/schema.org\/HowToStep\"><span itemprop=\"name\">Step 2 \u2014 Settimana 3-4: primi 20 test critici<\/span><\/h3>\n<div itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/HowToDirection\">\n<p itemprop=\"text\">Scrivi i 20 test che coprono i flussi business pi\u00f9 importanti: login, signup, pagamento, ricerca, dashboard principale. Introduci data-testid in tutti i componenti coinvolti. Definisci pattern Page Object Model per riusabilit\u00e0.<\/p>\n<\/div>\n<h3 itemprop=\"step\" itemscope itemtype=\"https:\/\/schema.org\/HowToStep\"><span itemprop=\"name\">Step 3 \u2014 Settimana 5-6: integrazione CI e parallelizzazione<\/span><\/h3>\n<div itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/HowToDirection\">\n<p itemprop=\"text\">Configura esecuzione automatica su ogni pull request. Parallelizza su 2-4 worker per ridurre il tempo. Definisci policy: PR bloccata se anche 1 test fallisce. Setup di Slack\/Teams notification su failure.<\/p>\n<\/div>\n<h3 itemprop=\"step\" itemscope itemtype=\"https:\/\/schema.org\/HowToStep\"><span itemprop=\"name\">Step 4 \u2014 Settimana 7: visual regression e API testing<\/span><\/h3>\n<div itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/HowToDirection\">\n<p itemprop=\"text\">Aggiungi Percy o Chromatic per snapshot visivi sulle pagine critiche. Aggiungi 30-50 test API con Postman\/Newman o SuperTest. Misura code coverage con Istanbul\/JaCoCo, target 60% minimo.<\/p>\n<\/div>\n<h3 itemprop=\"step\" itemscope itemtype=\"https:\/\/schema.org\/HowToStep\"><span itemprop=\"name\">Step 5 \u2014 Settimana 8: governance e cultura<\/span><\/h3>\n<div itemprop=\"itemListElement\" itemscope itemtype=\"https:\/\/schema.org\/HowToDirection\">\n<p itemprop=\"text\">Definisci ownership (QA o dev?), policy di scrittura test per ogni nuova feature, dashboard di monitoring (numero test, tempo esecuzione, flakiness rate). Retrospettiva mensile sulle metriche. Allocazione 15-20% tempo team per maintenance.<\/p>\n<\/div>\n<\/div>\n<h2>FAQ \u2014 Domande frequenti su test automation<\/h2>\n<div class=\"bs-faq\" itemscope itemtype=\"https:\/\/schema.org\/FAQPage\">\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Quando ha senso introdurre test automation in una PMI?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>Generalmente quando il team supera i 5 sviluppatori o quando il regression testing manuale richiede pi\u00f9 di 4 ore per ogni release. Sotto questa soglia il ROI \u00e8 marginale: investire in unit test e qualche test API pu\u00f2 bastare. Sopra questa soglia, senza E2E automatizzati la velocit\u00e0 di rilascio crolla e il rischio di bug in produzione aumenta esponenzialmente.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Selenium o Playwright per un nuovo progetto nel 2021?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>Per un nuovo progetto su stack moderno (React, Vue, Angular, SPA) consigliamo Playwright: API pi\u00f9 ergonomica, auto-wait nativo, multi-browser cross-platform, supporto multi-lingua. Selenium resta la scelta giusta se hai vincoli enterprise Java, devi testare IE11 o hai integrazioni profonde con tool che assumono WebDriver.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Cypress vs Playwright: qual \u00e8 il pi\u00f9 produttivo nel 2021?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>Cypress vince in dev experience pura: time travel debugger, dashboard cloud, community matura nell&#8217;ecosistema frontend. Playwright vince in flessibilit\u00e0 tecnica: multi-browser reale (incluso WebKit), multi-language, parallelizzazione locale gratuita, multi-tab nativo. Per team JavaScript piccoli e focalizzati Cypress \u00e8 pi\u00f9 veloce da adottare. Per progetti che richiedono Safari testing o esecuzione massiva in CI senza pagare licenze cloud, Playwright \u00e8 superiore.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Quanto costa adottare test automation in una PMI?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>Costi diretti molto contenuti: i framework (Selenium, Cypress OSS, Playwright) sono gratis. Un piano BrowserStack Automate parte da 29$\/mese. Percy da 149$\/mese. Il costo principale \u00e8 il tempo: 2-3 mesi di un sviluppatore senior per impostare la suite iniziale, poi 15-20% del tempo di un team per manutenzione continua. Per una PMI tipica significa investire 8-15k\u20ac iniziali con ROI in 3-6 mesi grazie al risparmio di QA manuale.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Come gestire i flaky test?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>Quattro regole. Primo: identifica le cause root (race condition, dati condivisi, dipendenze esterne) invece di nasconderle con retry automatici. Secondo: usa auto-wait nativo (Cypress, Playwright) o waitFor espliciti su Selenium. Terzo: isola i test con database transactions o fixture dedicate. Quarto: tieni un dashboard di flakiness rate e attiva alert se supera il 3%. Sotto questa soglia la suite \u00e8 &#8220;verde&#8221;. Sopra, va investita capacit\u00e0 di manutenzione.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Qual \u00e8 il rapporto giusto tra unit, integration, E2E?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>La regola della piramide di Mike Cohn: 70% unit, 20% integration, 10% E2E. Su 200 test totali tipici di una PMI questo significa circa 140 unit (Jest, PyTest, JUnit), 40 integration (chiamate API, query DB), 20 E2E (flussi browser end-to-end). Questa proporzione minimizza tempo di esecuzione e massimizza copertura efficace.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div itemscope itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n<h3 itemprop=\"name\">Il code coverage al 100% \u00e8 obbligatorio?<\/h3>\n<div itemscope itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n<div itemprop=\"text\">\n<p>No, \u00e8 un anti-pattern. Il 100% di coverage non significa zero bug \u2014 significa solo che ogni riga \u00e8 stata eseguita, non che ogni edge case sia coperto. L&#8217;obiettivo realistico per PMI \u00e8 70-80% sul codice business critical (calcoli, payment, autenticazione) e 50-60% complessivo. Coverage troppo alta porta a test fragili scritti solo per la metrica, peggio che non avere il test affatto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"bs-cta-box\">\n<h3>Vuoi modernizzare la qualit\u00e0 del tuo software?<\/h3>\n<p>Brentasoft progetta e mantiene gestionali e applicazioni custom con test automation integrato fin dal primo sprint. Aiutiamo PMI software house italiane a passare da QA manuale a pipeline CI\/CD con suite Selenium, Cypress e Playwright stabili e veloci. Vuoi capire come strutturare il tuo stack di testing?<\/p>\n<p><strong>Esplora le nostre soluzioni:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/brentasoft.com\/soluzioni\/gestionali-personalizzati.php\">Sviluppo di gestionali personalizzati<\/a> con qualit\u00e0 garantita da test automation E2E<\/li>\n<li><a href=\"https:\/\/brentasoft.com\/preventivatore.php\">Richiedi un preventivo<\/a> per la modernizzazione della tua suite di test<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR \u2014 In sintesi: Nel 2021 il test automation E2E non \u00e8 pi\u00f9 un &#8220;nice to have&#8221;: per una software house o PMI con team superiore ai 5&hellip;<\/p>\n","protected":false},"author":2,"featured_media":1641,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Test automation 2021: Selenium Cypress Playwright | Brentasoft","_seopress_titles_desc":"Guida completa al test automation 2021: Selenium 4, Cypress 9, Playwright 1.16, visual regression, API e load testing per PMI software.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[9],"tags":[],"class_list":["post-1651","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-e-tutorial"],"_links":{"self":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/1651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/comments?post=1651"}],"version-history":[{"count":0,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/1651\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media\/1641"}],"wp:attachment":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media?parent=1651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/categories?post=1651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/tags?post=1651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}