1. Trang chủ
  2. » Luận Văn - Báo Cáo

NGHIÊN CỨU VÀ ỨNG DỤNG CÔNG CỤ KIỂM THỬ SELENIUM TRONG KIỂM THỬ WEBSITE

110 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Và Ứng Dụng Công Cụ Kiểm Thử Selenium Trong Kiểm Thử Website
Tác giả Mai Đình Cát
Người hướng dẫn Lê Phú Hưng
Trường học Trường Đại học Tài nguyên và Môi trường Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại khóa luận tốt nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 110
Dung lượng 2,47 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM (14)
    • 1.1. Tổng quan về kiểm thử phần mềm (14)
    • 1.2. Tổng quan về kiểm thử tự động (0)
    • 1.3. So sánh kiểm thử tự động và kiểm thử thủ công (0)
  • CHƯƠNG 2. NGHIÊN CỨU CÔNG CỤ KIỂM THỬ TỰ ĐỘNG SELENIUM (29)
    • 2.1. Khái quát về công cụ kiểm thử tự động Selenium (29)
    • 2.2. Đặc điểm của công cụ kiểm thử Selenium (29)
    • 2.3. Các thành phần của Selenium (30)
  • CHƯƠNG 3. PHÂN TÍCH VÀ XÂY DỰNG WEBSITE QUẢN LÝ BÁN GIÀY (35)
    • 3.1. Phân tích bài toán đặt ra (35)
    • 3.2. Phân tích các chức năng của hệ thống (35)
    • 3.3. Sơ đồ hoạt động một số chức năng website (39)
    • 3.4. Một số giao diện chức năng của website cho người dùng (48)
    • 3.5. Một số giao diện chức năng của website cho người quản lý (admin) (55)
    • 4.1 Cài đặt phần mềm (63)
    • 4.2. Tạo testcase và kiểm thử một số chức năng của website (0)
  • TÀI LIỆU THAM KHẢO (106)

Nội dung

Trang 1 Hà Nội – Năm 2023TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN Trang 2 Hà Nội – Năm 2023TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘIKHOA CÔNG NGHỆ THÔ

TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM

Tổng quan về kiểm thử phần mềm

1.1.1 Khái niệm kiểm thử phần mềm

Kiểm thử phần mềm là quá trình phê chuẩn và xác minh xem một chương trình máy tính/ ứng dụng/ sản phẩm:

• Đáp ứng các yêu cầu hướng dẫn thiết kế và phát triển của nó

• Hoạt động như mong đợi như mong đợi và đáp ứng nhu cầu của các bên liên quan

• Có thể thực hiện được với các đặc điểm khác nhau [2].

1.1.2.Các mức độ kiểm thử (level)

Mức độ của kiểm thử phần mềm được chia thành 4 mức độ thể hiện như Hình 1.1:

Hình 1.1: Các mức độ kiểm thử1.1.2.1 Kiểm thử đơn vị (Unit Test)

Một đơn vị (Unit) là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm thử được, ví dụ: các hàm (Function), thủ tục (Procedure), lớp (Class), hoặc các phương thức (Method).

Kiểm thử đơn vị thường do lập trình viên thực hiện Công đoạn này cần được thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu kỳ phát triển phần mềm.

Mục đích của kiểm thử đơn vị là bảo đảm thông tin được xử lý và kết xuất (khỏi Unit) là chính xác, trong mối tương quan với dữ liệu nhập và chức năng xử lý của Unit Điều này thường đòi hỏi tất cả các nhánh bên trong Unit đều phải được kiểm tra để phát hiện nhánh phát sinh lỗi.

Cũng như các mức kiểm thử khác, kiểm thử đơn vị cũng đòi hỏi phải chuẩn bị trước các ca kiểm thử (hay trường hợp kiểm thử) (test case) hoặc kịch bản (test script), trong đó chỉ định rõ dữ liệu vào, các bước thực hiện và dữ liệu mong muốn sẽ xuất ra Các test case và test script được giữ lại để sử dụng sau này[5].

1.1.2.2 Kiểm thử tích hợp (Integration Test)

Kiểm thử tích hợp kết hợp các thành phần của một ứng dụng và kiểm thử như một ứng dụng đã hoàn thành Trong khi kiểm thử đơn vị kiểm tra các thành phần và Unit riêng lẻ thì kiểm thử tích hợp kết hợp chúng lại với nhau và kiểm tra sự giao tiếp giữa chúng.

Kiểm thử tích hợp có hai mục tiêu chính là:

+ Phát hiện lỗi giao tiếp xảy ra giữa các Unit

+ Tích hợp các Unit đơn lẻ thành các hệ thống con (gọi là subsystem) và cuối cùng là nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm thử ở mức hệ thống (system test).

Có 4 loại kiểm thử trong kiểm thử tích hợp như sau:

+ Kiểm thử cấu trúc (Structure test): Kiểm thử nhằm bảo đảm các thành phần bên trong của một chương trình chạy đúng, chú trọng đến hoạt động của các thành phần cấu trúc nội tại của chương trình, chẳng hạn các lệnh và nhánh bên trong.

+ Kiểm thử chức năng (Functional test): Kiểm thử chỉ chú trọng đến chức năng của chương trình, không quan tâm đến cấu trúc bên trong, chỉ khảo sát chức năng của chương trình theo yêu cầu kỹ thuật.

+ Kiểm thử hiệu năng (Performance test): Kiểm thử việc vận hành của hệ thống. + Kiểm thử khả năng chịu tải (Stress test): Kiểm thử các giới hạn của hệ thống[5]. 1.1.2.3 Kiểm thử hệ thống (System Test)

Mục đích của kiểm thử hệ thống là kiểm thử xem thiết kế và toàn bộ hệ thống (sau khi tích hợp) có thỏa mãn yêu cầu đặt ra hay không.

Kiểm thử hệ thống 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 về chất lượng như độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng và bảo mật.

Kiểm thử hệ thống bắt đầu khi tất cả các bộ phận của phần mềm đã được tích hợp thành công Thông thường loại kiểm thử này tốn rất nhiều công sức và thời gian Trong nhiều trường hợp, việc kiểm thử đòi hỏi một số thiết bị phụ trợ, phần mềm hoặc phần cứng đặc thù, đặc biệt là các ứng dụng thời gian thực, hệ thống phân bố, hoặc hệ thống nhúng Ở mức độ hệ thống, người kiểm thử cũng tìm kiếm các lỗi, nhưng trọng tâm là đánh giá về hoạt động, thao tác, sự tin cậy và các yêu cầu khác liên quan đến chất lượng của toàn hệ thống. Điểm khác nhau then chốt giữa kiểm thử tích hợp và kiểm thử hệ thống là kiểm thử hệ thống chú trọng các hành vi và lỗi trên toàn hệ thống, còn kiểm thử tích hợp chú trọng sự giao tiếp giữa các đơn thể hoặc đối tượng khi chúng làm việc cùng nhau Thông thường ta phải thực hiện kiểm thử đơn vị và kiểm thử tích hợp để bảo đảm mọi Unit và sự tương tác giữa chúng hoạt động chính xác trước khi thực hiện kiểm thử hệ thống.

Sau khi hoàn thành kiểm thử tích hợp, một hệ thống phần mềm đã được hình thành cùng với các thành phần đã được kiểm tra đầy đủ Tại thời điểm này, lập trình viên hoặc kiểm thử viên (Tester) bắt đầu kiểm thử phần mềm như một hệ thống hoàn chỉnh Việc lập kế hoạch cho kiểm thử hệ thống nên bắt đầu từ giai đoạn hình thành và phân tích các yêu cầu. Đòi hỏi nhiều công sức, thời gian và tính chính xác, khách quan, kiểm thử hệ thống được thực hiện bởi một nhóm kiểm tra viên hoàn toàn độc lập với nhóm phát triển dự án để đảm bảo tính chính xác và khách quan.

Kiểm thử hệ thống thường có các loại kiểm thử sau:

+ Kiểm thử chức năng (Functional test): Bảo đảm các hành vi của hệ thống thỏa mãn đúng yêu cầu thiết kế.

+ Kiểm thử khả năng vận hành (Performance test): Bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ bộ nhớ) nhằm đạt các chỉ tiêu như thời gian xử lý hay đáp ứng câu truy vấn,

