Casperjs / PhantomJs vs Selenium


150

Chúng tôi đang sử dụng Selenium để tự động hóa UIthử nghiệm của chúng tôi . Gần đây, chúng tôi đã thấy phần lớn người dùng của chúng tôi sử dụng Chrome. Vì vậy, chúng tôi muốn biết - ưu và nhược điểm của việc sử dụng PhantomJS vs Selenium:

  • Có bất kỳ lợi thế thực sự nào về hiệu suất, ví dụ như thời gian thực hiện các trường hợp thử nghiệm?
  • Khi nào nên thích PhantomJS hơn Selenium?

Câu trả lời:


183

Họ đang tấn công các vấn đề khác nhau. Vì PhantomJS chạy hoàn hảo trên dòng lệnh, nên nó phù hợp làm lớp thử nghiệm khói đầu tiên, cho dù là một phần của quy trình phát triển và / hoặc trong một máy chủ tích hợp liên tục. Selenium nhắm mục tiêu nhiều trình duyệt và do đó rất hữu ích để đảm bảo tính nhất quán của trình duyệt chéo và thực hiện các thử nghiệm rộng rãi trên các hệ điều hành khác nhau.

Nếu ứng dụng web của bạn cần chạy trên nhiều trình duyệt web khác nhau, chỉ chạy thử nghiệm giao diện người dùng với PhantomJS sẽ không mang lại phạm vi kiểm tra nhiều nhất. Tuy nhiên, hoàn toàn ổn khi khởi chạy PhantomJS và thực hiện một số kiểm tra vệ sinh cơ bản trước khi thực hiện các bài kiểm tra chuyên sâu. Hãy tưởng tượng sự điên rồ của việc thử nghiệm một ứng dụng tài chính trong đó màn hình đăng nhập vô tình bị hỏng và không hoạt động!

Lưu ý rằng ranh giới giữa hai người bị mờ đi đôi chút với sự hỗ trợ WebDriver gần đây trong PhantomJS mới nhất. Bây giờ có thể nhanh chóng chạy các thử nghiệm đầu tiên bằng PhantomJS và sau đó (giả sử không có lỗi nghiêm trọng nào) tiếp tục thực hiện các thử nghiệm tương tự một cách triệt để trong thiết lập Selenium.


Cảm ơn câu trả lời. Mọi liên kết có thể giúp tôi hiểu cách mọi người sử dụng ph Phantomjs để thu thập các số liệu thống kê liên quan đến hiệu suất trong một ứng dụng sản xuất trong thế giới thực.
Spirit3189

34
Ariya Hidayat có vẻ là người tạo ra PhantomJs
Sebastian Patten

Có vẻ như quy trình công việc được mô tả của bạn khi bắt đầu viết thử nghiệm với PhantomJS sau đó sử dụng Selenium giả định viết lại toàn bộ các thử nghiệm ... Bạn có thể sử dụng trực tiếp các tập lệnh PhantomJS với Selenium không?
lajarre

1
Cảm ơn vì PhantomJS tuyệt vời, @AriyaHidayat! :)
rinogo

49

Với sự tích hợp WebDriver gần đây (như Ariya đã lưu ý), giờ đây bạn có thể sử dụng Selenium để lái PhantomJS.

Điều này là vô cùng mạnh mẽ.

Bạn có thể chạy một tập các thử nghiệm Selenium hoàn toàn tự động (sử dụng PhantomJS làm triển khai WebDriver) thông qua CI của bạn trên máy chủ Unix không đầu trên mỗi lần đăng ký. Sau đó, nếu bạn muốn kiểm tra khả năng tương thích của trình duyệt, bạn có thể chạy thử nghiệm cục bộ bằng cách thay đổi triển khai WebDriver bên dưới thành Chrome, Firefox, v.v.


41

Tôi hiện đang viết một khung trích xuất web. Tôi có 524 bài kiểm tra lấy dữ liệu từ 250 trang web bằng XPath. Ban đầu khung sử dụng trình phân tích cú pháp HTML, HTMLCleaner, nhưng tôi hiện đang điều tra bằng Selenium vì tôi muốn hỗ trợ Javascript. Tôi đã chạy thử nghiệm các trình điều khiển HtmlUnit, Chrome, Firefox và PhantomJS . Dưới đây là so sánh về thời gian thực hiện và số lần thất bại cho mỗi phương pháp:

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

