Casperjs / PhantomJs vs Selenium

150

Kami menggunakan Selenium untuk mengotomatiskan UIpengujian kami . Baru-baru ini kami telah melihat sebagian besar pengguna kami menggunakan Chrome. Jadi kami ingin tahu - pro dan kontra menggunakan PhantomJS vs Selenium:

  • Apakah ada keuntungan nyata dalam hal kinerja, misalnya waktu yang dibutuhkan untuk melaksanakan kasus uji?
  • Kapan sebaiknya seseorang lebih suka PhantomJS daripada Selenium?
spirit3189
sumber

Jawaban:

183

Mereka menyerang masalah yang berbeda. Karena PhantomJS berjalan dengan sempurna pada command-line, sangat cocok sebagai lapisan pertama pengujian asap, baik sebagai bagian dari alur kerja pengembangan dan / atau dalam server integrasi berkelanjutan. Selenium menargetkan banyak browser dan karenanya sangat berguna untuk memastikan konsistensi lintas-browser dan melakukan pengujian ekstensif di berbagai sistem operasi.

Jika aplikasi web Anda perlu dijalankan di berbagai browser web, menjalankan pengujian UI hanya dengan PhantomJS tidak akan menghasilkan cakupan pengujian terbanyak. Namun, baik-baik saja untuk meluncurkan PhantomJS dan melakukan beberapa pemeriksaan kewarasan dasar sebelum melakukan tes mendalam. Bayangkan kegilaan menguji aplikasi keuangan di mana layar masuk tidak sengaja rusak dan tidak berfungsi!

Perhatikan bahwa garis antara keduanya menjadi sedikit kabur dengan dukungan WebDriver terbaru di PhantomJS terbaru. Sekarang mungkin untuk menjalankan tes dengan cepat menggunakan PhantomJS dan kemudian (dengan asumsi tidak ada kesalahan serius yang dihadapi) terus menjalankan tes yang sama secara menyeluruh dalam pengaturan Selenium.

Ariya Hidayat
sumber
Terima kasih atas jawabannya. Tautan apa pun yang dapat membantu saya memahami bagaimana orang menggunakan phantomjs untuk mengumpulkan statistik terkait kinerja di aplikasi produksi dunia nyata.
spirit3189
34
Ariya Hidayat terlihat sebagai pencipta PhantomJs
Sebastian Patten
Tampaknya alur kerja Anda yang dijelaskan mulai menulis tes dengan PhantomJS kemudian menggunakan Selenium mengasumsikan penulisan ulang total tes ... Bisakah Anda menggunakan skrip PhantomJS langsung dengan Selenium?
lajarre
1
Terima kasih atas PhantomJS yang luar biasa, @AriyaHidayat! :)
rinogo
49

Dengan integrasi WebDriver baru-baru ini (seperti yang dicatat Ariya), Anda sekarang dapat menggunakan Selenium untuk menggerakkan PhantomJS.

Ini sangat kuat.

Anda dapat menjalankan serangkaian uji Selenium sepenuhnya otomatis (menggunakan PhantomJS sebagai implementasi WebDriver) melalui CI Anda pada server Unix tanpa kepala pada setiap check-in. Kemudian jika Anda ingin menguji kompatibilitas browser Anda dapat menjalankan tes Anda secara lokal dengan mengubah implementasi WebDriver yang mendasarinya menjadi Chrome, Firefox dll.

mekondelta
sumber
41

Saat ini saya sedang menulis kerangka ekstraksi web. Saya memiliki 524 tes yang mendapatkan data dari 250 situs web menggunakan XPath. Awalnya kerangka kerja menggunakan parser HTML, HTMLCleaner, tapi saya sedang menyelidiki menggunakan Selenium karena saya ingin dukungan Javascript. Saya telah menjalankan tes terhadap driver HtmlUnit, Chrome, Firefox dan PhantomJS . Berikut ini adalah perbandingan waktu yang diambil dan jumlah kegagalan untuk setiap pendekatan:

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