+ Kiểm thử khả năng chịu tải (Stress test hay Load test): Bảo đảm hệ thống vận hành đúng dưới áp lực cao (ví dụ nhiều người truy xuất cùng lúc) Stress test tập trung vào các trạng thái tới hạn, các "điểm chết", các tình huống bất thường như đang giao dịch thì ngắt kết nối (xuất hiện nhiều trong test thiết bị như POS, ATM),

+ Kiểm thử cấu hình (Configuration test): Đảm bảo hệ thống hoạt động tương thích với các loại phần cứng khác nhau.

+ Kiểm thử khả năng bảo mật (Security test): Bảo đảm tính toàn vẹn, bảo mật của dữ liệu và của hệ thống.

NGHIÊN CỨU CÔNG CỤ KIỂM THỬ TỰ ĐỘNG SELENIUM

Khái quát về công cụ kiểm thử tự động Selenium

Selenium(SE) là một phần mềm nguồn mở, được phát triển ban đầu bởi nhóm ThoughtWorks vào năm 2004 tại Chicago, là một công cụ kiểm tra tự động các ứng dụng web, nó có thể chạy trên hầu hết các trình duyệt và hệ điều hành: Windows, Linux, Mac… hỗ trợ hầu hết các ngôn ngữ lập trình web như: C#, Java, Perl, PHP, Python, Ruby…

Selenium là một công cụ hỗ trợ kiểm thử tự động cho các ứng dụng Web. Selenium hỗ trợ kiểm thử trên hầu hết các trình duyệt phổ biến hiện nay như Firefox, Internet Explorer, Safari, … cũng như các hệ điều hành chủ yếu như Windows, Linux, Mac, Selenium cũng hỗ trợ một số lớn các ngôn ngữ lập trình Web phổ biến hiện nay như C#, Java, Perl, PHP, Python, Ruby,[9] Công cụ này có thể kết hợp thêm với một số công cụ khác như Junit và TestNG nhưng với người dùng thông thường chỉ cần chạy tự động mà không cần cài thêm các công cụ bổ trợ.

Selenium là một tập hợp các công cụ phần mềm khác nhau với cách tiếp cận khác nhau để hỗ trợ cho quá trình kiểm thử tự động Selenium cung cấp một tập phong phú của các thử nghiệm chức năng đặc biệt hướng đến các nhu cầu của các thử nghiệm của một ứng dụng web Các hoạt động này là rất linh hoạt, cho phép nhiều tùy chọn cho vị trí các thành phần UI và so sánh kết quả thử nghiệm dự kiến sẽ chống lại hành vi ứng dụng thực tế Một trong những tính năng chính của Selenium là hỗ trợ thực thi kiểm tra người dùng trên nhiều nền tảng trình duyệt.

Đặc điểm của công cụ kiểm thử Selenium

- Mã nguồn mở: Đâ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ó phát sinh vấn đề về Selenium Tuy nhiên, đây cũng là một điểm yếu của Selenium Vì công cụ này hoàn toàn 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 hệ điều hành 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 người dùng.

- Chạy test case ở background Khi chúng ta thực thi một test script, chúng ta hoàn toàn có thể làm việc khác trên cùng một máy tính Đ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 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.

- Là một công cụ hỗ trợ kiểm tra tính năng nên Selenium không có khả năng giả lập nhiều người dùng ảo cùng một lúc Công việc của nó là chạy kiểm thử tự động dựa trên một kịch bản đã được thiết kế từ trước Qua đó chúng ta có thể chắc rằng đối tượng kiểm thử có hoạt động đúng như mong đợi hay không.

Các thành phần của Selenium

Selenium không chỉ là một công cụ duy nhất mà là một bộ các công cụ giúp kiểm thử tự động các ứng dụng trên nền Web hiệu quả hơn, bao gồm 4 phần: Selenium IDE, Selenium RC, Selenium Grid, Selenium WebDriver.

Selenium IDE là một tiện ích (extension) dùng để hỗ trợ kiểm thử tự động chạy trên trình duyệt Mozilla Firefox ban đầu được phát triển bởi Shinya Kasatani

20 người Nhật Bản Công cụ này được phát triển bảng Javascript nên có khả năng tương tác với DOM, sử dụng được những cách gọi Javascript Selenium IDE cho phép ghi lại những hành động, sự kiện xảy ra trong quá trình kiểm thử bằng chức năng Record (ghi hành động) và Playback (phát lại).

Một số ưu điểm của Selenium IDE:

+ Dễ dàng cài đặt và sử dụng.

+ Không yêu cầu kinh nghiệm lập trình • Có thể debug, thiết lập breakpoint (điểm dừng), thêm comment vào kịch bản kiếm thử.

Bên cạnh đó Selenium IDE cũng tồn tại một số nhược điểm:

+ Chỉ hỗ trợ chạy trên Mozilla Firefox (cần cấu hình để chạy được trên Chrome, Internet Explorer).

+ Căn cài đặt thêm để đọc dữ liệu từ file csv, xml Không hỗ trợ database, kiểm thử di động (mobile testing).

+ Khó khăn khi xử lý những quy trình phức tạp.

2.3.2 Selenium RC (Selenium Remote Control)

Là một framework kiểm thử cho phép thực hiện nhiều hơn và tuyến tính các hành động trên trình duyệt Nó cho phép cho phép các nhà phát triển tự động hóa kiểm thử sử dụng một ngôn ngữ lập trình cho tính linh hoạt tối đa và mở rộng trong việc phát triển logic thử nghiệm.

Công cụ này có thể nhận các test script được thu bởi Selenium IDE, cho phép chỉnh sửa, cải tiến linh động bằng nhiều ngôn ngữ lập trình khác nhau Sau đó khởi động một trong các trình duyệt Web được chỉ định để thực thi kiểm thử trực tiếp trên trình duyệt đó Selenium RC còn cung cấp khả năng lưu lại kết quả kiểm thử;cung cấp một API (Application Programming Interface) và thư viện cho mỗi ngôn ngữ được hỗ trợ: HTML, Java, C#, Perl, PHP, Python và Ruby Khả năng sử dụngSelenium RC với một ngôn ngữ lập trình bậc cao để phát triển các trường hợp kiểm

22 thử cũng cho phép kiểm thử tự động được tích hợp với một dự án xây dựng môi trường tự động.

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.

Thực hiện phương pháp kiểm tra phân bổ, phối hợp nhiều Selenium RC để có thể thực thi trên nhiều trình duyệt Web khác nhau trong cùng một lúc nhằm giảm thiểu thời gian thực hiện.

Tiền thân của Selenium Webdriver:

Trước khi Selenium WebDriver ra đời và phát triển thì Selenium RC là công cụ chính trong suốt một thời gian dài Hiện nay, Selenium RC không được sử dụng nhiều như Selenium WebDriver nữa, tuy nhiên người dùng vẫn có thể tiếp tục phát triển các kịch bản kiểm thử với Selenium RC.

Selenium RC là công cụ phục vụ cho các công việc kiểm thử đòi hỏi nhiều hơn việc thao tác với các website trên giao diện Nó cho phép viết các kịch bản kiểm thử tự động ứ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, PHP để tạo ra các trường hợp kiểm thử phức tạp hơn như đọc và viết các tệp tin, truy vấn cơ sở dữ liệu, gửi mail kết quả kiểm thử. Đặc trưng của Selenium WebDriver:

Selenium WebDriver (hay còn gọi là Selenium 2.0) kế thừa và phát triển từ Selenium IDE, Selenium RC, Selenium Grid 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ỳ trung gian, không giống như Selenium RC phụ thuộc vào một máy chủ.

Tính năng chính trong Selenium 2.0 là việc tích hợp WebDriver API Ngoài việc giải quyết một số hạn chế trong Selenium RC API, Selenium WebDriver còn được thiết kế để mang đến một giao diện lập trình đơn giản hơn Nó cho phép 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 kiểm thử 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.[2]

Selenium WebDriver còn được phát triển tốt hơn để hỗ trợ cho các trang Web động do các phần tử trong một trang Web động có thể thay đổi bất cứ lúc nào, ngay cả khi trang đó không được tải lại Vì vậy, Selenium WebDriver được phát triển để hỗ trợ quá trình kiểm thử mà không cần phải thực hiện lại khi có thay đổi xảy ra.

