Selenium WebDriver & Unit Testing trên Window

Selenium WebDriver hỗ trợ các phương thức can thiệp DOM HTML để thực hiện các thao tác tự động trên trình duyệt. Đối với các tính năng test cơ bản trên web/ blog, Selenium hỗ trợ tester thực hiện các test point, test case kiểm thử các phương thức hoạt động trên site nhằm bảo đảm chúng hoạt động chính xác dựa trên bản yêu cầu.

Selenium được ứng dụng để kiểm thử UI Testing. Ví dụ khi deploy tính năng phân quyền người dùng trên hệ thống ngoài unit test trên code, thì phía giao diện người dùng làm sao để kiểm tra giao diện hoạt động đúng tương ứng với nhiều quyền và nhóm quyền khác nha, sự tương thích các quyền mới bổ sung,… thì tester có thể sử dụng Selenium viết các test case để tự động kiểm thử được luồng quy trình này và đưa ra các kết quả báo cáo tương ứng. Điều này có nghĩa là nó có thể được thực hiện bởi developer, tester hoặc sự phối hợp từ cả 2.

Các bước cài đặt Selenium và các ứng dụng liên quan như sau:

Setup Java JDK

Tải và cài đặt Java JDK bản mới nhất tại: https://www.oracle.com/java/technologies/downloads/#jdk20-windows

Sau khi cài đặt cần thiết lập biến môi trường cho Java: JAVA_HOME giá trị là đường dẫn đến thư mục cài đặt Java JDK.

Sau khi thiết lập, sử dụng cmd để kiểm tra:

Dùng phí tắt Window + R nhập cmd, nhập echo %JAVA_HOME% nếu trả về kết quả đường dẫn đã cài đặt ở bước trên là được.

echo %JAVA_HOME%

WebDriver

Cài đặt chromedriver ứng với version chrome đang dùng trên máy tại: https://chromedriver.chromium.org/downloads hoặc https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/#1-selenium-manager--beta-

Để kiểm tra phiên bản trình duyệt Chrome trên máy đang dùng, bạn mở Chrome chọn Settings/ Help/ About Google Chrome. Đối với các trình duyệt khác Selenium hỗ trợ cũng tương tự.

Copy file cài đặt vào thư mục lưu trữ phù hợp để khởi chạy cùng server test, ví dụ: E:\WebDriver\bin (lưu ý là trừ khi viết ứng dụng tích hợp webdriver thì thư mục nào cũng được bạn nhé). Tiếp theo bạn set PATH trên cmd nếu chưa có như sau:

setx PATH "%PATH%;E:\WebDriver\bin"

Kiểm tra version chromedriver trên cmd: cd tới tư mục E:\WebDriver\bin sau đó nhập chromedriver.exe –version nếu phiên bản chromedriver hiển thị kết quả là phiên bản đã tải về là được.

Selenium JAR standalone

Tải Selenium server bản mới nhất tại: https://www.selenium.dev/downloads/, sao chép tập tin tải về vào thư mục lưu trữ để tiện truy cập, ví dụ ổ E:/selenium-server-standalone-<version>.jar

Để khởi chạy server selenium mở cmd hoặc shell sau đó thực thi lệnh với cấu trúc như sau:

java -jar standalone path/to/selenium-server-standalone-<version>.jar --port 4444

Cụ thể phiên bản selenium server 4.9.1 trong ổ E:\ nên lệnh thực tế mình thực thi như sau trên cmd:

java -jar "E:\selenium-server-4.9.1.jar" standalone --port 4444

Nếu khởi động thành công ứng dụng sẽ thông báo địa chỉ ip server và port. Mình sẽ dùng thông tin này để sử dụng trong quá trình viết test case.

Cá nhân mình viết khá nhiều crawler và cũng sử dụng Selenium để viết các ứng dụng auto nên mình chia sẻ nếu phải viết test nhiều trên UI thì các ngôn ngữ lập trình ứng dụng trên window form như C# hoặc phần mềm test chuyên dụng là sự lựa chọn tối ưu hơn mà bạn nên cân nhắc so với PHP.

