Phương pháp triển khai đề tài
a) Tìm hiểu kiểm thử phần mềm và Selenium Webdriver b) Thiết kế và xây dựng chương trình kiểm thử phần mềm tự động bằng Selenium Webdriver
Báo cáo này bao gồm các nội dung chính như sau: đầu tiên, phần cơ sở lý thuyết sẽ trình bày những khái niệm nền tảng; tiếp theo, phần kiểm thử trang web tự động bằng Selenium sẽ mô tả quy trình và công cụ sử dụng; sau đó, phần phân tích và xây dựng bài toán sẽ nêu rõ cách tiếp cận và giải quyết vấn đề; cuối cùng, phần demo chương trình và kết luận sẽ tổng hợp các kết quả đạt được và đưa ra những nhận xét tổng quát.
Dự kiến kết quả
Các cấp độ kiểm thử phần mềm
- Kiểm thử đơn vị (Unit Test): Một đơn vị là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được
Kiểm thử tích hợp (Integration Test) là quá trình kết hợp các thành phần của một ứng dụng và kiểm tra chúng như một ứng dụng hoàn chỉnh Khác với kiểm thử đơn vị, chỉ kiểm tra các thành phần riêng lẻ, kiểm thử tích hợp chú trọng vào việc đánh giá sự giao tiếp và tương tác giữa các thành phần này.
Kiểm thử hệ thống (System Test) là quá trình đánh giá xem thiết kế và toàn bộ hệ thống đã được tích hợp có đáp ứng các yêu cầu đã đề ra hay không Quá trình này kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu chất lượng như độ tin cậy, tính tiện lợi, hiệu năng và bảo mật Kiểm thử hệ thống được thực hiện khi tất cả các phần của phần mềm đã được tích hợp thành công Điểm khác biệt chính giữa kiểm thử tích hợp và kiểm thử hệ thống là kiểm thử hệ thống tập trung vào việc phát hiện các hành vi và lỗi trên toàn bộ hệ thống, trong khi kiểm thử tích hợp chú trọng vào sự tương tác giữa các thành phần khi hoạt động cùng nhau.
Kiểm thử chấp nhận sản phẩm (Acceptance Test) nhằm xác định khả năng chấp nhận cuối cùng của sản phẩm, đảm bảo rằng sản phẩm đáp ứng đầy đủ các yêu cầu của khách hàng và được khách hàng chấp nhận.
Hình 1: Các cấp độ kiểm thử phần mềm
1.3 Kỹ thuật kiểm thử phần mềm
Hình 2: Các kỹ thuật kiểm thử phấn mềm
- Phải thiết kế các trường hợp kiểm thử có khả năng cao nhất trong việc phát hiện nhiều lỗi với thời gian và công sức tối thiểu
- Kỹ thuật kiểm thử gồm hai loại:
• Kỹ thuật kiểm thử chức năng (Functional Testing)
• Kỹ thuật kiểm thử cấu trúc (Structural Testing).
Kiểm thử tự động
Kiểm thử tự động (Automated Testing) là quy trình kiểm thử phần mềm được thực hiện tự động thông qua một chương trình chuyên dụng, yêu cầu rất ít hoặc không cần sự can thiệp của con người Phương pháp này giúp giảm thiểu sự lặp lại các bước kiểm thử nhàm chán, mang lại hiệu quả cao hơn cho người thực hiện.
Kiểm thử tự động là giải pháp hiệu quả cho các dự án thiếu nguồn lực về thời gian, nhân lực và chi phí Phương pháp này cần được thực hiện một cách chính xác để đánh giá khả năng vận hành của sản phẩm trong các môi trường đặc biệt Nó giúp đo tốc độ xử lý trung bình cho từng yêu cầu, xác định khả năng chịu tải tối đa, và kiểm tra các cơ chế an ninh cũng như an toàn của hệ thống.
Hình 3: Kiểm thử tự động
1.5 Quy trình kiểm thử tự động
- Quy trình kiểm thử tự động gồm các bước sau:
• Lập kế hoạch kiểm thử
• Đánh giá kết quả kiểm thử
Lập kế hoạch kiểm thử
Mục đích của bài viết là chỉ định và mô tả các loại kiểm thử sẽ được triển khai trong dự án phần mềm Kết quả của bước lập kế hoạch là tài liệu kế hoạch kiểm thử phần mềm, bao gồm các giai đoạn kiểm thử, chiến lược kiểm thử, công cụ kiểm thử, nguồn lực kiểm thử, môi trường kiểm thử với các tài nguyên phần cứng và phần mềm, cùng với mốc bàn giao các tài liệu kiểm thử.
Mục đích của việc thiết kế test case là xác định các trường hợp kiểm thử và các bước kiểm tra chi tiết cho từng phiên bản phần mềm Giai đoạn này rất quan trọng vì nó đảm bảo rằng tất cả các tình huống kiểm thử đều được xem xét, nhằm đáp ứng đầy đủ các yêu cầu cần kiểm tra.
Mục đích của bước này là thiết kế và tạo ra các test script có khả năng tự động hóa việc thực thi các bước kiểm tra đã được định nghĩa trong giai đoạn thiết kế test case Mặc dù bước này không bắt buộc trong tất cả các loại và mức kiểm thử, nhưng nó trở nên cần thiết trong những trường hợp đặc thù.
Một test script là một tập hợp mã lệnh được thiết kế để tự động hóa quy trình kiểm thử, giúp tăng tốc độ kiểm thử và xử lý các trường hợp mà kiểm thử thủ công gặp khó khăn hoặc không thể thực hiện.
Mục đích: Thực hiện các bước kiểm tra đã thiết kế hoặc thực thi các test script nếu tiến hành kiểm tra tự động và ghi nhận kết quả.
Đánh giá kết quả kiểm thử
Mục đích của quá trình kiểm thử là đánh giá toàn diện kết quả kiểm thử, bao gồm việc xem xét, đánh giá lỗi phát sinh, chỉ định yêu cầu thay đổi cần thiết, và tính toán các số liệu quan trọng như số giờ thực hiện, thời gian kiểm thử, số lượng lỗi phát hiện và phân loại lỗi.
1.6 So sánh ưu nhược điểm kiểm thử tự động và kiểm thử thủ công
Kiểm thử thủ công Kiểm thử tự động Ưu điểm - Thích hợp kiểm tra sản phẩm lần đầu tiên
- Thích hợp kiểm thử trong trường hợp các test case chỉ phải thực hiện một số ít lần
- Giảm được chi phí ngắn hạn
Thích hợp với trường hợp phải test nhiều lần cho một case,
- Có thể thực hiện các thao tác lặp đi lặp lại
- Giảm chi phí đầu tư dài hạn
Thời gian là một yếu tố quan trọng trong quy trình kiểm thử Mỗi lần phát hành, người kiểm thử cần phải thực hiện lại một bộ test case đã được chạy trước đó, điều này không chỉ gây ra sự mệt mỏi mà còn dẫn đến lãng phí công sức.
Tốn kém hơn kiểm thử tự động, chi phí đầu tư ban đầu lớn
- Kiểm thử thủ công là không thể thay thế vì người ta không thể tự động hóa mọi thứ
Hình 4 Kiểm thử thủ công và kiểm thử tự đông
1.7 Một số công cụ kiểm thử tự động phổ biến
Một số công cụ kiểm thử tự động phổ biến
KIỂM THỬ LỖI PHẦN MỀM TỰ ĐỘNG VỚI SELENIUM SỬ DỤNG NGÔN NGỮ PYTHON
Khái quát về Selenium
Selenium là công cụ kiểm thử tự động mạnh mẽ cho các ứng dụng Web, hỗ trợ nhiều trình duyệt phổ biến như Firefox, Internet Explorer và Safari, cũng như các hệ điều hành như Windows, Linux và Mac Nó tương thích với nhiều ngôn ngữ lập trình phổ biến như C#, Java, Perl, PHP, Python và Ruby Người dùng có thể sử dụng Selenium một cách độc lập mà không cần cài đặt thêm các công cụ bổ trợ như Junit hay TestNG.
Hình 5 Selenium a) Đặc điểm của Selenium
Selenium nổi bật hơn các công cụ kiểm thử khác nhờ vào tính chất mã nguồn mở của nó Điều này cho phép người dùng sử dụng miễn phí mà không cần lo lắng về chi phí bản quyền hay giới hạn thời gian sử dụng.
Selenium có một cộng đồng hỗ trợ mạnh mẽ nhờ vào mã nguồn mở và sự phát triển từ Google, mang lại sự yên tâm về hỗ trợ miễn phí khi gặp vấn đề Tuy nhiên, vì là công cụ miễn phí với cộng đồng đông đảo, nhiều vấn đề có thể có nhiều giải pháp khác nhau, trong đó một số có thể không hiệu quả Hơn nữa, người dùng không thể yêu cầu hỗ trợ theo thời hạn cụ thể.
- Selenium hỗ trợ nhiều ngôn ngữ lập trình.
- Selenium hỗ trợ chạy trên nhiều hệ điều hành khác nhau với mức độ chỉnh sửa script hầu như là không có b) Các thành phần của Selenium
Selenium là bộ công cụ mạnh mẽ dùng để kiểm thử tự động các tính năng của ứng dụng web, bao gồm bốn thành phần chính: Selenium IDE, Selenium Grid, Selenium Remote Control (Selenium RC) và Selenium WebDriver (Selenium 2.0) Mỗi thành phần đóng vai trò quan trọng trong việc hỗ trợ quá trình tự động hóa kiểm thử ứng dụng web, giúp nâng cao hiệu quả và độ chính xác trong kiểm thử phần mềm.
Hình 6 Các thành phần của Selenium
2.2 Selenium WebDriver a) Tiền thân của Selenium WebDriver
- Trước khi Selenium WebDriver ra đời và phát triển thì Selenium
Selenium RC từng là công cụ chính trong kiểm thử tự động, nhưng hiện nay đã ít được sử dụng hơn so với Selenium WebDriver Dù vậy, người dùng vẫn có thể phát triển các kịch bản kiểm thử với Selenium RC.
Selenium RC là một công cụ quan trọng trong kiểm thử phần mềm, cho phép thực hiện các kịch bản kiểm thử tự động cho ứng dụng Web Với sự hỗ trợ của các ngôn ngữ lập trình như Java, C#, Python, Perl và PHP, Selenium RC giúp tạo ra những trường hợp kiểm thử phức tạp, bao gồm khả năng đọc và viết tệp tin, truy vấn cơ sở dữ liệu và gửi email kết quả kiểm thử.
- Các thành phần của Selenium RC gồm:
Máy chủ Selenium thực hiện việc phân tích và xử lý các lệnh từ ứng dụng kiểm thử, bao gồm các thao tác như proxy HTTP, phân tích và xác minh thông điệp HTTP giữa trình duyệt và ứng dụng cần kiểm tra.
Các thư viện máy khách của Selenium cung cấp hỗ trợ lập trình để thực hiện các lệnh Selenium từ chương trình, với sự khác biệt giữa các ngôn ngữ lập trình Mỗi giao diện lập trình bao gồm một tập hợp các chức năng để chạy lệnh Selenium, giúp lập trình viên dễ dàng tương tác với Selenium Selenium WebDriver nổi bật với khả năng tự động hóa trình duyệt, cho phép kiểm tra và phát triển ứng dụng web hiệu quả hơn.
Selenium WebDriver, hay còn gọi là Selenium 2.0, là phiên bản nâng cấp từ Selenium IDE, Selenium RC và Selenium Grid Khác với Selenium RC, Selenium WebDriver tương tác trực tiếp với trình duyệt mà không cần thông qua bất kỳ máy chủ trung gian nào.
Selenium 2.0 nổi bật với tính năng tích hợp WebDriver API, giúp khắc phục các hạn chế của Selenium RC API WebDriver được thiết kế với giao diện lập trình đơn giản hơn, cho phép lập trình viên sử dụng nhiều ngôn ngữ như HTML, Java, Net, Perl, Ruby để tạo kịch bản kiểm thử Điều này kết hợp với việc sử dụng các điều kiện và vòng lặp, giúp cải thiện độ chính xác của các test script.
Selenium WebDriver đã được cải tiến để hỗ trợ kiểm thử các trang web động, nơi mà các phần tử có thể thay đổi liên tục mà không cần tải lại trang Điều này giúp quá trình kiểm thử trở nên linh hoạt hơn, cho phép thực hiện kiểm tra mà không cần khởi động lại khi có sự thay đổi xảy ra.
Hình 7: Đặc trưng của Selenium WebDriver c) So sánh với RC
Kiển trúc Đơn giản hơn Phức tạp hơn
Tốc độ Nhanh hơn Chậm hơn
Tương tác thực Trực tiếp Trung gian thông qua
API Trực quan, ngắn gọn hơn
Chứa các dòng lệnh, đặt tên các thao tác gây dễ nhầm lẫn duyệt
Báo cáo kiểm thử Không hỗ trợ sẵn, có thể coding để tự custom chức năng này
Có tự động tạo tệp HTML chứa báo cáo kết quả kiểm thử
Sơ lược về ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình bậc cao, được thiết kế cho nhiều mục đích khác nhau Được phát triển bởi Guido van Rossum, Python lần đầu tiên ra mắt vào năm 1991.
Python, được ra mắt vào năm 1991, nổi bật với tính dễ đọc, dễ học và dễ nhớ, làm cho nó trở thành lựa chọn lý tưởng cho người mới bắt đầu lập trình Ngôn ngữ này có cú pháp rõ ràng và hình thức sáng sủa, giúp người dùng dễ dàng nắm bắt Hơn nữa, cấu trúc của Python cho phép viết mã với số lần gõ phím tối thiểu, tối ưu hóa quy trình lập trình.
Hình 8: Sơ lược về Python
Python là một ngôn ngữ lập trình mạnh mẽ với kiểu dữ liệu động và cơ chế quản lý bộ nhớ tự động, tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl Ngôn ngữ này đã cải thiện đáng kể vấn đề kiểu dữ liệu trả về so với những ngôn ngữ không rõ ràng về kiểu dữ liệu như JavaScript và PHP Tuy nhiên, khi so sánh với các ngôn ngữ chú trọng vào kiểu dữ liệu như Java và C, Python vẫn còn một số hạn chế.
Python có nhiều thư viện hỗ trợ lập trình mạng, giúp viết các script bảo mật hệ thống hiệu quả Tuy nhiên, ngôn ngữ này cũng có thể bị kẻ tấn công khai thác cho mục đích xấu.
Thư viện sử dụng
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.common.action_chains import ActionChains import time
Trình soạn thảo mã nguồn Visual Studio Code
Visual Studio Code (VS Code) là trình soạn thảo mã nguồn phổ biến, được ưa chuộng bởi các lập trình viên nhờ vào tốc độ nhanh, tính năng nhẹ nhàng, hỗ trợ đa nền tảng và mã nguồn mở Những ưu điểm này giúp VS Code ngày càng trở nên phổ biến trong cộng đồng lập trình.
- Là một trình biên tập lập trình code miễn phí dành cho Windows, Linux và macOS, Visual Studio Code được phát triển bởi Microsoft.
Nó được xem là một sự kết hợp hoàn hảo giữa IDE và Code Editor.
Visual Studio Code là một công cụ lập trình mạnh mẽ với chức năng debug tích hợp, hỗ trợ Git, và cung cấp tính năng highlight cú pháp Nó còn có khả năng tự hoàn thành mã thông minh, hỗ trợ snippets, và cải tiến mã nguồn Đặc biệt, người dùng có thể tùy chỉnh Visual Studio Code bằng cách thay đổi theme, phím tắt và các tùy chọn khác để phù hợp với nhu cầu của mình.
- Visual Studio Code có nhiều ưu điểm vượt trội so với bất kỳ IDE nào khác:
• Hỗ trợ đa nền tảng: Windows, Linux, Mac
• Hỗ trợ đa ngôn ngữ: C/C++, C#, F#, Visual Basic, HTML, CSS, JavaScript, JSON, Python
• Giao diện thân thiện a) Ưu điểm của Visual Studio Code:
• Đơn giản dễ dùng cho cả người có chuyên môn và người vừa mới bắt đầu làm quen phần mềm
• Có công cụ gỡ lỗi giúp việc soạn thảo và chỉnh sửa code được dễ dàng và nhanh chóng hơn.
• Có nhiều phím tắt b) Nhược điểm của Visual Studio Code:
• Bộ nhớ và mức sử dụng pin của Visual Studio Code khá thấp
• Các phím tắt mặc định không có ý nghĩa, người dùng cần phải cấu hình lại phím tắt mới.
PHÂN TÍCH VÀ XÂY DỰNG CHƯƠNG TRÌNH
Bài toán
- Xây dựng chương trình kiểm thử chức năng của 1 trang web bằngSelenium với ngôn ngữ Python
Phân tích và xây dựng chương trình
- Tải và cài đặt Python
- Selenium WebDriver ( dùng Selenium Chrome Driver)
- Visual Studio Code b) Kiểm thử trên trang web Automation Practice Site
Hình 10: Trang web kiểm thử
• Đăng ký, đăng nhập, đăng xuất
• Xem chi tiết sản phẩm
• Thêm sản phẩm vào giỏ hàng
• Tăng, giảm số lượng sản phẩm
• Thanh toán c) Thiết kế testcase
To register an account, click on "My Account" using the email driver After a brief pause, input the password "3KVfE7BvLaTc@7E" into the designated field Finally, confirm the registration by clicking the submit button.
To register an account, locate the "My Account" link and click on it After a brief pause, enter your email address in the designated field using the ID "reg_email." Once the email is submitted, click on the registration button to complete the process.
To register, fill in both the email and password fields, then click on "My Account." After a brief wait of five seconds, proceed by clicking the designated input field to complete the registration process.
To successfully register, first click on "My Account" using `driver.find_element_by_link_text("My Account").click()` After a brief pause, enter the email address "Nguyenv@yahoo.com" in the designated field with `driver.find_element_by_id("reg_email").send_keys("Nguyenv@yahoo.com")` Following another pause, input the password "3KVfE7BvLaTc@7E" using `driver.find_element_by_id("reg_password").send_keys("3KVfE7BvLaTc@7E")` Finally, submit the registration form by clicking the appropriate button located via its XPath.
To log in, first access the "My Account" link using the email driver, then wait for 5 seconds Next, enter the password "3KVfE7BvLaTc@7E" in the designated field, again pausing for 5 seconds Finally, click the submit button to complete the login process.
To log in, first click on the "My Account" link using the driver After a brief pause, enter the email address "Nguyenv@yahoo.com" in the username field Finally, click the login button to complete the process.
To log in without an email and password, click on "My Account" using the driver.find_element_by_link_text method After a brief pause of 5 seconds, proceed to click the specified input element using the driver.find_element_by_xpath method to complete the login process.
To log in to the account, first, click on "My Account" using the driver After a brief pause, enter the email address "Nguyenthumai@yahoo.com" in the designated field Wait for a few seconds before typing the password "nguyenthumai2000" into the password input Finally, click the login button to complete the process.
To successfully log in, the user clicks on the "My Account" link using the Selenium driver After a brief pause, they enter their email address, "Nguyenv@yahoo.com," followed by another pause before inputting the password, "3KVfE7BvLaTc@7E." Finally, the user clicks the login button to complete the process.
- Đăng xuất driver.find_element_by_xpath(("/html/body/div[1]/div[2]/div/div/div/div/di v[1]/div/p[1]/a")).click() time.sleep(5) driver.execute_script("window.history.go(-1)")
- Xem chi tiết sản phẩm driver.find_element_by_xpath(("/html/body/div[1]/div[2]/div/div/ul/li[2]/a[ 1]/img")).click()
To add a product to the shopping cart, locate the input field using its XPath and clear any existing text Then, input the desired quantity, in this case, "2" After a brief pause, click the button to confirm the addition of the product to the cart Finally, allow a moment for the action to complete before proceeding.
- Tăng, giảm số lượng sản phẩm
To increase the product quantity, use the following command: `plus_product = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div/div/div[1]/form/table/tbody/tr[1]/td[5]/div/input")`, and then send the UP key input with `plus_product.send_keys(Keys.UP)`.
To decrease the product quantity, locate the input field using the XPath selector and simulate a downward key press This can be achieved with the command: `minus_product = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div/div/div/div[1]/form/table/tbody/tr[1]/td[5]/div/input")`, followed by `minus_product.send_keys(Keys.DOWN)`.
- Xóa sản phẩm driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div/div/div/div [1]/form/table/tbody/tr[1]/td[1]/a").click() time.sleep(3)
To automate the payment process, the script first clicks on the payment button using XPath After a brief pause, it fills in the billing information, including the first name "Mai," last name "Nguyen," company name "Nguyenv," and phone number "0123456789." The address fields are populated with "VietNam" for the address line, "12345" for the postcode, and "DaNang" for the city Additionally, a note is added with the message "do de vo." After another pause, the script clicks the final confirmation button to complete the payment process.
CHƯƠNG 4: DEMO CHƯƠNG TRÌNH VÀ KẾT LUẬN
Môi trường triển khai
- Chương trình được chạy trên VSC với môi trường python sử dụng Selenium WebDriver để kiểm thử trang web
Kết quả chương trình
- Hiển thị lỗi đăng nhập:
Hình 11: Đăng nhập trống email
• Đăng nhập trống mật khẩu
Hình 12: Đăng nhập trống mật khẩu
• Đăng nhập trống cả email và mật khẩu:
Hình 13: Đăng nhập trống cả email và mật khẩu
• Đăng nhập sai mật khẩu:
Hình 14: Đăng nhập sai mật khẩu
- Hiển thị lỗi đăng ký:
Hình 15: Đăng ký trống email
• Đăng ký trống mật khẩu
Hình 16: Đăng ký trống mật khẩu
• Đăng ký trống cả email và mật khẩu:
Hình 17: Đăng ký trống cả email và mật khẩu
- Xem chi tiết sản phẩm
- Thêm sản phẩm vào giỏ hàng
Hình 19: Thêm sản phẩm vào giỏ hàng
- Tăng, giảm, xóa sản phẩm
- Thanh toán sản phẩm thành công
Hình 23: Điền thông tin thanh toán sản phẩm
Hình 24: Thanh toán sản phẩm thành công
Kết luận
- Hiểu được quy trình thực thi kiểm thử tự động
- Biết và hiểu được ngôn ngữ lập trình Python
- Kiểm thử tự động website với ngôn ngữ lập trình Python trong môi trường Selenium
- Kiểm thử được các chức năng cơ bản của một trang web b) Hạn chế
Mặc dù đã hoàn thành nghiên cứu về Selenium WebDriver, nhưng vẫn còn nhiều hạn chế như chương trình còn đơn giản, không đáp ứng nhu cầu thực tế, giao diện chưa thu hút và một số nội dung cần được phân tích sâu hơn và tỉ mỉ hơn.
Trong thời gian tới, tôi sẽ nỗ lực khắc phục những hạn chế hiện tại, cải thiện các vấn đề chưa đạt yêu cầu và bổ sung thêm các chức năng mới để nâng cao hiệu quả.
- Bổ sung nhiều hơn các báo cáo, thống kê.
- Chỉnh sửa giao diện đẹp mắt dễ nhìn.