PHÂN TÍCH VÀ XÂY DỰNG WEBSITE QUẢN LÝ BÁN GIÀY

Phân tích bài toán đặt ra

Hệ thống quản lý bán giày được xây dựng nhằm phục vụ các nhiệm vụ cơ bản sau:

- Tự động hóa một số công việc để tiết kiệm thời gian và công sức của con người cũng như: tạo sản phẩm, danh mục sản phẩm, thông tin đơn hàng đã bán, thống kê doanh số bán hàng, sản phẩm còn,

- Cập nhật thông tin hàng hóa vào danh mục hàng hóa cửa hàng

- Cho phép khách hàng theo dõi thông tin cửa hàng, sản phẩm (tên sản phẩm,đơn giá, số lượng,…) và tiến hành đặt mua hàng.

Phân tích các chức năng của hệ thống

3.2.1 Xác định usecase và tác nhân của hệ thống.

Với bài toán quản lý bán giày dép cho cửa hàng hàng Candy Store, các chức năng của hệ thống được thực hiện bởi các tác nhân admin(người quản lý ), người xem, khách hàng Như vậy, chúng ta có ba tác nhân là: admin, người xem(viewer), khách hàng ( Customer).

Từ đó ta có các yêu cầu về chức năng của hệ thống như sau:

- Quản lý thông tin sản phẩm

- Quản lý danh mục sản phẩm

- Quản lý thương hiệu (hãng sản xuất)

- Quản lý các bài viết

- Xem thông tin sản phẩm

- Xem danh mục các sản phẩm

- Xem bài viết quảng cáo của cửa hàng

- Có các chức năng cơ bản của người xem (Viewer)

- Thêm sản phẩm vào giỏ hàng

- Xem lịch sử đặt hàng Bảng 3.1: Chức năng của các tác nhân trong hệ thống

3.2.2 Sơ đồ usecase của hệ thống

Thông qua quá trình phân tích các chức năng với từng đối tượng sử dụng ta có sơ đồ usecase được thể hiện ở Hình 3.1:

Hình 3.1: Sơ đồ use case của website bán giày 3.2.2.2 Sơ đồ use case phân rã một số chức năng của hệ thống

Sơ đồ use case phân rã chức năng Quản lý sản phẩm:

Hình 3.2: Sơ đồ use case phân rã chức năng Quản lý sản phẩm

Sơ đồ use case phân rã chức năng Quản lý danh mục sản phẩm:

Hình 3.3: Sơ đồ use case phân rã chức năng Quản lý danh mục sản phẩm

Sơ đồ use case phân rã chức năng Quản lý bài viết:

Hình 3.4: Sơ đồ use case phân rã chức năng Quản lý bài viết

Sơ đồ use case phân rã chức năng Đặt hàng

Hình 3.5: Sơ đồ use case phân rã chức năng Đặt hàng

Sơ đồ phân rã chức năng Xem lịch sử đặt hàng:

Sơ đồ hoạt động một số chức năng website

3.3.1 Sơ đồ hoạt động chức năng đăng nhập website.

Hình 3.7: Sơ đồ hoạt động ca đăng nhập website bán giày Candy store

Khi người dùng click chọn đăng nhập, hệ thống sẽ hiển thị màn hình form đăng nhập Tại đây người dùng có thể nhập username và password để login vào trang web hoặc có thể thoát khỏi màn hình đăng nhập Nếu người dùng chọn button login sau khi nhập username và password thì hệ thống sẽ tiến hành kiểm tra username và

30 password với cơ sở dữ liệu Nếu thông tin hợp lệ thì sẽ cho đăng nhập vào hệ thống và chuyển đến trang Home Nếu thông tin không hợp lệ thì xuất hiện message :

“Username hoặc password sai Vui lòng nhập lại.” Và quay lại bước nhập username và password như Hình 3.2

3.3.2 Sơ đồ hoạt động chức năng đăng kí account

Hình 3.8: Sơ đồ hoạt động chức năng đăng kí tài khoản mới

Khi người dùng yêu cầu đăng kí tài khoản hệ thống sẽ hiển thị form đăng kí tài khoản, tại đây người dùng nhập các thông tin của bản thân để đăng kí tài khoản hoặc thoát khỏi màn hình tạo account mới Sau khi người dùng click chọn button

32 kí” hệ thống sẽ kiểm tra thông tin nhập vào có hợp lệ không? Nếu thông tin hợp lệ thì sẽ lưu thông tin tài khoản vào database, nếu thông tin username bị trùng thì sẽ xuất hiện text cảnh báo dưới username: “Username bị trùng” Nếu thông tin đăng nhập bị để trống thì sẽ xuất hiện text cảnh báo dưới trường đấy và người dùng sẽ nhập lại các thông tin không hợp lệ sau đấy chọn button đăng kí như Hình 3.3.3.3.3 Sơ đồ hoạt động chức năng Thêm mới sản phẩm

Hình 3.9: Sơ đồ hoạt động chức năng thêm mới sản phẩm

Khi Admin có yêu cầu Thêm mới sản phẩm hệ thống hiển thị màn hình Thêm sản phẩm Ở đây người dùng có thể nhập các thông tin của sản phẩm để thêm mới

34 sản phẩm hoặc thoát khỏi màn hình Thêm mới Khi người dùng chọn Thêm mới sản phẩm hệ thống sẽ kiểm tra xem thông tin nhập vào có hợp lệ không, nếu thông tin hợp lệ thì sẽ lưu sản phẩm vào database, nếu thông tin nhập vào không hợp lệ (để trống dữ liệu) thì xuất hiện cảnh báo bên dưới trường bị để trống Người dùng sẽ nhập lại dữ liệu tại trường không hợp lệ sau đó chọn button “Thêm mới”.

3.3.4 Sơ đồ use case chức năng đặt hàng

Hình 3.10: Sơ đồ hoạt động chức năng đặt hàng.

Khi người dùng có yêu cầu đặt hàng hệ thống hiển thị trang đặt hàng Người dùng có thể chọn nhập số lượng cần đặt hoặc thoát khỏi màn hình đặt hàng Khi người dùng đặt hàng hệ thống sẽ kiểm tra dữ liệu đặt hàng có hợp lý không? Nếu dữ liệu hợp lý thì sẽ hiển thị màn hình Chi tiết đặt hàng Người dùng kiểm tra thông tin đặt hàng và chọn button “Thanh toán COD” thì hệ thống hiển thị message thông báo đặt hàng thành công và lưu đơn hàng vào database Nếu hệ thống kiểm tra thông tin dữ liệu đặt hàng không hợp lệ (do chưa có sản phẩm trong giỏ hàng) thì sẽ xuất hiện popup cảnh báo và người dùng sẽ thêm số lượng, size của sản phẩm cần mua vào giỏ hàng để tiến hành thanh toán.

3.3.5 Sơ đồ hoạt động chức năng tìm kiếm sản phẩm

Hình 3.11: Sơ đồ hoạt động chức năng tìm kiếm sản phẩm

Khi người dùng muốn tìm kiếm sản phẩm thì tiến hành nhập click vào icon

“Search” sau đó nhập tên sản phẩm cần tìm Tại đây người dùng có thể thoát khỏi màn hình tìm kiếm Sau khi nhập nội dung tìm kiếm thì chọn button tìm kiếm, hệ thống sẽ kiểm tra dữ liệu được nhập vào searchbox Nếu dữ liệu tồn tại trong database thì trả kết quả sản phẩm về Nếu dữ liệu tìm kiếm không tồn tại thì có thể nhập lại nội dung tìm kiếm mới

Một số giao diện chức năng của website cho người dùng

Hình 3.12: Trang chủ website bán giày của cửa hàng Candy Store

Mô tả chức năng hoạt động của trang chủ:

+ Xem thông tin các sản phẩm có tại cửa hàng: người dùng có thể xem các thông tin như tên sản phẩm và giá thành sản phẩm Tại đây người dùng có thể click vào sản phẩm để xem chi tiết sản phẩm