UI Testing sử dụng Selenium PHP WebDriver
UI Testing sử dụng Selenium PHP WebDriver

Viết test case với PHP WebDriver

Thông thường để viết các test point đơn giản hay tổ hợp test case phức tạp cần sử dụng các thư viện tích hợp chuyên hỗ trợ Unit Testing. Tuy nhiên, đối với các mẫu kiểm thử đơn giản thì lập trình viên hoàn toàn có thể viết test point song song trên ngôn ngữ lập trình đang phát triển ứng dụng. Ở đây mình sẽ sử dụng PHP để viết test các tính năng sẵn có trên blog WordPress.

Đầu tiên để thực hiện các test case cần tạo dự án mới và tải php-webdriver về. Nếu chưa có dự án bạn có thể get mã nguồn php-webdriver từ github và code trực tiếp trên đó:

git clone https://github.com/php-webdriver/php-webdriver

Sau đó, sử dụng IDE để update các thư viện liên quan. Ở đây mình sử dụng Visual Studio Code + Terminal Composer update qua lệnh:

composer update

Sau khi update, có thể bắt đầu viết các test case cần kiểm thử thông qua webdriver. Trong các ví dụ sau đây mình chia sẻ chi tiết cách viết một số test case đơn giản để thực hiện các thao tác như sau:

  • Kiểm tra thời gian login tự động vào danh sách website wordpress. Ghi chú lại thời gian login tương ứng với từng website.
  • Kiểm tra thời gian tự động đăng 10 bài viết lên các blog trên với các thao tác: nhập tiêu đề bài viết + thứ tự bài từ 1-10, nội dung mô tả bài viết, chèn hình ảnh vào bài viết. Đăng bài viết tự động lên site.
  • Ghi logs thông tin site, thời gian login, thời gian đăng bài, thời gian trung bình đăng bài, thời gian trung bình login,… vào tập tin logs.txt.

Lưu ý: việc test tốc độ phản hồi thường chỉ là thông số tham khảo vì kiểm thử các vấn đề liên quan tới máy chủ, hosting không thể chỉ test đơn thuần các ứng dụng web/ app trên đó mà còn phụ thuộc vào cấu hình, phần cứng đang sử dụng.

Test đăng nhập blog WordPress

Link project trong ví dụ:  https://github.com/PolyXGO/selenium-php/blob/main/test_login.php

Kiểm tra luồng và trạng thái đăng nhập là một trong những test point cơ bản khi ứng dụng Unit Test. Trong ví dụ này mình sử dụng trên blog wordpress, ở các hệ thống website khác bạn cũng thực hiện tương tự nhé!

Test đăng bài blog WordPress

Link project:  https://github.com/PolyXGO/selenium-php/blob/main/test_posting.php

Test gửi thông tin liên hệ

Link project:

Download hình ảnh từ website

Link project:

Đây không hẳn là một test case mà là ứng dụng sử dụng Selenium webdriver để viết mã hỗ trợ tự động download hình ảnh từ amazon, lazada, tiki, shopee, fahasa hay các website bất kỳ.

Test tốc độ phản hồi web/ blog

Tính năng này đơn giản chỉ request liên tục vào một danh sách liên kết cần kiểm tra, sau đó ghi nhận thời gian thực thi của từng phiên, thời gian truy cập trung bình,…

Test độ ổn định trong phản hồi từ các nhánh RESTful API

Link project:

Tương tự như phần test tốc độ phản hồi web/ blog. Tính năng test truy cập vào danh sách các nhánh API cần kiểm tra để ghi nhận thời gian phản hồi dữ liệu từng phiên, thời gian trung bình giữa các phiên truy cập.

… đang cập nhật…

Kết

Selenium là một công cụ phổ biến được sử dụng hỗ trợ tester trong việc kiểm thử giao diện người dùng (UI testing), nó có thể hỗ trợ trong việc thực hiện unit testing cho các thành phần UI của ứng dụng: web/ blog, CRM,… để đảm bảo chúng hoạt động đúng và ổn định trước khi tới người dùng đầu cuối.