Casperjs / PhantomJs vs Selenyum


150

UITestlerimizi otomatikleştirmek için Selenyum kullanıyoruz . Son zamanlarda kullanıcılarımızın çoğunu Chrome'u kullandık. Bu yüzden bilmek istedik - PhantomJS vs Selenium kullanmanın artıları ve eksileri:

  • Performans açısından gerçek bir avantaj var mı, örneğin test senaryolarını yürütmek için harcanan zaman?
  • Selenyum yerine PhantomJS ne zaman tercih edilmelidir?

Yanıtlar:


183

Farklı sorunlara saldırıyorlar. PhantomJS komut satırında mükemmel çalıştığından, geliştirme iş akışının bir parçası olarak ve / veya sürekli bir entegrasyon sunucusunda ilk duman testi katmanı olarak uygundur. Selenyum birden çok tarayıcıyı hedefler ve bu nedenle tarayıcılar arası tutarlılığı sağlamak ve farklı işletim sistemlerinde kapsamlı testler yapmak çok yararlıdır.

Web uygulamanızın çeşitli web tarayıcılarında çalışması gerekiyorsa, UI testini yalnızca PhantomJS ile çalıştırmak en fazla test kapsamı sağlamaz. Bununla birlikte, derinlemesine testler yapmadan önce PhantomJS'yi başlatmak ve bazı temel sağlık kontrolleri yapmak gayet iyi. Giriş ekranının yanlışlıkla kırıldığı ve çalışmadığı bir finans uygulamasını test etmenin çılgınlığını hayal edin!

İkisi arasındaki çizginin en son PhantomJS'deki son WebDriver desteği ile hafifçe bulanıklaştığını unutmayın. Şimdi testleri önce PhantomJS kullanarak hızlı bir şekilde yapmak ve daha sonra (ciddi bir hatayla karşılaşılmadığı varsayılarak) aynı testleri bir Selenyum kurulumunda iyice yapmaya devam etmek mümkündür.


Cevap için teşekkürler. Gerçek dünya üretim uygulamasında performansla ilgili istatistikleri toplamak için insanların nasıl phantomjs kullandıklarını anlamama yardımcı olabilecek herhangi bir bağlantı.
spirit3189

34
Ariya Hidayat, PhantomJ'lerin yaratıcısı gibi görünüyor
Sebastian Patten

Görünüşe göre PhantomJS ile test yazmaya başlama iş akışınız daha sonra Selenium'u kullanıyor, testlerin yeniden yazılmasını varsayıyor ... PhantomJS komut dosyalarını doğrudan Selenyum ile kullanabilir misiniz?
lajarre

1
Müthiş PhantomJS için teşekkürler, @AriyaHidayat! :)
rinogo

49

En son WebDriver entegrasyonu ile (Ariya'nın belirttiği gibi), PhantomJS'yi çalıştırmak için Selenyum'u kullanabilirsiniz.

Bu son derece güçlü.

Her check-in sırasında başsız bir Unix sunucusunda CI'niz aracılığıyla bir dizi tam otomatik Selenyum testi (WebDriver uygulaması olarak PhantomJS kullanarak) çalıştırabilirsiniz. Ardından, tarayıcı uyumluluğunu test etmek istiyorsanız, temel WebDriver uygulamasını Chrome, Firefox vb. Olarak değiştirerek testlerinizi yerel olarak çalıştırabilirsiniz.


41

Şu anda bir web çıkarma çerçevesi yazıyorum. XPath kullanarak 250 web sitesinden veri alan 524 testim var. Başlangıçta çerçeve bir HTML ayrıştırıcı, HTMLCleaner kullandı, ancak şu anda Selenium kullanarak araştırıyorum çünkü Javascript desteği istiyorum. Testleri HtmlUnit , Chrome, Firefox ve PhantomJS sürücülerine karşı çalıştırdım . Her bir yaklaşım için harcanan zaman ve başarısızlık sayısının bir karşılaştırması:

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

Bazı yorumlar:

  • Bazı durumlarda "başarısızlıklar" hiçbir şekilde başarısız olmayabilir, Javascript DOM'yi yeniden yazdığı için ayıklayıcılar başarısız olabilir. Nedeni bulmak için başarısızlıkları analiz etme sürecindeyim.

  • Bununla birlikte, HtmlUnit en hızlı Selenyum sürücüsüdür, ancak güvenilir değildir. Bu güvenilmezlik sadece Javascript ile ilgili değildir, etiket dengeleme algoritmasında bir şey kırılmış gibi göründüğü için "dağınık, kirli, gerçek dünya" HTML'sini işlemede sorunlar vardır. Bununla ilgili birkaç sorun ortaya çıkmıştır, ancak düzeltilmemiştir - bkz. HTML-UNIT 1423 ve HTML-UNIT 1046 .

  • Firefox, görüntü yükleme ve stil sayfalarını devre dışı bırakmama rağmen, en yavaş Selenyum sürücüsüdür. Bunun nedeni, yüklemenin ve başlatmanın en yavaş olması, Chrome'dan oldukça yavaş olması ve her çıkarma işleminde sürücüyü yeniden yüklemem gerektiğinde (testlerde herkes için URL alma gecikmelerini azaltmak için 5 sürücülü bir havuz oluşturuyorum Selenium web sürücüleri).

  • PhantomJS, Chrome'dan biraz daha düşük, ancak Firefox'un yaklaşık yarısında Firefox'tan daha iyi bir doğruluk elde eder. Dahası, geliştirici kutumda çalıştırabilirim, işime devam edebilmek için birden fazla tarayıcı başlatarak "makinemi devralmaz".

PhantomJS tavsiye.


1
Test takımınızı phantomJS ile çalıştırmak 9 dakika sürer? Sonsuza kadar hissetmek zorunda ...
Kevin

@Kevin Evet :) - ama HTMLCleaner standart test, diğer testleri isteğe bağlı olarak işaretlemek için JUnit kategorilerini kullandığımı işaretliyorum, böylece standart birim testlerinin bir parçası değiller
Mark Butler