+ Thêm sản phẩm vào giỏ hàng: người dùng có thể thực hiện thao tác thêm sản phẩm vào giỏ hàng bằng cách click vào sản phẩm, nhập số lượng, size và chọn Thêm vào giỏ hàng

+ Xem thông tin giới thiệu, liên hệ của cửa hàng: Xem các thông tin về cửa hàng như địa chỉ, hotline, email, dịch vụ của cửa hàng

+ Tìm kiếm sản phẩm, danh mục sản phẩm: người dùng thực hiện thao tác tìm kiếm sản phẩm bằng cách nhập từ khóa tìm kiếm vào ô searchbox

+ Đăng nhập vào website: người dùng có thể đăng nhập vào website để thực hiện thao tác đặt hàng bằng cách nhập username và password vào form đăng nhập

+ Đăng kí tài khoản: trường hợp người dùng chưa có tài khoản thì có thể nhập các thông tin vào form đăng kí như username, fullname, password, số điện thoại,… để đăng kí tài khoản

3.4.2 Giao diện trang sản phẩm

Hình 3.13: Giao diện trang sản phẩm Các chức năng trong trang sản phẩm:

+ Xem thông tin chi tiết của sản phẩm: Người dùng thực hiện click vào từng sản phẩm để xem thông tin chi tiết của sản phẩm như hình ảnh, số lượng, giá thành Từ đấy người dùng có thể chọn thêm vào giỏ hàng của mình.

+ Thêm sản phẩm vào trong giỏ hàng: thêm sản phẩm muốn mua vào giỏ hàng bằng cách nhập số lượng và size mong muốn

+ Xem phân trang sản phẩm: tại đây người dùng có thể click xem phân trang của sản phẩm

+ Lọc sản phẩm theo khoảng giá, danh mục và thương hiệu: chọn lọc sản phẩm theo các tiêu chí: khoảng giá, danh mục sản phẩm và thương hiệu của sản phẩm để có thể lọc ra sản phẩm phù hợp nhu cầu người dùng.

3.4.3 Giao diện trang danh mục

Hình 3.14:Giao diện trang danh mục sản phẩm Các chức năng của trang danh mục

+ Chọn hiển thị các sản phẩm trong danh mục: người dùng chọn hiển thị các sản phẩm theo danh mục muốn lọc.

+ Thực hiện các chức năng với các sản phẩm đã chọn như trang sản phẩm ( thêm vào giỏ hàng, tìm kiếm, lọc sản phẩm, )

3.4.4 Giao diện trang đăng nhập

Hình 3.15: Giao diện trang đăng nhập Chức năng của trang đăng nhập:

+ Cho phép người dùng nhập thông tin username, password để đăng nhập (nếu người dùng đã có tài khoản) Nếu người dùng nhập sai thông tin username hoặc password thì sẽ yêu cầu đăng nhập lại

+ Cho phép người dùng đến trang đăng kí (nếu user chưa có account): Nếu người dùng chưa đăng kí account thì sẽ điền các thông tin hợp lệ để đăng kí account mới. Nếu người dùng nhập thông tin không hợp lệ (username đã tồn tại, bỏ trống dữ liệu) thì sẽ hiện cảnh báo nhập lại.

+ Cho phép người dùng Quên mật khẩu (nhập email để lấy lại mật khẩu): Khi người dùng không nhớ mật khẩu đăng nhập có thể chọn quên mật khẩu Sau đấy nhập email để tiến hành lấy lại mật khẩu.

3.4.5 Giao diện trang đăng kí tài khoản

Hình 3.16: Giao diện trang đăng kí tài khoản Các chức năng dùng trong đăng kí tài khoản:

+ Cho phép người dùng nhập thông tin để đăng kí tài khoản: khi người dùng chưa có tài khoản sẽ có thể đăng kí tài khoản mới bằng cách nhập các giá trị vào form đăng kí như: username, fullname, số điện thoại, email, pass,…

+ Cho phép người dùng đến trang đăng nhập ( user đã có account): Nếu user đã có account thì sẽ quay lại trang đăng nhập để nhập username và password đăng nhập vào website.

Hình 3.17: Giao diện trang giỏ hàng Chức năng của trang giỏ hàng:

+ Hiển thị các sản phẩm mà người dùng đã thêm vào giỏ hàng: trang sẽ hiển thị thông tin sản phẩm mà người dùng đã thêm vào giỏ hàng như: hình ảnh, tên sản phẩm, số lượng, đơn giá sản phẩm.

+ Tăng, giảm số lượng sản phẩm trong giỏ hàng: có thể tăng/giảm số lượng sản phẩm trong giỏ hàng

+ Cho phép đặt hàng: khi người dùng kiểm tra lại số lượng hàng và sản phẩm trong giỏ hàng đúng rồi thì người dùng có thể tiến hành đặt hàng.

3.4.7 Giao diện trang Thông tin tài khoản

Hình 3.18: Giao diện trang thông tin tài khoản Các chức năng của trang thông tin tài khoản:

+ Hiển thị thông tin của người dùng: hiển thị thông tin người dùng đã đăng kí như: ảnh đại diện, họ tên, số điện thoại, email, địa chỉ nhận hàng.

+ Cho phép chỉnh sửa các thông tin của người dùng như: hình ảnh, họ tên, số điện thoại, email, địa chỉ

+ Cho phép người dùng thay đổi mật khẩu: người dùng có thể tiến hành thay đổi mật khẩu

Một số giao diện chức năng của website cho người quản lý (admin)

Hình 3.19: Giao diện trang chủ (trang thống kê) Chức năng của trang chủ (thống kê) là:

+ Xem thống kê tổng đơn hàng, tổng sản phẩm, tổng người dùng3.5.2 Giao diện trang quản lý người dùng

Hình 3.20: Giao diện quản lý người dùng Chức năng của trang quản lý người dùng

+ Xem danh sách người dùng gồm các thông tin như: hiển thị các thông tin của người dùng như: id tài khoản, hình ảnh, username, họ tên, ngày tạo

+ Thực hiện Khóa hoặc mở khóa các tài khoản của người dùng: Admin có thể thực hiện thao tác khóa tài khoản hoặc mở khóa đối với tài khoản đã bị khóa

+ Tìm kiếm tài khoản người dùng: tại đây admin có thể tìm kiếm người dùng bằng các nhập thông tin search box

+ Lọc hiển thị danh sách người dùng: admin có thể tiến hành lọc hiển thị số lượng người dùng tại trang.

+ Xem danh sách phân trang (nếu có nhiều trang): xem danh sách phân trang bằng cách click vào số trang cần xem hoặc button next.

3.5.3 Giao diện trang quản lý sản phẩm

Hình 3.21: Giao diện trang quản lý sản phẩm Chức năng của trang quản lý sản phẩm là:

+ Hiển thị danh sách thông tin sản phẩm: tại trang này sẽ hiển thị thông tin sản phẩm gồm: mã sản phẩm, hình ảnh, tên sản phẩm, số lượng sản phẩm còn, danh mục và giá sản phẩm.

+ Cho phép thêm sản phẩm mới: admin có thể thêm sản phẩm mới khi click vào button “Thêm sản phẩm” và nhập các thông tin sản phẩm hợp lệ

+ Cho phép cập nhật sản phẩm: admin có thể update thống tin sản phẩm

+ Cho phép xóa sản phẩm: Xóa các sản phẩm mong muốn

+ Chọn số lượng hiển thị danh sách: admin có thể tiến hành lọc hiển thị số lượng sản phẩm tại trang.

+ Tìm kiếm sản phẩm: nhập thông tin sản phẩm để tìm kiếm sản phẩm trong ô search box

+ Xem phân trang sản phẩm: xem danh sách phân trang bằng cách click vào số trang cần xem hoặc button next.

3.5.4 Giao diện trang quản lý đơn hàng

Hình 3.22: Giao diện trang quản lý đơn hàng Chức năng của trang quản lý đơn hàng

+ Xem danh sách các đơn hàng đã được đặt mua: Xem trạng thái các đơn hàng đã được đặt mua

+ Cập nhật trạng thái đơn hàng: trạng thái đang chờ duyệt, đã duyệt đơn hàng, đã nhận đơn hàng, đơn hàng đã hủy,

+ Xem chi tiết đơn hàng: click vào chi tiết để xem chi tiết đơn hàng

