Perché i miei test falliscono quando l'applicazione funziona correttamente?
Un test end-to-end diventa rosso quando la rete è lenta, il DNS non funziona, il sito risponde con un 403 o un 429 o mostra una verifica anti-bot, oppure il browser si arresta, e nessuno di questi casi è un difetto dell'applicazione. Nexus Studio, di Verdict System LLC, assegna a questi fallimenti esiti specifici: TIMEOUT, UNREACHABLE, BLOCKED e CRASHED. Nessuno di essi viene segnalato come errore dell'applicazione.
A cura del gruppo di lavoro di Nexus Studio, Verdict System LLC. 7 ottobre 2026.
Cosa fa fallire un test in assenza di un errore?
Un test segnala soltanto che qualcosa non è avvenuto. La causa può rientrare in quattro casi che non hanno nulla a che fare con il codice:
- la pagina era lenta e il tempo a disposizione del test è scaduto;
- l'host non era raggiungibile, ad esempio perché il nome non veniva risolto;
- il sito ha attivato una protezione con un 403, un 429, un CAPTCHA o una verifica anti-bot, quindi la richiesta non ha mai raggiunto il prodotto;
- il browser o il processo si è arrestato.
Quando tutti questi casi appaiono come un semplice risultato rosso, il gruppo di lavoro li registra come errori, oppure prende l'abitudine di rieseguire i test rossi anziché esaminarli. In entrambi i casi il vero difetto si nasconde nel rumore.
Come distingue Nexus Studio un falso fallimento da un errore?
Quando un test fallisce, il motore legge il messaggio di errore e il registro di rete dell'esecuzione e li confronta con gruppi di schemi in un ordine fisso. Il primo gruppo che trova corrispondenza determina l'esito. L'ordine è CONFIG_ERROR, poi CRASHED, BLOCKED, UNREACHABLE e TIMEOUT, e solo dopo BREACHED_FLAKY o BREACHED. Quindi BREACHED, l'esito che indica una segnalazione di errore, è riservato a un fallimento che nessuno schema relativo all'ambiente o all'infrastruttura di test spiega. Gli schemi coprono le formulazioni sia di Playwright sia di Selenium WebDriver.
Cosa significano TIMEOUT, UNREACHABLE, BLOCKED e CRASHED?
- TIMEOUT: il test non ha ricevuto una risposta in tempo. Non dimostra che l'applicazione sia difettosa, né che funzioni: l'esecuzione non permette di stabilirlo. Una navigazione per cui è scaduto il tempo è un TIMEOUT, perché è stata avviata e la pagina era lenta.
- UNREACHABLE: non è stato possibile raggiungere l'host. Il DNS o la connessione hanno fallito prima che si potesse osservare una pagina, come nel caso di un nome non risolto, una connessione rifiutata o una macchina non in linea. Un errore di certificato non rientra in questa categoria: quello è un problema rilevato.
- BLOCKED: il sito ha attivato una protezione con un 403, un 429, una pagina di blocco o una verifica anti-bot. Se una protezione era visibile sullo schermo, metadata.json la identifica. Anche un telefono Android reale in sospensione o bloccato riceve l'esito BLOCKED, perché un prerequisito non è soddisfatto.
- CRASHED: il browser o il processo si è arrestato, ad esempio per una pagina chiusa, un errore del protocollo DevTools o una sessione WebDriver terminata. È un problema di infrastruttura: controlla la macchina e il driver.
La guida agli esiti elenca gli schemi di errore esatti alla base di ciascuno.
Cosa vede la mia pipeline CI?
Sette dei 14 esiti restituiscono il codice di uscita 0: SECURE, AUTO_RECOVER, FLAKY, CHAOS_RESILIENT, PERFORMANCE_DEGRADED, A11Y_VIOLATION e SECURITY_VIOLATION. Gli altri sette restituiscono il codice di uscita 1, e TIMEOUT, UNREACHABLE, BLOCKED e CRASHED sono tra questi. Quindi la compilazione diventa comunque rossa, perché il test non è stato superato, ma il rapporto e la Cronologia indicano la causa. Gli esecutori pytest e Selenium restituiscono il codice di uscita 2 quando non è stato possibile avviare l'esecuzione.
Quali prove conserva ciascun falso fallimento?
Ciascuno dei quattro conserva report.md, metadata.json, raw-data.json e una cattura dell'ultimo fotogramma. Per il video ci sono differenze:
- TIMEOUT e BLOCKED: il video è disattivato per impostazione predefinita. Attivalo in Impostazioni, alla voce Conserva il video dei fallimenti per.
- UNREACHABLE: non viene offerto alcun video, perché non è stata caricata nessuna pagina e la registrazione sarebbe vuota.
- CRASHED: non viene offerto alcun video, perché la registrazione di un browser arrestato risulta danneggiata.
Solo le esecuzioni Playwright sul web e su dispositivi mobili emulati registrano video. Un telefono Android reale, un'esecuzione Selenium e un test API non lo fanno.
Con Jira attivato, un TIMEOUT apre una segnalazione, mentre un blocco, un arresto anomalo e un sito irraggiungibile non lo fanno mai.
Quali sono i limiti?
- La classificazione legge il testo dell'errore. Un messaggio scritto da te che contiene
403,ForbiddenoAccess Deniedviene interpretato come BLOCKED. Mantieni specifici i messaggi di asserzione personalizzati e apri metadata.json quando un esito ti sorprende. - Un TIMEOUT non dimostra che l'applicazione funzioni. Un test che supera il tempo limite a ogni esecuzione merita un controllo.
- Un tempo limite più lungo non nasconde un elemento difettoso: il test fallisce più tardi.
- Questi verdetti indicano la causa di un'esecuzione non riuscita. Non eliminano la causa: un sito bloccato resta bloccato finché non cambi il modo in cui vi accedi.
Dove posso vederlo?
La pagina delle evidenze segue un test non riuscito ed elenca tutti i file che ogni verdetto lascia sul disco. La guida ai verdetti spiega in quale ordine il motore determina tutti e 14 i verdetti. La versione di prova di 30 giorni esegue lo stesso motore sui tuoi test.