Teşekkürler. Evet, tam js testleri üzerinde çalışıyorum ve çok buzullar - birkaç sayfa testi için 15-20 saniye gibi. Belki de 'buzul' ölçeğimin hehe olsa ayarlanması gerekiyor :) Tuhaf olsa da, manuel olarak yaparsam, formları tıklatmak sadece ~ 5 saniye sürer.
Kevin

1
@lucaswxp Evet! Ve diğer birçok proje arasında. Yukarıda açıkladığım gibi mükemmel bir seçim yok. O zaman HtmlCleaner kullandım, ancak çıkarılacak sayfanın ihtiyacı varsa PhantomJS'yi kullanmak için bir seçenek ekledim.
Mark Butler

1
@ iconoclast Hayır - ne yazık ki - önceki işverenin IP'si var.
Mark Butler

2

Hem Selenyum hem de PhantomJS'nin Gücünden Yararlanmak PhantomJS'nin başsız tarayıcı özellikleri vardır, bu nedenle onu selenyumlu tarayıcılardan biri olarak kullanmak iyidir (IE, Chrome vb. Gibi geleneksel tarayıcılara ek olarak) Bu yaklaşımın avantajları:

  1. CI'deki web uygulamaları için Sanity yapmak için kullanılabilir (Ajan makinelerinde IE veya krom olmasa da) testler etkili bir şekilde çalışır.
  2. Bazı geliştirme ekipleri bu yaklaşımı hızlı sonuçlar almak için kullanır ve daha az zaman ve kaynak tüketir.
  3. Phantom JS'nin en büyük özelliği, çoklu iş parçacığı kullanarak paralel testler gerçekleştiren ekran yakalamadır, bu da yürütme sürenizi büyük ölçüde azaltır.

1

PhantomJS kullanırken karşılaştığım zorluklar:

Uygulamam web uygulaması fiyatlandırıyordu:

  1. Bir noktada krom tarayıcıda iyi çalışan konum belirleyiciler phantomJS üzerinde çalışmıyor.
  2. Bazen selenyum ile çift tıklama veya bağlam tıklaması gerçekleştirirken, tıklamadığı ilk yerde işlemleri coz doğrulamak için ekstra bir kontrol yapmak zorundayım.
  3. Önbellek ve çerezlerin kalıcılığı. Oturumu kapattıktan sonra oturum açtıktan sonra veriler önbellekte kalır. | Testi krom üzerinde yapıyoruz.
  4. "Dosya yükleme sorunu" bulduğum en önemli sorunlardan biri. Uygulamamızdaki phantomJs tarayıcısına dosya yükleyemiyoruz. Javascriptexcutor, jqueries birçok şey denedik ama hiçbiri işe yaramadı. Bu testi Chrome'da da yapıyoruz. Not: Çerçevemizde PhantomJS için web öğesiyle etkileşim kurmak için javascript işlevlerini yaygın olarak kullandık. Bir şey, PhantomJS'de yürütme süresinin çok daha az olduğundan emin. Bu nedenle, işlevsellik / performans isteyip istemediğine müşteri önceliğine bağlıdır. Uçtan uca senaryoyu test etmek istiyorsanız chrome'a ​​gidin.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.