2012-10-09 44 views
37

Tôi đang cố gắng hiểu khuôn khổ thử nghiệm tốt hơn và đang tìm kiếm vào Selenium. Tôi đã sử dụng HTMLUnit trước đây, chủ yếu là khi tôi cần phải loại bỏ một số thông tin ra khỏi trang web hoặc thích.Selenium vs HtmlUnit?

Trong ngữ cảnh viết tự động hóa thử nghiệm, lợi thế/nhược điểm của Selenium vs HTMLUnit là gì? Trông với tôi Selenium phức tạp hơn để thiết lập hơn HTMLUnit, mặc dù đồng thời có một HTMLUnitDriver cho Selenium mà tôi nghĩ là hành xử giống hệt như trong HTMLUnit? Với Selenium RC để kiểm tra pararel, nó cũng có trình điều khiển trình duyệt khác nhau có thể được sử dụng - mặc dù khi bạn sử dụng trình điều khiển trình duyệt, thử nghiệm sẽ thực sự mở/đóng ứng dụng trình duyệt chứ không phải là hơn không đầu.

Có thể tôi không hiểu chính xác Selenium. Một số hướng và con trỏ sẽ là tuyệt vời!

Lưu ý khác - tôi cũng đang xem xét thử nghiệm tự động trên trình duyệt di động, tôi thấy rằng Selenium có một số IPhoneDriver cho nó, nhưng đây không phải là một thử nghiệm không đầu hoặc vì nó yêu cầu trình mô phỏng iOS thực tế.

Có cách nào để thực hiện kiểm tra không đầu trên các trang web trên thiết bị di động không? Thay đổi tác nhân người dùng có đủ không? Tôi đã nhìn thấy một vài bài đăng xung quanh việc thay đổi tác nhân người dùng dường như có những thách thức riêng của họ, ví dụ: Set user-agent in Selenium RC

Cảm ơn rất nhiều!

+1

Các bạn đã nghĩ đến việc sử dụng PhantomJS hoặc "Headless Chrome" để thay thế ? – djangofan

Trả lời

62

tốt, sẽ cố gắng giải thích sự khác biệt chi tiết.

Nói về thử nghiệm song song, tốt hơn nên sử dụng lưới selen. Khái niệm cơ bản về selenium RC và lưới selen. traditional selenium setup selenium grid setup selenium grid:Requesting a Specific Environment Bạn có thể nhận được vào chi tiết hơn here

Một số từ về selen webDriver:

Các tính năng mới trong chính Selenium 2.0 là sự tích hợp của API WebDriver. WebDriver được thiết kế để cung cấp một giao diện lập trình đơn giản hơn, súc tích hơn cùng với việc giải quyết một số hạn chế trong API Selenium-RC. Selenium-WebDriver được phát triển để hỗ trợ tốt hơn các trang web động mà các thành phần của một trang có thể thay đổi mà không cần trang được tải lại. Mục tiêu của WebDriver là cung cấp một API hướng đối tượng được thiết kế tốt, cung cấp hỗ trợ được cải thiện cho các vấn đề kiểm tra ứng dụng web nâng cao hiện đại.

WebDriver ‘Drive’ trình duyệt so với Selenium-RC như thế nào?

Selenium-WebDriver thực hiện cuộc gọi trực tiếp tới trình duyệt bằng cách sử dụng hỗ trợ gốc của mỗi trình duyệt để tự động hóa. Cách thực hiện các cuộc gọi trực tiếp này và các tính năng mà họ hỗ trợ phụ thuộc vào trình duyệt bạn đang sử dụng. Thông tin về mỗi "trình điều khiển trình duyệt" được cung cấp sau trong chương này. Đối với những người quen thuộc với Selenium-RC, điều này là khá khác với những gì bạn đang sử dụng để. Selenium-RC làm việc theo cùng một cách cho mỗi trình duyệt được hỗ trợ. Các hàm JavaScript 'được tiêm' vào trình duyệt khi trình duyệt được tải và sau đó sử dụng javascript của nó để điều khiển AUT trong trình duyệt. WebDriver không sử dụng kỹ thuật này. Một lần nữa, nó lái trực tiếp trình duyệt bằng cách sử dụng tính năng hỗ trợ tự động hóa của trình duyệt.

WebDriver và Selenium-Server