+ Tìm kiếm đơn hàng: nhập thông tin của đơn hàng vào ô searchbox để tìm kiếm + Lọc đơn hàng theo ngày:

+ Hiển thị số lượng đơn hàng trong danh sách

+ Xem phân trang đơn hàng

3.5.5 Giao diện trang quản lý danh mục sản phẩm

Hình 3.23: Giao diện trang quản lý danh mục Các chức năng của trang quản lý danh mục

+ Xem danh sách các danh mục: xem danh sách thông tin danh mục: id, tên danh mục.

+ Thêm danh mục mới: admin có thể tạo mới danh mục bằng cách click vào “Thêm danh mục”

+ Tìm kiếm danh mục: nhập dữ liệu vào ô search box để tìm kiếm thông tin danh mục + Cập nhật danh mục: thực hiện thao tác cập nhật danh mục sản phẩm

+ Xóa danh mục: xóa các danh mục không cần thiết

+ Hiển thị số lượng danh mục của trang

+ Xem phân trang danh sách danh mục

3.5.6 Giao diện trang quản lý thương hiệu

Hình 3.24: Giao diện quản lý thương hiệu Các chức năng của trang quản lý thương hiệu:

+ Xem danh sách các thương hiệu

+ Hiển thị số lượng thương hiệu trong danh sách

+ Xem phân trang thương hiệu

3.5.7 Giao diện trang quản lý bài viết

Hình 3.25: Giao diện trang quản lý bài viết Các chức năng của trang quản lý bài viết:

+ Xem danh sách các bài viết

+ Hiển thị số lượng bài viết

+ Xem phân trang bài viết

Cài đặt phần mềm

Bước 1: Download Java Development Kit(JDK) tại link: Java Archive Downloads - Java SE 8 (oracle.com) và tiến hành install

Bước 2: Download và cài đặt Eclipse IDE:

Hình 4.1: Phần mềm Eclipse Bước 3: Download Selenium Java Client Driver

Bước 4: Tạo project trong eclipse

- Tạo project: Chọn file -> New -> Java Project -> Nhập tên project ->Finish

- Tạo package: Chọn file -> New -> Package -> Nhập tên package -> finish

- Tạo Class: Chọn file -> New -> Class -> Nhập tên Class -> Finish

4.2 Tạo testcase và chạy kiểm thử kịch bản test (testscript) một số chức năng của website.

4.2.1 Chức năng đăng nhập website

Test case đăng nhập website:

Test case Nội dung Các bước thực hiện

Kết quả mong muốn ĐN_01 Đăng nhập thành công với giá trị hợp lệ

Hiển thị trang chủ ĐN_02 Đăng nhập không thành công: không nhập username

3 Nhấn button "Sign in" Đăng nhập không thành công vẫn ở trang Đăng nhập ĐN_03 Đăng nhập không thành công: nhập sai password

3 Nhấn button "Sign in" Đăng nhập không thành công vẫn ở trang Đăng nhập ĐN_04 Đăng nhập không thành công: không nhập password

3 Nhấn button "Sign in" Đăng nhập không thành công vẫn ở trang Đăng nhập ĐN_05 Đăng nhập không thành công: nhập sai username

3 Nhấn button "Sign in" Đăng nhập không thành công vẫn ở trang Đăng nhập ĐN_06 Đăng nhập không thành công: không nhập username và password

1 Nhấn button "Sign in" Đăng nhập không thành công vẫn ở trang Đăng nhập

Bảng 4.1: Testcase chức năng Đăng nhập website Một số TestScript chạy bằng Selenium Webdriver: public void DN01_LoginValid() throws

System.out.println("Open to Login page"); driver.get("http://localhost:8080/Shopgiay/login");

System.out.println("Enter valid username & password");

WebElement iptUserNameLogin driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(validUserName);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(validPassword);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click(); System.out.println("Verify display homepage"); driver.findElement(By.xpath("//a[@href='home']//span[contains(text(),'Trang chủ')]")).isDisplayed();

Assert.assertEquals(driver.getTitle(), "TRANG

Testcase_DN01 (Kịch bản 1): Login vào trang web thành công: Nhập đúng username và password

Bảng 4.2: TestScript ca đăng nhập thành công public void DN02_LoginInvalid_BlankUserName() throws

System.out.println("Open to Login page"); driver.get("http://localhost:8080/Shopgiay/login");

System.out.println("Enter valid username & password");

WebElement iptUserNameLogin driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys("");

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click(); System.out.println("Verify: Login failed Still on the login page"); driver.findElement(By.xpath("//h4[contains(text(),'Sign In')]")).isDisplayed(); } public void DN03_LoginInvalid_WrongPass() throws

Testcase_DN02 (Kịch bản 2): Đăng nhập khi để trống username:

Bảng 4.3: TestScript ca đăng nhập khi để trống mật khẩu

Testcase_DN03 (Kịch bản 3): Đăng nhập khi nhập sai mật khẩu

System.out.println("Open to Login page"); driver.get("http://localhost:8080/Shopgiay/login");

System.out.println("Enter valid username & password");

WebElement iptUserNameLogin driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click(); System.out.println("Verify: Login failed Still on the login page"); driver.findElement(By.xpath("//h4[contains(text(),'Sign In')]")).isDisplayed();

Bảng 4.4: TestScript ca đăng nhập khi nhập sai password Kết quả khi chạy testscript của chức năng Đăng nhập

Hình 4.2: Kết quả test các test case của chức năng đăng nhập vào website

Kết quả test chức năng Đăng nhập trang web: Các kịch bản kiểm thử

(testScript) đều pass, website chạy theo đúng yêu cầu, không xảy ra lỗi.

4.2.3 Chức năng đăng kí tài khoản mới

Testcase đăng kí tài khoản mới

Test case Nội dung Các bước thực hiện Kết quả mong muốn ĐK_01 Đăng kí thành công: nhập các giá trị đầu vào hợp lệ

1 Nhập các giá trị hợp lệ

2 Chọn button "đăng kí" Đăng kí thành công. Hiển thị trang đăng nhập ĐK_02 Đăng kí không thành công:

Bỏ trống tên đăng nhập

1 Bỏ trống trường tên đăng nhập Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường tên đăng nhập:

"username không được trống" ĐK_03 Đăng kí không thành công:

1 Bỏ trống trường họ tên Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường họ tên : "họ tên không được trống"

58 ĐK_04 Đăng kí không thành công:

1 Bỏ trống trường email Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường email: "email không được trống" ĐK_05 Đăng kí không thành công: Bỏ trống số điện thoại

1 Bỏ trống trường số điện thoại Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường số điện thoại:

"số điện thoại không được trống" ĐK_06 Đăng kí không thành công: Bỏ trống ảnh đại diện

1 Bỏ trống trường ảnh đại diện Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường ảnh đại diện: " file khong đuoc de trong" ĐK_07 Đăng kí không thành công:

1 Bỏ trống trường mật khẩu Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường mật khẩu:

"Password không được để trống" ĐK_08 Đăng kí không thành công:

1 Bỏ trống trường địa chỉ Nhập các giá trị khác hợp lệ

Xuất hiện text dưới trường địa chỉ:

"address không được trống" ĐK_09 Đăng kí không thành công:

Nhập sai mật khẩu xác nhận

2 Nhập lại mật khẩu là: 2

Xuất hiện text dưới trường Nhập lại mật khẩu: " mật khẩu xác nhận sai"

DK_10 Đăng kí không thành công:

Không chọn button đăng kí

1 Điền tất cả thông tin hợp lệ Đăng nhập không thành công Vẫn ở trang đăng kí

Bảng 4.5: Test case chức năng đăng kí tài khoản mới.

TestScript chạy bằng Selenium Webdriver:

Testcase_DK01(Kịch bản 1): Đăng kí tài khoản thành công public void DK01_ValidRegister() throws

