Casperjs / PhantomJs vs Selenium


150

Stiamo usando il selenio per automatizzare i nostri UItest. Di recente abbiamo visto la maggior parte dei nostri utenti che utilizza Chrome. Quindi volevamo sapere - pro e contro dell'utilizzo di PhantomJS vs Selenium:

  • Esiste un reale vantaggio in termini di prestazioni, ad esempio il tempo impiegato per eseguire i casi di test?
  • Quando si dovrebbe preferire PhantomJS al selenio?

Risposte:


183

Stanno attaccando diversi problemi. Poiché PhantomJS funziona perfettamente sulla riga di comando, è adatto come primo livello di test del fumo, sia come parte del flusso di lavoro di sviluppo e / o in un server di integrazione continua. Il selenio si rivolge a più browser e quindi è molto utile garantire la coerenza tra browser e eseguire test approfonditi su diversi sistemi operativi.

Se l'applicazione Web deve essere eseguita su una varietà di browser Web, l'esecuzione del test dell'interfaccia utente solo con PhantomJS non produrrà la maggior copertura di test. Tuttavia, è perfettamente corretto avviare PhantomJS ed eseguire alcuni controlli di integrità di base prima di eseguire test approfonditi. Immagina la follia di testare un'applicazione finanziaria in cui la schermata di accesso è involontariamente rotta e non funzionale!

Nota che la linea tra i due diventa leggermente sfocata con il recente supporto WebDriver nell'ultimo PhantomJS. Ora è possibile eseguire rapidamente i test prima utilizzando PhantomJS e quindi (supponendo che non si verifichino errori gravi) continuare a eseguire gli stessi test in modo completo in una configurazione Selenium.


Grazie per la risposta. Qualsiasi link che può aiutarmi a capire come le persone usano i phantomjs per raccogliere statistiche relative alle prestazioni in un'app di produzione reale.
spirit3189

34
Ariya Hidayat sembra essere il creatore di PhantomJs
Sebastian Patten,

Sembra che il tuo flusso di lavoro descritto per iniziare a scrivere test con PhantomJS quindi utilizzare Selenium presupponga una riscrittura totale dei test ... Potresti usare gli script PhantomJS direttamente con Selenium?
lajarre

1
Grazie per il fantastico PhantomJS, @AriyaHidayat! :)
rinogo,

49

Con la recente integrazione di WebDriver (come ha notato Ariya), ora puoi utilizzare Selenium per guidare PhantomJS.

Questo è immensamente potente.

Puoi eseguire una serie di test Selenium completamente automatizzati (utilizzando PhantomJS come implementazione WebDriver) tramite il tuo elemento della configurazione su un server Unix senza testa ad ogni check-in. Quindi, se si desidera testare la compatibilità del browser, è possibile eseguire i test localmente modificando l'implementazione WebDriver sottostante in Chrome, Firefox ecc.


41

Attualmente sto scrivendo un framework di estrazione web. Ho 524 test che ottengono dati da 250 siti Web usando XPath. Inizialmente il framework utilizzava un parser HTML, HTMLCleaner, ma attualmente sto studiando utilizzando Selenium perché voglio il supporto Javascript. Ho eseguito i test con i driver HtmlUnit, Chrome, Firefox e PhantomJS . Ecco un confronto tra il tempo impiegato e il numero di guasti per ciascun approccio:

                    Failures    Time (secs) 
HtmlCleaner         0           82  
HtmlUnit            169         102 
Google Chrome       38          562 
Firefox             46          1159    
PhantomJS           40          575