Bạn có thể, hoặc có thể không, cần Server Selenium, tùy thuộc vào cách bạn định sử dụng Selenium-WebDriver. Nếu bạn chỉ sử dụng API WebDriver, bạn không cần máy chủ Selenium. Nếu trình duyệt và kiểm tra của bạn sẽ chạy trên cùng một máy, và các thử nghiệm của bạn chỉ sử dụng API WebDriver, thì bạn không cần chạy Máy chủ Selenium; WebDriver sẽ chạy trình duyệt trực tiếp. Có một số lý do để sử dụng Selenium-Server với Selenium-WebDriver.

  • Bạn đang sử dụng Selenium-Grid để phân phối thử nghiệm trên nhiều máy hoặc máy ảo (VM).
  • Bạn muốn kết nối với máy từ xa có một phiên bản cụ thể không có trong máy hiện tại của bạn.
  • Bạn không sử dụng các ràng buộc Java (tức là Python, C#, hoặc Ruby) và muốn sử dụng HtmlUnit driver

Selenium-WebDriver Drivers của WebDriver là tên của giao diện chính chống lại thử nghiệm nào nên được viết, nhưng có một số triển khai. Chúng bao gồm:

HtmlUnit driver này hiện là việc thực hiện nhanh nhất và nhẹ nhất của WebDriver. Như tên cho thấy, điều này được dựa trên HtmlUnit. HtmlUnit là một thực thi dựa trên java của một WebBrowser mà không có GUI. Đối với bất kỳ ràng buộc ngôn ngữ nào (ngoài java), máy chủ Selenium được yêu cầu sử dụng trình điều khiển này.

Ưu

  • thực hiện nhanh nhất của WebDriver
  • Một giải pháp Java tinh khiết và vì vậy nó là nền tảng độc lập.
  • Hỗ trợ JavaScript

Nhược điểm

  • Giả lập hành vi các trình duyệt khác JavaScript (xem dưới đây)

JavaScript trong trình HtmlUnit driver Không ai trong số các trình duyệt phổ biến sử dụng động cơ Javascript được sử dụng bởi HtmlUnit (Rhino).Nếu bạn kiểm tra JavaScript bằng cách sử dụng HtmlUnit kết quả có thể khác đáng kể so với các trình duyệt đó. Khi chúng tôi nói “JavaScript”, chúng tôi thực sự có nghĩa là “JavaScript và DOM”. Mặc dù DOM được định nghĩa bởi W3C, mỗi trình duyệt đều có những điều kỳ quặc và khác biệt trong việc triển khai DOM của chúng và cách JavaScript tương tác với nó. HtmlUnit có một sự thực thi đầy ấn tượng của DOM và có hỗ trợ tốt cho việc sử dụng JavaScript, nhưng nó không khác với bất kỳ trình duyệt nào khác: nó có những điều kỳ quặc và khác biệt so với chuẩn W3C và triển khai DOM của các trình duyệt chính, mặc dù khả năng bắt chước các trình duyệt khác. Với WebDriver, chúng tôi phải lựa chọn; chúng tôi có bật khả năng JavaScript của HtmlUnit và chạy nguy cơ các nhóm gặp sự cố chỉ thể hiện ở đó hay chúng tôi để JavaScript bị vô hiệu hóa, biết rằng ngày càng có nhiều trang web dựa vào JavaScript? Chúng tôi đã sử dụng phương pháp bảo thủ và theo mặc định đã tắt hỗ trợ khi chúng tôi sử dụng HtmlUnit. Với mỗi bản phát hành của cả WebDriver và HtmlUnit, chúng tôi đánh giá lại quyết định này: chúng tôi hy vọng bật JavaScript theo mặc định trên HtmlUnit tại một số điểm.

Để điều tra sâu hơn vào setUp webDriver xem this

Từ HtmlUnit documentation: HtmlUnit không phải là một khuôn khổ kiểm tra đơn vị chung. Nó đặc biệt là một cách để mô phỏng một trình duyệt cho các mục đích thử nghiệm và được dự định sẽ được sử dụng trong một khung kiểm thử khác như JUnit hoặc TestNG.

Vì vậy để kết luận Selenium và sự khác biệt HtmlUnit: HtmlUnit là một java dựa thi hành một WebBrowser mà không có một giao diện đồ họamột cách để mô phỏng một trình duyệt cho mục đích thử nghiệmSelenium-WebDriver làm cho các cuộc gọi trực tiếp cho trình duyệt bằng cách sử dụng hỗ trợ gốc của mỗi trình duyệt để tự động hóa. chúng ta có thể thấy rằng HtmlUnit cung cấp API mà không có khả năng GUI cho tự động hóa trong khi WebDriver cung cấp khả năng tự động hóa trình duyệt nội bộ.

Phát biểu về tự động hóa điện thoại di động, Selenium cũng có một điều khiển iPhone iPhone Driver wiki article và Android điều khiển Android Driver wiki article

Xem thêm this presentation

Đáng tiếc là tôi không thể cung cấp cho bạn đánh giá kinh nghiệm làm việc của tôi về trình điều khiển di động như tôi đối phó với tự động hóa web (không có điện thoại di động). Cũng biết rằng Cucumber (công cụ tự động hóa) phổ biến trong số các thiết bị di động. xem thisthis.

Hy vọng nó sẽ trở nên rõ ràng hơn một chút lil cho bạn bây giờ =)

