Używamy Selenium do automatyzacji naszych UItestów. Ostatnio widzieliśmy, że większość naszych użytkowników używa Chrome. Chcieliśmy więc wiedzieć - wady i zalety korzystania z PhantomJS vs Selenium:
Czy istnieje realna korzyść pod względem wydajności, np. Czas potrzebny do wykonania przypadków testowych?
Atakują różne problemy. Ponieważ PhantomJS działa doskonale w wierszu poleceń, nadaje się jako pierwsza warstwa testowania dymu, czy to w ramach przepływu pracy programistycznej, czy też na serwerze ciągłej integracji. Selenium jest ukierunkowane na wiele przeglądarek, dlatego bardzo przydatne jest zapewnienie spójności między przeglądarkami i przeprowadzanie obszernych testów w różnych systemach operacyjnych.
Jeśli Twoja aplikacja internetowa musi działać w różnych przeglądarkach internetowych, uruchomienie testów interfejsu użytkownika tylko z PhantomJS nie zapewni największego pokrycia testowego. Jednak jest całkowicie w porządku, aby uruchomić PhantomJS i przeprowadzić podstawowe testy poczytalności przed przeprowadzeniem szczegółowych testów. Wyobraź sobie szaleństwo testowania aplikacji finansowej, w której ekran logowania jest nieumyślnie uszkodzony i nie działa!
Zwróć uwagę, że granica między nimi jest nieco zamazana dzięki niedawnej obsłudze WebDriver w najnowszym PhantomJS. Teraz można szybko uruchomić testy najpierw przy użyciu PhantomJS, a następnie (zakładając, że nie wystąpił żaden poważny błąd), kontynuować dokładnie te same testy w konfiguracji Selenium.
Dzięki za odpowiedź.Każdy link, który pomoże mi zrozumieć, jak ludzie używają phantomjs do zbierania statystyk związanych z wydajnością w rzeczywistej aplikacji produkcyjnej.
spirit3189
34
Ariya Hidayat wygląda na twórcę PhantomJs
Sebastian Patten
Wygląda na to, że opisany przez Ciebie przepływ pracy polegający na rozpoczęciu pisania testów z PhantomJS, a następnie użyciu Selenium zakłada całkowite przepisanie testów ... Czy możesz używać skryptów PhantomJS bezpośrednio z Selenium?
lajarre
1
Dzięki za wspaniały PhantomJS, @AriyaHidayat! :)
rinogo
49
Dzięki niedawnej integracji WebDriver (jak zauważył Ariya), możesz teraz używać Selenium do sterowania PhantomJS.
To jest niezwykle potężne.
Możesz uruchomić zestaw w pełni zautomatyzowanych testów Selenium (używając PhantomJS jako implementacji WebDriver) za pośrednictwem swojego CI na bezgłowym serwerze Unix przy każdym zameldowaniu. Następnie, jeśli chcesz przetestować zgodność przeglądarki, możesz uruchomić testy lokalnie, zmieniając podstawową implementację WebDriver na Chrome, Firefox itp.
Obecnie piszę framework do wyodrębniania sieci. Mam 524 testy, które pobierają dane z 250 stron internetowych przy użyciu XPath. Początkowo framework używał parsera HTML, HTMLCleaner, ale obecnie badam użycie Selenium, ponieważ chcę obsługi JavaScript. Przeprowadziłem testy ze sterownikami HtmlUnit , Chrome, Firefox i PhantomJS . Oto porównanie wymaganego czasu i liczby niepowodzeń dla każdego podejścia:
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
Kilka komentarzy:
W niektórych przypadkach „awarie” mogą wcale nie oznaczać awarii, może się zdarzyć, że ekstraktory zawodzą, ponieważ Javascript ponownie zapisuje DOM. Jestem w trakcie analizy niepowodzeń w znalezieniu przyczyny.
To powiedziawszy, HtmlUnit jest najszybszym sterownikiem Selenium, ale jest również zawodny. Ta zawodność dotyczy nie tylko JavaScript, występują problemy z przetwarzaniem „niechlujnego, brudnego, rzeczywistego” kodu HTML, ponieważ wydaje się, że coś jest zepsute w algorytmie równoważenia tagów. Pojawiło się kilka problemów, ale nie zostały one naprawione - zobacz HTML-UNIT 1423 i HTML-UNIT 1046 .
Firefox jest najwolniejszym sterownikiem Selenium, mimo że wyłączam ładowanie obrazów i arkusze stylów. Dzieje się tak, ponieważ ładuje się i inicjuje najwolniej, co czyni go znacznie wolniejszym niż Chrome, a za każdym razem, gdy rozpakowywanie się nie powiedzie, muszę ponownie załadować sterownik (w testach tworzę pulę 5 sterowników, aby złagodzić opóźnienia w pobieraniu adresów URL dla wszystkich sterowniki sieciowe Selenium).
PhantomJS osiąga lepszą dokładność niż Firefox, nieco niższą niż Chrome, ale o około połowę krócej niż Firefox. Co więcej, mogę go uruchomić na moim dev box'ie, nie "przejmuje on mojego komputera" poprzez uruchamianie wielu przeglądarek, więc mogę kontynuować pracę.
Uruchomienie zestawu testów z phantomJS zajmuje 9 minut? To musi być wieczne ...
Kevin
@Kevin Tak :) - ale HTMLCleaner jest standardowym testem, oznaczam użycie kategorii JUnit, aby oznaczyć inne testy jako opcjonalne, więc nie są one częścią standardowych testów jednostkowych
Mark Butler
Dzięki. Tak, pracowałem nad testami full-js i są one tak lodowate - jak 15-20 sekund na test kilku stron. Być może moja skala „lodowcowa” musi zostać skorygowana, chociaż hehe :) Dziwne, że jeśli robię to ręcznie, wystarczy ~ 5 sekund, aby przejść przez formularze.
Kevin
1
@lucaswxp Yes! I wiele innych projektów pomiędzy nimi. Jak wyjaśniam powyżej, nie ma idealnego wyboru. W tamtym czasie korzystałem z HtmlCleaner, ale dodałem opcję użycia PhantomJS, jeśli strona do wyodrębnienia tego potrzebowała.
Mark Butler,
1
@iconoclast Nie - niestety - poprzedni pracodawca ma IP.
Mark Butler
2
Wykorzystując moc Selenium i PhantomJS
PhantomJS ma możliwości bezgłowej przeglądarki, dlatego dobrze jest używać go jako jednej z przeglądarek z selenem (oprócz tradycyjnych przeglądarek, takich jak IE, Chrome itp.) Zalety tego podejścia:
Może być używany do robienia Sanity dla aplikacji internetowych w CI (nawet jeśli komputery agentów nie mają IE ani Chrome), testy będą działać skutecznie.
Niektóre zespoły programistyczne stosują to podejście, aby uzyskać szybkie wyniki i pochłaniają mniej czasu i zasobów.
Największą cechą phantom JS jest przechwytywanie ekranu, uruchamianie równoległych testów przy użyciu wielowątkowości, co znacznie skraca czas wykonywania.
wyzwania, przed którymi stanąłem podczas korzystania z PhantomJS:
Moja aplikacja wyceniała aplikację internetową:
W pewnym momencie lokalizatory, które działały dobrze w przeglądarce Chrome, nie działają na phantomJS.
Czasami podczas wykonywania podwójnego kliknięcia lub kliknięcia kontekstowego selenem muszę dodatkowo sprawdzić weryfikację operacji, ponieważ na początku nie klikam.
Trwałość pamięci podręcznej i plików cookie. Po wylogowaniu się i zalogowaniu dane pozostają w pamięci podręcznej. | Więc wykonujemy test na chrome.
Jeden z najważniejszych problemów, które znalazłem "Problem z przesyłaniem plików". W naszej aplikacji nie możemy załadować pliku w przeglądarce phantomJs. Próbowaliśmy wielu rzeczy, takich jak javascriptexcutor, jqueries, ale żadna z nich w ogóle nie działała. Dlatego wykonujemy ten test również w przeglądarce Chrome. Uwaga: w naszym frameworku intensywnie używaliśmy funkcji javascript do interakcji z elementem sieciowym dla PhantomJS. Jedno jest pewne, czas wykonania w PhantomJS jest znacznie krótszy. Więc to zależy od priorytetu klienta, czy chce on Funkcjonalność / Wydajność, a potem iść z tym. Jeśli chcesz przetestować scenariusz od końca do końca, wybierz Chrome.
Dzięki niedawnej integracji WebDriver (jak zauważył Ariya), możesz teraz używać Selenium do sterowania PhantomJS.
To jest niezwykle potężne.
Możesz uruchomić zestaw w pełni zautomatyzowanych testów Selenium (używając PhantomJS jako implementacji WebDriver) za pośrednictwem swojego CI na bezgłowym serwerze Unix przy każdym zameldowaniu. Następnie, jeśli chcesz przetestować zgodność przeglądarki, możesz uruchomić testy lokalnie, zmieniając podstawową implementację WebDriver na Chrome, Firefox itp.
źródło
Obecnie piszę framework do wyodrębniania sieci. Mam 524 testy, które pobierają dane z 250 stron internetowych przy użyciu XPath. Początkowo framework używał parsera HTML, HTMLCleaner, ale obecnie badam użycie Selenium, ponieważ chcę obsługi JavaScript. Przeprowadziłem testy ze sterownikami HtmlUnit , Chrome, Firefox i PhantomJS . Oto porównanie wymaganego czasu i liczby niepowodzeń dla każdego podejścia:
Kilka komentarzy:
W niektórych przypadkach „awarie” mogą wcale nie oznaczać awarii, może się zdarzyć, że ekstraktory zawodzą, ponieważ Javascript ponownie zapisuje DOM. Jestem w trakcie analizy niepowodzeń w znalezieniu przyczyny.
To powiedziawszy, HtmlUnit jest najszybszym sterownikiem Selenium, ale jest również zawodny. Ta zawodność dotyczy nie tylko JavaScript, występują problemy z przetwarzaniem „niechlujnego, brudnego, rzeczywistego” kodu HTML, ponieważ wydaje się, że coś jest zepsute w algorytmie równoważenia tagów. Pojawiło się kilka problemów, ale nie zostały one naprawione - zobacz HTML-UNIT 1423 i HTML-UNIT 1046 .
Firefox jest najwolniejszym sterownikiem Selenium, mimo że wyłączam ładowanie obrazów i arkusze stylów. Dzieje się tak, ponieważ ładuje się i inicjuje najwolniej, co czyni go znacznie wolniejszym niż Chrome, a za każdym razem, gdy rozpakowywanie się nie powiedzie, muszę ponownie załadować sterownik (w testach tworzę pulę 5 sterowników, aby złagodzić opóźnienia w pobieraniu adresów URL dla wszystkich sterowniki sieciowe Selenium).
PhantomJS osiąga lepszą dokładność niż Firefox, nieco niższą niż Chrome, ale o około połowę krócej niż Firefox. Co więcej, mogę go uruchomić na moim dev box'ie, nie "przejmuje on mojego komputera" poprzez uruchamianie wielu przeglądarek, więc mogę kontynuować pracę.
Gorąco polecam PhantomJS.
źródło
Wykorzystując moc Selenium i PhantomJS PhantomJS ma możliwości bezgłowej przeglądarki, dlatego dobrze jest używać go jako jednej z przeglądarek z selenem (oprócz tradycyjnych przeglądarek, takich jak IE, Chrome itp.) Zalety tego podejścia:
źródło
wyzwania, przed którymi stanąłem podczas korzystania z PhantomJS:
Moja aplikacja wyceniała aplikację internetową:
źródło