Beberapa komentar:

  • Dalam beberapa kasus "kegagalan" mungkin bukan kegagalan sama sekali, mungkin ekstraktor gagal karena Javascript sedang menulis ulang DOM. Saya sedang dalam proses menganalisis kegagalan untuk menemukan penyebabnya.

  • Yang mengatakan, HtmlUnit adalah driver Selenium tercepat tetapi juga tidak dapat diandalkan. Tidak dapat diandalkan ini tidak hanya menyangkut Javascript, ada masalah pemrosesan HTML "berantakan, kotor, dunia nyata" karena ada sesuatu yang rusak dalam algoritma tag balancing. Beberapa masalah telah diangkat tentang hal ini tetapi belum diperbaiki - lihat HTML-UNIT 1423 dan HTML-UNIT 1046 .

  • Firefox adalah driver Selenium paling lambat, meskipun saya menonaktifkan pemuatan gambar dan stylesheet. Ini karena ini adalah yang paling lambat untuk memuat dan menginisialisasi, membuatnya jauh lebih lambat daripada Chrome, dan setiap kali ekstraksi gagal saya harus memuat ulang driver (dalam tes saya membuat kumpulan 5 driver untuk mengurangi keterlambatan pengambilan URL untuk semua driver web Selenium).

  • PhantomJS mencapai akurasi yang lebih baik daripada Firefox, sedikit lebih rendah dari Chrome, tetapi di sekitar separuh waktu Firefox. Terlebih lagi, saya bisa menjalankannya di kotak dev saya, itu tidak "mengambil alih mesin saya" dengan meluncurkan beberapa browser sehingga saya bisa melanjutkan pekerjaan.

Saya akan sangat merekomendasikan PhantomJS.

Mark Butler
sumber
1
Butuh 9 menit untuk menjalankan test suite Anda dengan phantomJS? Pasti terasa seperti selamanya ...
Kevin
@Kevin Ya :) - tetapi HTMLCleaner adalah tes standar, saya menandai menggunakan kategori JUnit untuk menandai tes lain sebagai opsional sehingga mereka bukan bagian dari tes unit standar
Mark Butler
Terima kasih. Ya saya telah mengerjakan tes full-js dan sangat glasial - seperti 15-20 detik untuk beberapa tes halaman. Mungkin skala 'glasial' saya perlu disesuaikan meskipun hehe :) Aneh meskipun jika saya melakukannya secara manual, hanya butuh ~ 5 detik untuk mengklik formulir.
Kevin
1
@lucaswxp Ya! Dan banyak proyek lain di antaranya. Seperti yang saya jelaskan di atas, tidak ada pilihan yang sempurna. Pada saat itu, saya menggunakan HtmlCleaner, tetapi menambahkan opsi untuk menggunakan PhantomJS, jika halaman yang akan diekstraksi memerlukannya.
Mark Butler
1
@iconoclast Tidak - sayangnya - perusahaan sebelumnya memiliki IP.
Mark Butler
2

Memanfaatkan Kekuatan Selenium dan PhantomJS PhantomJS memiliki kemampuan peramban tanpa kepala, oleh karena itu baik untuk menggunakannya sebagai salah satu peramban dengan selenium (Selain peramban tradisional seperti IE, Chrome dll.) Keuntungan dari pendekatan ini:

  1. Dapat digunakan untuk melakukan Sanity untuk aplikasi web di CI (Meskipun mesin agen tidak memiliki IE atau chrome) tes akan berjalan secara efektif.
  2. Beberapa tim pengembangan menggunakan pendekatan ini untuk mendapatkan hasil yang cepat dan menghabiskan lebih sedikit waktu dan sumber daya.
  3. Fitur terhebat phantom JS adalah tangkapan layar, menjalankan pengujian paralel menggunakan multi threading, yang akan sangat mengurangi waktu eksekusi Anda.
Muthu ragavendra
sumber
1

tantangan yang saya hadapi saat menggunakan PhantomJS:

Aplikasi saya adalah penetapan harga aplikasi web:

  1. Pada beberapa titik pelacak yang bekerja dengan baik pada browser chrome tidak berfungsi pada phantomJS.
  2. Kadang-kadang saat melakukan klik dua kali atau klik konteks dengan selenium, saya harus melakukan pemeriksaan tambahan untuk memverifikasi operasi karena pada awalnya itu tidak mengklik.
  3. Persistensi cache dan cookie. Setelah melakukan logout lalu login data tetap di cache | Jadi kami melakukan pengujian pada chrome.
  4. Salah satu masalah paling penting yang saya temukan "Masalah pengunggahan file". Kami tidak dapat mengunggah file di peramban phantomJs di aplikasi kami. Kami mencoba banyak hal javascriptexcutor, jqueries tetapi tidak satupun yang bekerja sama sekali. Jadi kami juga melakukan tes ini di Chrome. Catatan: Kami menggunakan fungsi javascript secara luas dalam kerangka kami untuk berinteraksi dengan elemen web untuk PhantomJS. Satu hal yang pasti waktu pelaksanaannya sangat kurang di PhantomJS. Jadi itu tergantung pada prioritas klien apakah dia ingin Fungsi / Kinerja kemudian pergi bersamanya. Jika Anda ingin menguji skenario ujung ke ujung kemudian pilih chrome.
Vaibhav_Sharma
sumber