+0

Cảm ơn rất nhiều vì đã giải thích! ...Vì vậy, trình điều khiển dành riêng cho trình duyệt (thay vì HTMLUnitDriver) tốt hơn vì chúng kiểm tra chính xác trình duyệt sẽ hoạt động như thế nào - nhưng điều này xuất phát từ chi phí mà trình duyệt bật lên và tắt trên màn hình của bạn (chỉ cần một chút phiền toái khi bạn chạy thử nghiệm của mình) tại địa phương bạn thấy ứng dụng trình duyệt này hiện ra trong và ngoài) - Không có cách nào để không tải trình duyệt thực tế (ngoài việc sử dụng HTMLUnitDriver)? –

+0

có một. Nếu bạn thấy khó chịu, bạn có thể lấy máy từ xa (VM) và nhận ví dụ. kiểm tra selen chạy trên máy từ xa. Để chia sẻ cách tiếp cận tôi sử dụng cho dự án hiện tại: thêm nhiệm vụ mới vào hudson -jenkins để chạy bộ kiểm thử hàng ngày và nhận thông báo e-mail về trạng thái kiểm tra. Chúng ta không nên quên mục tiêu cơ bản của các bộ kiểm tra tự động: bất kể loại trình điều khiển nào được sử dụng, chúng ta nên hoàn toàn tự tin rằng chức năng của ứng dụng ổn định và sẵn sàng phát hành. Chi tiết (HTMLUnitDriver hoặc lựa chọn khác) tùy thuộc vào yêu cầu và các phụ thuộc khác. –

+0

Một vài năm trước, tôi đã sử dụng công cụ JavaService để cài đặt Selenium RC như một Dịch vụ Windows để tôi có thể để nó hoạt động không cần giám sát như là một quá trình không đầu mà không cần đăng nhập vào máy. Jenkins sẽ khởi động Dịch vụ Windows thông qua một nhiệm vụ thực thi ANT và khi hoàn thành bộ thử nghiệm, một nhiệm vụ ANT khác sẽ dừng Dịch vụ. Tôi đã theo http://bit.ly/pWS7yR này để tạo một tệp dơi tùy chỉnh để thực hiện cài đặt dịch vụ, ví dụ http://pastebin.com/zvivguaP –

2

Selenium và HTMLUnit có phần tương tự về khái niệm, nhưng Selenium trưởng thành hơn/mạnh mẽ hơn và có nhiều tính năng hơn.

Lưu ý rằng Selenium bao gồm plugin ghi (IDE) cho Firefox, cho phép bạn ghi lại các thử nghiệm và khung công tác tự động hóa RC/WebDriver về cơ bản sẽ điều khiển trình duyệt. Cả hai có thể được sử dụng cùng nhau để tạo ra thử nghiệm rất dễ dàng. Một lợi thế duy nhất tôi có thể thấy khi sử dụng HTMLUnit là nó ít tốn kém tài nguyên hơn, vì vậy bạn có khả năng chạy thử nghiệm trên phần cứng ít hơn, nhưng với sự hỗ trợ song song của Selenium thậm chí không thực sự đúng nữa.

1

Khi chạy thử nghiệm từ Jenkins qua đêm, bạn thường không có quyền truy cập vào một hệ thống cửa sổ như X11 hoặc Windows, trong đó để chạy trên web trình duyệt. Do đó, tôi thấy lợi ích của việc sử dụng trình điều khiển web HTMLUnit trong trường hợp đó vì nó không yêu cầu quyền truy cập vào hệ thống cửa sổ.

+0

bạn có thể sử dụng Xvbf để chạy bất kỳ trình duyệt gui nào với Jenkins –

Các vấn đề liên quan