InterruptedException{ String username faker.name().username();

String fullName = faker.name().fullName();

String email = faker.internet().emailAddress();

String phone = faker.phoneNumber().phoneNumber();

String password er.internet().password();

String address er.address().streetAddress();

System.out.println("Open Register page"); driver.get("http://localhost:8080/Shopgiay/regis");

System.out.println("Fill valid details: username, full name, email, password, re password, address");

WebElement inputUserName driver.findElement(By.id("username")); inputUserName.clear(); inputUserName.sendKeys(username);

WebElement inputFullName driver.findElement(By.id("fullname")); inputFullName.clear(); inputFullName.sendKeys(fullName);

WebElement inputEmail = driver.findElement(By.id("email")); inputEmail.clear(); inputEmail.sendKeys(email);

WebElement inputPhone driver.findElement(By.id("phone")); inputPhone.clear();

WebElement iptPassword driver.findElement(By.id("password")); iptPassword.clear(); iptPassword.sendKeys(password);

WebElement iptConfirmPassword driver.findElement(By.id("repassword")); iptConfirmPassword.clear(); iptConfirmPassword.sendKeys(password);

WebElement iptAddress driver.findElement(By.xpath("//input[@name='address']")); iptAddress.clear(); iptAddress.sendKeys(address);

System.out.println("Choose profile image");

WebElement fileInput = driver.findElement(By.id("file"));

String imagePath = System.getProperty("user.dir")+ File.separator +

"src/test/resources/testdata/profileImage/Picture1.jpg"; fileInput.sendKeys(imagePath);

System.out.println("Click on 'Dang ky' button");

WebElement btnDangKy driver.findElement(By.xpath("//button[@class='btn- regis']"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();", btnDangKy); Thread.sleep(3000);

System.out.println("Verify register successfully, login with account register above"); public void DK02_invalidRegisterusername() throws

InterruptedException{ System.out.println("Open website"); driver.get("http://localhost:8080/Shopgiay/regis");

System.out.println("Bỏ trống trường tên đăng nhập Nhập các giá trị khác hợp lệ");

WebElement inputUserName driver.findElement(By.id("username")); inputUserName.clear(); driver.findElement(By.xpath("//h4[contains(text(),'Sign In')]")).isDisplayed(); WebElement iptUserNameLogin = driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password); driver.findElement(By.xpath("//button[@class='btn-login']")).click(); driver.findElement(By.xpath("//li[@class='navitem']/a[@href='home']")).isDispla yed();

Bảng 4.6: TestScript của ca đăng kí tài khoản thành công

Testcase_DK02 (Kịch bản 2): Đăng kí tài khoản không thành công: Để trống tên đăng nhập public void DK03_invalidRegisterfullname() throws

InterruptedException{ System.out.println("Open website"); driver.get("http://localhost:8080/Shopgiay/regis");

System.out.println("Bỏ trống trường họ tên Nhập các giá trị khác hợp lệ"); WebElement inputFullName driver.findElement(By.id("fullname")); inputFullName.clear();

System.out.println("Click on 'Dang ky' button");

System.out.println("Click on 'Dang ky' button");

WebElement btnDangKy driver.findElement(By.xpath("//button[@class='btn- regis']"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();", btnDangKy);

System.out.println("Verify: Xuất hiện text dưới trường tên đăng nhập: username không được trống");

WebElement userNameError = driver.findElement By.xpath("//span[@id

Assert.assertEquals(userNameError.getText(), "username không được trống"); }

Bảng 4.7: TestScript của ca đăng kí tài khoản không thành công: Để trống tên đăng nhậpTestcase_DK03 (Kịch bản 3): Đăng kí tài khoản không thành công: Để trống họ tên

WebElement btnDangKy = driver.findElement(By.xpath("//button[@class='btn- regis']"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();", btnDangKy);

System.out.println("Verify: Xuất hiện text dưới trường họ tên : họ tên không được trống");

WebElement fullNameError = driver.findElement(By.xpath ("//span[@id

Assert.assertEquals(fullNameError.getText(), "Họ tên không được trống"); }

Bảng 4.8: TestScript của ca đăng kí tài khoản không thành công: Để trống họ tên Kết quả chạy testscript chức năng đăng kí tài khoản:

Hình 4.3: Kết quả test chức năng đăng kí tài khoản

Kết quả test chức năng Đăng kí tài khoản mới: Website xảy ra lỗi ở trường hợp 8: Để trống không nhập trường nhập lại mật khẩu vẫn tiến hành đăng nhập được Mà theo yêu cầu của hệ thống thì phải xuất hiện text error dưới trường nhập lại mật khẩu.

4.2.4: Chức năng Chỉnh sửa Profile

Test case của ca chỉnh sửa profile

Test case Nội dung Các bước thực hiện Kết quả mong muốn Profile_01 Cập nhật profile thành công: Nhập các giá trị hợp lệ

1 Đăng nhập vào website bằng account: username (ducn), password (1)

Popup thông báo: "Cập nhật thông tin thành công".

Cập nhật profile không thành công: Để trống họ tên

1 Đăng nhập vào website bằng account: username (ducn), password (1)

4 Chọn button 'Lưu thay đổi"

Xuất hiện text dưới trường họ tên: "Họ tên không được trống"

Cập nhật profile không thành công: Để trống số điện thoại

1 Đăng nhập vào website bằng account: username (ducn), password (1)

4 Chọn button 'Lưu thay đổi"

Xuất hiện text dưới trường số điện thoại:

"Số điện thoại không được trống"

Cập nhật profile không thành công: Để trống email

1 Đăng nhập vào website bằng account: username (ducn), password (1)

Xuất hiện text dưới email: "email không được trống"

4 Chọn button 'Lưu thay đổi"

Cập nhật profile không thành công: Để trống địa chỉ

1 Đăng nhập vào website bằng account: username (ducn), password (1)

4 Chọn button 'Lưu thay đổi"

Xuất hiện text dưới địa chỉ: "address không được trống"

Cập nhật profile không thành công: không click vào button "Lưu thay đổi"

1 Đăng nhập vào website bằng account: username (ducn), password (1)

4 Chọn button 'Lưu thay đổi"

Bảng 4.9: Testcase chức năng Thay đổi Profile Một số TestScript chạy bằng Selenium Webdriver:

Testcase_Profile01:Chỉnh sửa profile thành công: public void Profile_01(){

String username "ducn"; String password

System.out.println("1 Đăng nhập vào website bằng account: username (ducn), password (1)"); driver.get("http://localhost:8080/Shopgiay/login");

66 iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click();

System.out.println("2 Open profile"); driver.findElement(By.xpath("//a[@href='account']")).click(); driver.findElement(By.xpath("//h4[contains(text(),'THÔNG TIN TÀI KHOẢN')]")).isDisplayed();

System.out.println("Change full name to 'Test1'");

WebElement iptFullName driver.findElement(By.id("fullname")); iptFullName.clear(); iptFullName.sendKeys("Test1");

System.out.println("Click on 'Luu Thay Doi' button");

WebElement btnLuuThayDoi = driver.findElement(By.xpath

("//button[contains(text(),'Lưu thay đổi')]"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();", btnLuuThayDoi);

System.out.println("Display Popup thông báo: 'Cập nhật thông tin thành công.'' "); driver.findElement(By.xpath("//p[contains(text(),'Cập nhật thông tin thành công')]")).isDisplayed(); public void Profile_02(){

String username "ducn"; String password

System.out.println("1 Đăng nhập vào website bằng account: username (ducn), password (1)"); driver.get("http://localhost:8080/Shopgiay/login");

WebElement iptUserNameLogin driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click();

System.out.println("2 Open profile"); driver.findElement(By.xpath("//a[@href='account']")).click(); driver.findElement(By.xpath("//h4[contains(text(),'THÔNG TIN

Bảng 4.10: TestScript của ca Chỉnh sửa Profile thành công

Testcase_Profile02: Chỉnh sửa profile không thành công: Để trống họ tên

WebElement iptFullName = driver.findElement(By.id("fullname")); iptFullName.clear();

System.out.println("4 Clik on 'Luu thay doi' button");

WebElement btnLuuThayDoi driver.findElement(By.xpath ("//button[contains(text(),'Lưu thay đổi')]"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();", btnLuuThayDoi);

System.out.println("4 Xuất hiện text dưới trường họ tên: 'Họ tên không được trống'");

WebElement fullNameError driver.findElement(By.xpath

("//span[@id='fullname.errors']")); fullNameError.isDisplayed();

Assert.assertEquals(fullNameError.getText(), "Họ tên không được

Bảng 4.11: TestScript của ca Chỉnh sửa Profile không thành công:Để trống họ tênKết quả các testcase chức năng Chỉnh sửa Profile:

Hình 4.4: Kết quả test của chức năng Chỉnh sửa Profile

Kết quả test của chức năng Chỉnh sửa Profile: Tất cả các trường hợp đều Pass, website không xảy ra lỗi ở chức năng này.

4.2.5 Chức năng Tạo mới sản phẩm

Test case chức năng tạo mới sản phẩm:

Test case Nội dung Các bước thực hiện Kết quả mong muốn SP_01 Tạo mới sản phẩm thành công

1 Đăng nhập bằng account admin

4 Nhập các thông tin hợp lệ

"Thêm/cập nhật sản phẩm"

Thêm sản phẩm thành công Quay lại trang quản lý sản phẩm

SP_02 Thêm sản phẩm không thành công: Để trống trường Tên sản phẩm

1 Đăng nhập bằng account admin

4 Để trống trường Tên sản phẩm

Xuất hiện text dưới Tên sản phẩm: "tên sản phẩm không được trống"

"Thêm/cập nhật sản phẩm"

SP_03 Thêm sản phẩm không thành công: Để trống trường giá

1 Đăng nhập bằng account admin

"Thêm/cập nhật sản phẩm"

Xuất hiện text dưới giá:

"giá sản phẩm không được trống"

SP_04 Thêm sản phẩm không thành công: Để trống trường Số lượng

1 Đăng nhập bằng account admin

4 Để trống trường số lượng

"Thêm/cập nhật sản phẩm"

Xuất hiện text dưới Số lượng: "số lượng sản phẩm không được trống"

SP_05 Thêm sản phẩm không thành công: Không chọn size

1 Đăng nhập bằng account admin

4 Để trống trường Tên sản phẩm

"Thêm/cập nhật sản phẩm"

Xuất hiện text dưới Tên sản phẩm: "Size sản phẩm không được trống"

SP_06 Thêm sản phẩm không thành công:Không chọn file ảnh

1 Đăng nhập bằng account admin

4 Để trống không chọn file ảnh

Xuất hiện text dưới ảnh:

"file khong duoc de trong"

"Thêm/cập nhật sản phẩm"

SP_07 Thêm sản phẩm không thành công: Không chọn ảnh chi tiết

1 Đăng nhập bằng account admin

4 Để trống trường ảnh chi tiết

"Thêm/cập nhật sản phẩm"

Xuất hiện text dưới ảnh chi tiết "file khong duoc de trong"

SP_08 Thêm sản phẩm không thành công: Không điền mô tả

1 Đăng nhập bằng account admin

4 Để trống trường mô tả

"Thêm/cập nhật sản phẩm"

Xuất hiện text dưới trường mô tả: " Mô tả không được trống"

Bảng 4.12: Test case chức năng Thêm sản phẩm (Tạo mới)

Một số TestScript chạy bằng Selenium Webdriver:

Testcase_SP01:Thêm mới sản phẩm thành công.

74 public void SP01_AddValidNewProduct() throws InterruptedException

{ System.out.println("1 Đăng nhập bằng account admin"); driver.get("http://localhost:8080/Shopgiay/login");

System.out.println("Enter valid username & password");

WebElement iptUserNameLogin = driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click();

Assert.assertEquals(driver.getCurrentUrl(),"http://localhost:8080/Shopgiay/admi n/home");

System.out.println("2 Chọn Sản phẩm"); driver.findElement(By.xpath("//span[@class='nav_name' and contains(text(),'Sản phẩm')]")).click();

System.out.println("3 Chọn Thêm mới"); driver.findElement(By.xpath("//a[@href='addproduct']")).click(); driver.findElement(By.xpath("//p[contains(text(),'Thêm/cập nhật sản phẩm')]")).isDisplayed();

System.out.println("4 Nhập các thông tin hợp lệ");

String productName faker.commerce().productName();

String price = Double.toString(faker.random().nextDouble());

String quantity Integer.toString(faker.number().randomDigitNotZero()); String size "36";

String category = "giày thể thao";

String descText = "Test enter description";

System.out.println("Enter product name");

WebElement iptProductName = driver.findElement(By.xpath

76("//input[@id='tieude']")); iptProductName.clear(); iptProductName.sendKeys(productName);

System.out.println("Choose product details image");

WebElement productDetailsFile = driver.findElement(By.name("anhphu"));

String productDetailsPath = System.getProperty("user.dir")+ File.separator +

"src/test/resources/testdata/product/productDetails.jpg"; productDetailsFile.sendKeys(productDetailsPath);

System.out.println("Enter description"); driver.switchTo().frame("editor_ifr"); driver.findElement(By.id("tinymce")).sendKeys(descText); driver.switchTo().defaultContent();

System.out.println("Enter price");

WebElement iptPrice = driver.findElement(By.name("price")); iptPrice.clear(); iptPrice.sendKeys(price);

System.out.println("Enter quantity");

WebElement iptQuantity driver.findElement(By.name("quantity")); iptQuantity.clear(); iptQuantity.sendKeys(quantity);

System.out.println("Select size");

Select sizeDropdown = new Select(driver.findElement(By.name("listcolor")));sizeDropdown.selectByVisibleText(size);

System.out.println("Select category");

WebElement eleCategory = driver.findElement(By.name("danhmuc"));

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", eleCategory);

Select(eleCategory); categoryDropdown.selectByVisibleText(category);

System.out.println("Select brand");

WebElement eleBrand = driver.findElement(By.name("thuonghieu"));

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", eleBrand);

Select(eleBrand); brandDropDown.selectByVisibleText(brand);

System.out.println("Choose product image'");

WebElement anhNenFile = driver.findElement(By.name("anhnen"));

String andNenPath = System.getProperty("user.dir")+ File.separator +

"src/test/resources/testdata/product/product1.jpg"; anhNenFile.sendKeys(andNenPath);

System.out.println("5 Chọn button 'Thêm/cập nhật sản phẩm'");

WebElement addProductBtn driver.findElement(By.xpath

("//button[contains(text(),'Thêm/ cập nhật sản phẩm')]"));

((JavascriptExecutor) driver).executeScript("arguments[0].click();",addProductBtn); public void SP02_AddInvalidProductNameSP() throws InterruptedException {

System.out.println("Thêm sản phẩm không thành công: Không nhập tên sản phẩm");

System.out.println("1 Đăng nhập bằng account admin"); driver.get("http://localhost:8080/Shopgiay/login");

System.out.println("Enter valid username & password");

System.out.println("Verify: Thêm sản phẩm thành công Quay lại trang quản lý sản phẩm");

"http://localhost:8080/Shopgiay/admin/product");

WebElement searchBar driver.findElement(By.xpath

("//input[@type='search']")); searchBar.clear(); searchBar.sendKeys(productName); driver.findElement(By.xpath("//tbody[@id='listproduct']//td[contains(text(),'" + productName +"')]")).isDisplayed(); driver.findElement(By.xpath("//a[@class='btn btn- danger']")).click();

Bảng 4.13: TestScript ca thêm mới sản phẩm thành côngTestcase_SP02: Thêm sản phẩm không thành công: Để trống trường Tên sản phẩm iptUserNameLogin.clear(); iptUserNameLogin.sendKeys(username);

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys(password);

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click();

"http://localhost:8080/Shopgiay/admin/home");

System.out.println("2 Chọn Sản phẩm"); driver.findElement(By.xpath("//span[@class='nav_name' and contains(text(),'Sản phẩm')]")).click();

System.out.println("3 Chọn Thêm mới"); driver.findElement(By.xpath("//a[@href='addproduct']")).click(); driver.findElement(By.xpath("//p[contains(text(),'Thêm/cập nhật sản phẩm')]")).isDisplayed();

System.out.println("4 Để trống không nhập tên sản phẩm");

Select(driver.findElement(By.name("listcolor"))); sizeDropdown.selectByVisibleText("38");

System.out.println("5 Chọn button 'Thêm/cập nhật sản phẩm'");

WebElement addProductBtn driver.findElement(By.xpath

("//button[contains(text(),'Thêm/ cập nhật sản phẩm')]"));

82((JavascriptExecutor) driver).executeScript("arguments[0].click();",addProductBtn);

System.out.println("Verify: Xuất hiện text dưới tên sản phẩm: 'tên sản phẩm không được trống'");

WebElement tenspError driver.findElement(By.xpath

("//span[@id='name.errors']")); tenspError.isDisplayed();

Assert.assertEquals(tenspError.getText(), "tên sản phẩm không được trống"); }

Bảng 4.14: TestScript ca thêm mới sản phẩm không thành công: Để trống trường tên sản phẩm Kết quả testscript chức năng tạo mới sản phẩm:

Hình 4.5: Kết quả test chức năng thêm mới sản phẩm

Kết quả chức năng Tạo mới sản phẩm: Xảy ra lỗi ở trường hợp Không chọn size Theo yêu cầu thì khi không chọn size sẽ xuất hiện text dưới Size sản phẩm:

"tên sản phẩm không được trống", nhưng khi không chọn size sản phẩm thì không thấy xuất hiện text cảnh báo.

4.2.6 Chức năng Tìm kiếm sản phẩm

Test case ca kiểm thử Tìm kiếm sản phẩm

Test case Nội dung Các bước thực hiện Kết quả mong muốn

Tìm kiếm sản thành công: nội dung tìm tồn tại phẩm Nhậ p kiếm

2 Nhập nội dung: "giày thể thao"

Hiển thị các sản phẩm có tên: "giày thể thao"

Tìm kiếm sản không thành nội dung tìm không tồn tại phẩm công: kiếm

"không có sản phẩm nào phù hợp"

Tìm kiếm sản phẩm không thành công:

Không click vào button tìm kiếm

Tìm kiếm sản không thành công phẩm

Tìm kiếm sản không thành

Không nhập dung tìm kiếm phẩm công: nội

Hiển thị text cảnh báo textbox: "Vui lòng nhập nội dung tìm kiếm" Bảng 4.15: Test case chức năng Tìm kiểm sản phẩm Một số TestScript chạy bằng Selenium Webdriver:

Testcase_TK01: Tìm kiếm thành công: Nhập nội dung tìm kiếm tồn tại public void TK01_SearchValidProduct() throws InterruptedException { System.out.println( System.out.println("1 Chọn search"); driver.findElement(By.xpath("//i[@class='fa fa-searc Thread.sleep(3000); driver.findElement(By.xpath("//h5[contains(text(),'Tìm phẩm')]")).isDisplayed(); kiếm sản

System.out.println("2 Nhập nội dung: giày thể thao");

WebElement inputSearch = driver.findElement(By.name("search")); inputSearch.clear(); inputSearch.sendKeys("giày thể thao"); System.out.println("3 Click button tìm kiếm"); driver.findElement(By.xpath("//button[contains(text(),'Tìm kiếm')]")).click(); Thread.sleep(3000) System.out.println("Verify: Hiển thị các sản phẩm có tên: giày thể thao");

WebElement items = driver.findElement(By.xpath("//p[@class='name-signle- item']"));

Assert.assertTrue(items.getText().contains("Giày Thể Thao"));

Bảng 4.16: TestScript ca tìm kiếm sản phẩm thành công Testcase_TK02: Tìm kiếm không thành công: Nhập nội dung tìm kiếm không tồn tại public void TK02_SearchInvalidProduct() throws InterruptedException { System.out.println("Ope System.out.println("1 Chọn search"); driver.findElement(By.xpath("//i[@class='fa fa-search'] Thread.sleep(3000); driver.findElement(By.xpath("//h5[contains(text(),'Tìm phẩm')]")).isDisplayed(); kiếm sản

System.out.println("2 Nhập nội dung: áo phông");

WebElement inputSearch = driver.findElement(By.name("search")); inputSearch.clear(); inputSearch.sendKeys("áo phông"); System.out.println("3 Click button tìm kiếm"); driver.findElement(By.xpath("//button[contains(text(),'Tìm kiếm')]")).click(); Thread.sleep(3000) System.out.println("Verify: Hiển thị hông báo lỗi: Không có sản phẩm nào phù hợp");

WebElement items = driver.findElement(By.xpath("//p[@class='name-signle- item']"));

Assert.assertTrue(items.getText().contains("Không có sản phẩm nào phù hợp"));}

86 Bảng 4.17: TestScript ca tìm kiếm sản phẩm không thành công: Nhập nội dung tìm kiếm không tồn tại public void TK03_SearchValidProduct() throws InterruptedException { System.out.println("Ope Thread.sleep(3000); driver.findElement(By.xpath("//h5[contains(text(),'Tìm phẩm')]")).isDisplayed(); kiếm sản

System.out.println("3 Click button tìm kiếm"); driver.findElement(By.xpath("//button[contains( System.out.println(" Hiển thị text dưới searchbox: Vui lòng nhập nội dung tìm kiếm");

WebElement searchError = driver.findElement(By.xpath ("//span[@id='search.errors']"));

Assert.assertEquals(searchError.getText(), "Vui lòng nhập nội dung tìm kiếm");}

Testcase_TK03: Tìm kiếm không thành công: Không nhập nội dung tìm kiếm

Bảng 4.18: TestScript ca tìm kiếm sản phẩm không thành công: Nhập nội dung tìm kiếm không tồn tạiKết quả test chức năng Tìm kiếm:

Hình 4.6: Kết quả test chức năng Tìm kiếm Kết quả test chức năng Tìm kiếm sản phẩm: Xảy ra lỗi ở 2 trường hợp:

- Trường hợp 02: Theo yêu cầu khi không có sản phẩm nào phù hợp với yêu cầu tìm kiếm thì sẽ hiển thị thông báo: "không có sản phẩm nào phù hợp” Nhưng hiện tại trang web không thấy hiển thị thông báo.

- Trường hợp 04: Theo yêu cầu khi không nhập nội dung mà chọn button “Tìm kiếm” thì sẽ xuất hiện text error dưới searchbox: "Vui lòng nhập nội dung tìm kiếm" Nhưng hiện tại khi không nhập nội dung tìm kiếm thì không xuất hiện cảnh báo.

Test case Nội dung Các bước thực hiện

Kết quả mong muốn ĐH_01 Đặt hàng thành công.

1 đăng nhập vào trang web

Hiển thị trang thanh toán thành công

"Thanh toán khi nhận hàng" ĐH_02 Đặt hàng không thành công: không có sản phẩm nào trong giỏ hàng

2 Chọn button: Đặt hàng Xuất hiện popup thông báo: "Bạn chưa có sản phẩm nào trong giỏ hàng, không thể thanh toán"

Bảng 4.19: Testcase chức năng Đặt hàng TestScript chạy bằng Selenium Webdriver:

Testcase_ĐH01:Đặt hàng thành công. public void DH_01() throws InterruptedException{

System.out.println("1 Dăng nhập vào trang web"); driver.get("http://localhost:8080/Shopgiay/login");

WebElement iptUserNameLogin driver.findElement(By.id("username")); iptUserNameLogin.clear(); iptUserNameLogin.sendKeys("ducn");

WebElement iptPassLogin driver.findElement(By.id("password")); iptPassLogin.clear(); iptPassLogin.sendKeys("1");

System.out.println("Click on 'Login' button"); driver.findElement(By.xpath("//button[@class='btn-login']")).click();

Tạo testcase và kiểm thử một số chức năng của website

[1] Bài giảng nhập môn Software Tester_Trần Huy Hoàng biên soạn

[2] Selenium WebDriver: https://viblo.asia/p/selenium-webdriver.

[3] Tài liệu kiến thức về kiểm thử của trung tâm Tester HN

[4] Trang website: https://viblo.asia/p/quy-trinh-kiem-thu-phan-mem-software- testing-life-cycle-stlc.

[5] Nghệ thuật kiểm thử phần mềm Glenford J Myer_John Wiley & Sons Inc

[6] Software Testing and Quality Assurance Theory and Practice tác giả Kshirasagar Naik (University of Waterloo) và Priyadarshi Tripathy (NEC Laboratories America, Inc.).

[8] Trang Website Art Of Testing

[9] W David Burns Selenium 1.0 Testing Tools: Beginner's Guide Paperback – November 11, 2010 published by Packt Publishing Ltd.

Ngày đăng: 05/02/2024, 10:15

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w