Một vài bình luận:

  • Trong một số trường hợp, "thất bại" có thể không phải là thất bại, có thể là các trình trích xuất bị lỗi vì Javascript đang viết lại DOM. Tôi đang trong quá trình phân tích những thất bại để tìm ra nguyên nhân.

  • Điều đó nói rằng, HtmlUnit là trình điều khiển Selenium nhanh nhất nhưng nó cũng không đáng tin cậy. Sự không đáng tin cậy này không chỉ liên quan đến Javascript, có vấn đề khi xử lý HTML "lộn xộn, bẩn thỉu" trong thế giới thực bởi vì một cái gì đó dường như bị phá vỡ trong thuật toán cân bằng thẻ. Một số vấn đề đã được nêu ra về vấn đề này nhưng chúng chưa được khắc phục - xem HTML-UNIT 1423HTML-UNIT 1046 .

  • Firefox là trình điều khiển Selenium chậm nhất, mặc dù tôi đang vô hiệu hóa tải hình ảnh và bảng định kiểu. Điều này là do tốc độ tải và khởi tạo chậm nhất, khiến nó chậm hơn đáng kể so với Chrome và mỗi lần trích xuất không cần tải lại trình điều khiển (trong các thử nghiệm tôi tạo ra một nhóm 5 trình điều khiển để giảm thiểu độ trễ truy xuất URL cho tất cả trình điều khiển web Selenium).

  • PhantomJS đạt được độ chính xác tốt hơn Firefox, thấp hơn một chút so với Chrome, nhưng trong khoảng một nửa thời gian của Firefox. Hơn thế nữa, tôi có thể chạy nó trên hộp dev của mình, nó không "chiếm lấy máy của tôi" bằng cách khởi chạy nhiều trình duyệt để tôi có thể bắt tay vào công việc.

Tôi rất muốn giới thiệu PhantomJS.


1
Mất 9 phút để chạy bộ thử nghiệm của bạn với ph PhantomJS? Điều đó phải cảm thấy như mãi mãi ...
Kevin

@Kevin Có :) - nhưng HTMLCleaner là bài kiểm tra tiêu chuẩn, tôi đánh dấu sử dụng các danh mục JUnit để đánh dấu các bài kiểm tra khác là tùy chọn để chúng không phải là một phần của bài kiểm tra đơn vị tiêu chuẩn
Mark Butler

Cảm ơn. Vâng, tôi đã làm việc trên các bài kiểm tra js đầy đủ và chúng rất tuyệt vời - như 15-20 giây cho một bài kiểm tra vài trang. Có lẽ quy mô 'glacial' của tôi cần phải được điều chỉnh mặc dù hehe :) Mặc dù nếu tôi làm thủ công, chỉ mất ~ 5 giây để nhấp qua các biểu mẫu.
Kevin

1
@lucaswxp Vâng! Và rất nhiều dự án khác ở giữa. Như tôi giải thích ở trên không có sự lựa chọn hoàn hảo. Vào thời điểm đó, tôi đã sử dụng HtmlCleaner, nhưng đã thêm một tùy chọn để sử dụng PhantomJS, nếu trang cần giải nén cần.
Mark Butler

1
@iconoclast Không - thật không may - nhà tuyển dụng trước đó có IP.
Mark Butler

2

Tận dụng sức mạnh của cả Selenium và PhantomJS PhantomJS có khả năng trình duyệt không đầu, do đó, sử dụng nó như một trong những trình duyệt có selenium (Ngoài các trình duyệt truyền thống như IE, Chrome, v.v.) Ưu điểm của phương pháp này:

  1. Có thể được sử dụng để thực hiện Sanity cho các ứng dụng web trong CI (Mặc dù các máy đại lý không có IE hoặc chrome), các thử nghiệm sẽ chạy hiệu quả.
  2. Một số nhóm phát triển sử dụng phương pháp này để có được kết quả nhanh chóng và tiêu tốn ít thời gian và tài nguyên hơn.
  3. Tính năng lớn nhất của ph Phantom JS là chụp màn hình, chạy thử nghiệm song song bằng cách sử dụng đa luồng, điều này sẽ giúp giảm đáng kể thời gian thực hiện của bạn.

1

những thách thức tôi gặp phải khi sử dụng PhantomJS:

Ứng dụng của tôi đã định giá ứng dụng web:

  1. Tại một số điểm định vị hoạt động tốt trên trình duyệt chrome không hoạt động trên ph PhantomJS.
  2. Đôi khi trong khi thực hiện nhấp đúp hoặc nhấp chuột theo ngữ cảnh bằng selen, tôi phải kiểm tra thêm để xác minh các thao tác tại nơi đầu tiên không nhấp.
  3. Cache và cookie kiên trì. Sau khi thực hiện đăng xuất và sau đó đăng nhập dữ liệu vẫn còn trong bộ nhớ cache. | Vì vậy, chúng tôi thực hiện thử nghiệm trên chrome.
  4. Một trong những vấn đề quan trọng nhất tôi tìm thấy "Sự cố tải lên tệp". Chúng tôi không thể tải lên một tệp trong trình duyệt ph PhantomJs trong ứng dụng của chúng tôi. Chúng tôi đã thử nhiều thứ javascriptexcutor, jqueries nhưng không có cái nào hoạt động cả. Vì vậy, chúng tôi cũng thực hiện thử nghiệm này trên Chrome. Lưu ý: Chúng tôi đã sử dụng các hàm javascript rộng rãi trong khung của chúng tôi để tương tác với phần tử web cho PhantomJS. Một điều chắc chắn là thời gian thực hiện rất ít trong PhantomJS. Vì vậy, nó phụ thuộc vào mức độ ưu tiên của khách hàng cho dù anh ta muốn Chức năng / Hiệu suất sau đó đi cùng với nó. Nếu bạn muốn kiểm tra kịch bản từ đầu đến cuối thì hãy chọn chrome.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.