Alcuni commenti:

  • In alcuni casi gli "errori" potrebbero non essere affatto degli errori, è possibile che gli estrattori non funzionino perché Javascript sta riscrivendo il DOM. Sto analizzando i fallimenti per trovare la causa.

  • Detto questo, HtmlUnit è il driver Selenium più veloce ma è anche inaffidabile. Questa inaffidabilità non riguarda solo Javascript, ci sono problemi nell'elaborazione di HTML "disordinato, sporco, nel mondo reale" perché qualcosa sembra essere rotto nell'algoritmo di bilanciamento dei tag. A questo proposito sono stati sollevati un paio di problemi, ma non sono stati risolti: vedere HTML-UNIT 1423 e HTML-UNIT 1046 .

  • Firefox è il driver Selenium più lento, anche se sto disabilitando il caricamento delle immagini e i fogli di stile. Questo perché è il più lento a caricare e inizializzare, rendendolo notevolmente più lento di Chrome, e ogni volta che un'estrazione fallisce devo ricaricare il driver (nei test creo un pool di 5 driver per mitigare i ritardi nel recupero URL per tutti i driver web Selenium).

  • PhantomJS raggiunge una precisione migliore rispetto a Firefox, leggermente inferiore a Chrome, ma in circa la metà del tempo di Firefox. Inoltre, posso eseguirlo sulla mia casella di sviluppo, non "prende il controllo della mia macchina" avviando più browser in modo da poter continuare a lavorare.

Consiglio vivamente PhantomJS.


1
Sono necessari 9 minuti per eseguire la suite di test con phantomJS? Deve sembrare per sempre ...
Kevin,

@Kevin Sì :) - ma HTMLCleaner è il test standard, segnalo come utilizzare le categorie JUnit per contrassegnare gli altri test come facoltativi in ​​modo che non facciano parte dei test unitari standard
Mark Butler

Grazie. Sì, ho lavorato su test full-js e sono così glaciali, come 15-20 secondi per alcuni test di pagina. Forse la mia scala di 'glaciale' deve essere regolata anche se hehe :) Strano però che se lo faccio manualmente, ci vogliono solo 5 secondi per fare clic sui moduli.
Kevin,

1
@lucaswxp Sì! E molti altri progetti nel mezzo. Come spiego sopra, non esiste una scelta perfetta. Al momento, ho usato HtmlCleaner, ma ho aggiunto un'opzione per usare PhantomJS, se la pagina da estrarre ne aveva bisogno.
Mark Butler,

1
@iconoclast No - sfortunatamente - il precedente datore di lavoro ha l'IP.
Mark Butler,

2

Sfruttando la potenza di Selenium e PhantomJS PhantomJS ha le funzionalità del browser senza testa, quindi è bene usarlo come uno dei browser con selenio (Oltre ai browser tradizionali come IE, Chrome ecc.) Vantaggi di questo approccio:

  1. Può essere utilizzato per eseguire Sanity per applicazioni Web in CI (anche se le macchine agente non hanno IE o Chrome) i test verranno eseguiti in modo efficace.
  2. Alcuni team di sviluppo utilizzano questo approccio per ottenere risultati rapidi e consumano meno tempo e risorse.
  3. La più grande caratteristica di Phantom JS è l'acquisizione dello schermo, che esegue test paralleli usando il multi threading, che ridurrà enormemente i tempi di esecuzione.

1

sfide che ho dovuto affrontare durante l'utilizzo di PhantomJS:

La mia applicazione stava valutando l'applicazione Web:

  1. A un certo punto i localizzatori che funzionavano bene sul browser Chrome non funzionano su phantomJS.
  2. A volte, mentre eseguo un doppio clic o un clic contestuale per selenio, devo mettere un controllo extra per verificare le operazioni coz in primo luogo non fa clic.
  3. Persistenza della cache e dei cookie. Dopo aver effettuato il logout e quindi il login, i dati rimangono nella cache. | Quindi eseguiamo il test su Chrome.
  4. Uno dei problemi più importanti che ho riscontrato "Problema di caricamento dei file". Non è possibile caricare un file nel browser phantomJs nella nostra applicazione. Abbiamo provato molte cose javascriptexcutor, jqueries ma nessuna ha funzionato affatto. Quindi eseguiamo anche questo test su Chrome. Nota: abbiamo usato ampiamente le funzioni JavaScript nel nostro framework per interagire con l'elemento web per PhantomJS. Una cosa è certa che il tempo di esecuzione è molto inferiore in PhantomJS. Quindi dipende dalla priorità del cliente se desidera Funzionalità / Prestazioni, quindi seguirla. Se vuoi testare lo scenario end-to-end, scegli Chrome.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.