Như các bạn đã biết, Selenium là một trong những công cụ kiểm thử phần mềm tự động mã nguồn mở (open source test automation tool) mạnh mẽ nhất hiện nay cho việc kiểm thử ứng dụng Web. Selenium script có thể chạy được trên hầu hết các trình duyệt như IE, Mozilla FireFox, Chrome, Safari, Opera; và hầu hết các hệ điều hành như Windows, Mac, Linux.
Selenium là một công cụ kiểm thử phần mềm tự động, được phát triển bởi ThoughtWorks từ năm 2004 với tên ban đầu là JavaScriptTestRunner. Đến năm 2007, tác giả Jason Huggins rời ThoughtWorks và gia nhập Selenium team, một phần của Google và phát triển thành Selenium như hiện nay.
Về cấu trúc thì Selenium có 4 phần
- Selenium IDE
- Selenium RC (Selenium 1 – Selenium Remote Control)
- Selenium Gird
- Selenium WebDriver (Selenium 2)
Selenium IDE (Integrated Development Environment) là một công cụ cho phép chúng ta Record/Playback một test script. Đây là một add-on hỗ trợ cho FireFox. Chúng ta chỉ có thể Record trên trình duyệt FireFox, nhưng bù lại, chúng ta có thể Playback trên các trình duyện khác như là IE, Chrome….
Selenium Gird là một hệ thống hỗ trợ người dùng thực thi test script trên nhiều trình duyệt một cách song song mà không cần phải chỉnh sửa test script.
Selenium RC, Selenium WebDriver là một thư viện cho phép chúng ta lập trình (scripting) test script trên các ngôn ngữ lập trình khác nhau như Python, Java, C#, Ruby.
Selenium WebDriver (Selenium 2.0)
- Tính năng chính trong Selenium 2.0 là việc tích hợp WebDriver API. Selenium WebDriver được thiết kế để mang đến một giao diện lập trình đơn giản hơn và giải quyết một số hạn chế trong Selenium- RC API (Một phần khác của Selenium có thể coi là phiên bản tiền thân của selenium WebDriver)
- Selenium WebDriver cho phép chúng ta sử dụng một trong số các ngôn ngữ lập trình như HTML, Java, .Net, Perl, Ruby… để tạo kịch bản test (Test Case) kết hợp với sử dụng các điều kiện, vòng lặp… khiến cho test script trở nên chính xác hơn.
- Selenium WebDriver được phát triển tốt hơn để hỗ trợ cho các trang web động ( Những trang web mà phần tử trong nó có thể thay đổi ngay cả khi trang đó không được tải lại)
Mục đích của WebDriver là hỗ trợ cho các vấn đề về kiểm thử web-app hiện nay.
So sánh WebDriver và Selenium RC
a. Cấu trúc: Cấu trúc của WebDriver đơn giản hơn Selenium RC
- WebDriver kiểm soát trình duyệt từ cấp độ OS. Tất cả những gì chúng ta cần khi sử dụng WebDriver cho công việc kiểm thử là tập lệnh Selenium và một trình duyệt để thực hiện các lệnh trên.
Ngược lại, Selenium RC có cấu trúc phức tạp hơn rất nhiều. Cụ thể như sau:
- Trước khi bắt đầu thực hiện kiểm thử, chúng ta phải chạy được một ứng dụng riêng biệt được gọi là Selenium-RC Server. Đây là một ứng dụng hoạt động như một trạm trung gian giữa các selenium command và trình duyệt.
- Khi chúng ta bắt đầu thực hiện kiểm thử, Selenium-RC Server (sau đây sẽ gọi tắt là Server) sẽ truyền một chương trình Javascript gọi là Selenium Core vào trong trình duyệt. Selenium Core sẽ nhận chỉ thị được đưa ra bởi server (Các chỉ thị được hình thành khi chạy các selenium command)
- Tiếp theo Selenium Core sẽ thực hiện các chỉ thị này như một lệnh Javascript.
- Lúc này, trình duyệt mới nhận được các lệnh từ Selenium Core và phản hồi lại phía Server.
- Cuối cùng server mới trả về kết quả cho chúng ta.
Như vậy thay vì việc trực tiếp thực hiện và nhận phản hồi từ trình duyệt như một end-user thông thường, khi sử dụng Selenium RC chúng ta phải qua rất nhiều bước trung gian. Để mô tả rõ hơn cho quy trình này, xin hãy xem hình dưới đây:
b. Tốc độ
Như chúng ta đã thấy, từ cấu trúc hoạt động được mô tả như ở trên, chắc chắn tốc độ thực thi và nhận phản hồi từ trình duyệt khi sử dụng WebDriver sẽ nhanh hơn vì nó thực hiện mọi hành động trực tiếp với trình duyệt còn Selenium-RC thì phải thông qua trạm trung gian và mất thời gian hơn cho việc chuyển đổi nên thời gian để nhận phản hồi từ trình duyệt sẽ dài hơn.
c. Sự tương tác thực tế
Webdriver có tính tương tác gần với thực tế hơn vì nó thực hiện các hành động trực tiếp với trình duyệt giống như các end-user trong thực tế. Còn Selenium-RC thì không như vậy, khi sử dụng Selenium-RC, cái trực tiếp tương tác với trình duyệt là Selenium Core và vì vậy sẽ có một số trường hợp kết quả trả về sai so với thực tế.
Ví dụ, có một trường trên trang web bị vô hiệu hóa, thực tế end-user không thể nhập bất cứ dữ liệu nào vào trong trường đó. Yêu cầu của chúng ta là phải kiểm tra xem thực tế trường đó đã bị vô hiệu hóa hay chưa?
- TH1: sử dụng WebDriver, kết quả trả về là không nhập được dữ liệu vào trường đang kiểm tra.
- TH2: Sử dụng Selenium-RC, một số kết quả trả về cho thấy vẫn có trường hợp cho phép nhập dữ liệu vào trường đang vô hiệu hóa.
Các đặc điểm của Selenium
- Mã nguồn mở. Phải nói điểm này là điểm mạnh nhất của Selenium khi so sánh với các test tool khác. Vì là mã nguồn mở nên chúng ta có thể sử dụng mà không phải lo lắng về phí bản quyền hay thời hạn sử dụng.
- Cộng đồng hỗ trợ. Vì là mã nguồn mở nên Selenium có một cộng đồng hỗ trợ khá mạnh mẽ. Bên cạnh đó, Google là nơi phát triển Selenium nên chúng ta hoàn toàn có thể yên tâm về sự hổ trợ miễn phí khi có vấn đề về Selenium. Tuy nhiên, đây cũng là một điểm yếu của Selenium. Cơ bản vì là hàng miễn phí, cộng đồng lại đông nên một vấn đề có thể nhiều giải pháp, và có thể một số giải pháp là không hữu ích. Mặc khác, chúng ta không thể hối thúc hay ra deadline cho sự hỗ trợ.
- Selenium hỗ trợ nhiều ngôn ngữ lập trình.
- Selenium hỗ trợ chạy trên nhiều OS khác nhau với mức độ chỉnh sửa script hầu như là không có. Thực sự thì điều này phụ thuộc phần lớn vào khả năng viết script của chúng ta.
- Chạy test case ở backround. Khi chúng ta thực thi một test scrpit, chúng ta hoàn toàn có thể làm việc khác trên cùng một PC. Điều này hỗ trợ chúng ta không cần tốn quá nhiều tài nguyên máy móc khi chạy test script.
- Không hỗ trợ Win app. Selenium thực sự chỉ hỗ trợ chúng ta tương tác với Browser mà không hỗ trợ chúng ta làm việc với các Win app, kể cả Win dialog như Download/Upload – ngoại trừ Browser Alarm. Vậy nên, để xử lý các trường hợp cần tương tác với hệ thống hay một app thứ ba, chúng ta cần một hay nhiều thư viện khác như AutoIt hay Coded UI.