KIỂM THỬ PHẦN MỀM, NGHIÊN CỨU CÔNG CỤ KIỂM THỬ CUCUMBER, Cucumber là một công cụ kiểm tra hỗ trợ Phát triển theo hướng hành vi (BDD). Nó cung cấp một cách để viết các bài kiểm tra mà bất kỳ ai cũng có thể hiểu được, bất kể kiến thức kỹ thuật của họ là gì. Trong BDD, người dùng (nhà phân tích kinh doanh, chủ sở hữu sản phẩm) trước tiên viết kịch bản hoặc kiểm tra chấp nhận mô tả hành vi của hệ thống từ quan điểm của khách hàng, để chủ sở hữu sản phẩm xem xét và đăng xuất trước khi nhà phát triển viết mã của họ. Cucumber framework sử dụng ngôn ngữ lập trình Ruby .
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
======***======
BÁO CÁO THỰC NGHIỆM
HỌC PHẦN KIỂM THỬ PHẦN MỀM
ĐỀ TÀI NGHIÊN CỨU CÔNG CỤ KIỂM THỬ
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 2
Chương I: Tìm hiểu về Cucumber 3
1.1 Cucumber Framework: Công cụ kiểm tra Cucumber là gì? 3
1.2 Behavior Driven Development(BDD) hoạt động như thế nào? 3
1.3 Workflow BDD 3
1.4 Lợi ích 4
1.5 So sánh Cucumber với các công cụ khác 4
Chương 2: Tìm hiểu về các thành phần chính của công cụ Cucumber 5
2.1.Thành phần của Cucumber 5
2.2 What is "Feature File"? - Tệp tính năng là gì? 6
2.3 Feature 6
2.3.1 Features trong Cucumber bao gồm các thành phần sau: 6
2.3.2 Step Definitions 7
2.4 Scenario 8
2.5 Cucumber – Annotations 10
2.6 Scenario outline 16
2.7 Chương trình test chức năng “Đăng nhập” 22
2.8 Chương trình test chức năng “Tìm kiếm” 23
LỜI CẢM ƠN 26
Trang 3LỜI MỞ ĐẦU
Bất kỳ một sản phẩm phần mềm nào khi mới hoàn thành cũng chắc chắn sẽ có lỗi, vì sản phẩm phầm mềm do con người xây dựng nên, dù có cẩn trọng, tỉ mỉ đến mức nào thì cũng không thể đảm bảo sản phẩm mình tạo ra là không có lỗi Do đó, sẽ cần một người, nhóm hoặc tổ chức độc lập kiểm thử xem sản phẩm đó có vấn đề hay có lỗi gì hay không Để kiểm thử phần mềm thì chúng ta cần phải có kế hoạch, chiến lược kiểm thử cũng như các kỹ thuật các phương pháp hiệu quả cho mỗi mức độ kiểm thử Ở đề tài bài tập lớn này,nhóm em làm về nghiên cứu công cụ Cucumber
Trang 4Chương I: Tìm hiểu về Cucumber1.1 Cucumber Framework: Công cụ kiểm tra Cucumber là gì?
Cucumber là một công cụ kiểm tra hỗ trợ Phát triển theo hướng hành
vi (BDD) Nó cung cấp một cách để viết các bài kiểm tra mà bất kỳ ai cũng cóthể hiểu được, bất kể kiến thức kỹ thuật của họ là gì Trong BDD, người dùng(nhà phân tích kinh doanh, chủ sở hữu sản phẩm) trước tiên viết kịch bản hoặc kiểm tra chấp nhận mô tả hành vi của hệ thống từ quan điểm của khách hàng, để chủ sở hữu sản phẩm xem xét và đăng xuất trước khi nhà phát triển viết mã của họ Cucumber framework sử dụng ngôn ngữ lập trình Ruby
1.2 Behavior Driven Development (BDD) hoạt động như thế nào?
Trong BDD, người dùng (business analysts – người phân tích nghiệp
vụ, product owners – người sỡ hửu sản phẩm) sẽ viết kịch bản(scenarios) hoặc acceptance test (kiểm thử chấp nhận) mô tả hành vi của hệ thống từ quanđiểm của khách hàng trước và trong giai đoạn phát triển Cucumber và BDD
giải quyết hạn chế rất hay gặp trong các dự án phần mềm: mỗi người hiểu hệ
thống một cách khác nhau.
BDD có khả năng tạo ra các kịch bản test dựa trên góc nhìn của bên phát triển cũng như góc nhìn của bên khác hàng Ngay từ ban đầu, các thành viên dự án sẽ thảo luận để tạo ra các kịch bản trước, sau đó sẽ cài đặt dựa trên kịch bản đó, tất cả kịch bản test gần gũi với ngôn ngữ tiếng Anh, do đó nó đóng luôn vai trò của tài liệu
1.3 Workflow BDD
Trang 5Sau khi kịch bản test chạy, Cucumber sẽ đọc mã Gherkin từ file feature, sau đó nó sẽ tìm đoạn mã trong file step definition mô tả đúng với hành động trong file feature và thực hiện đoạn code, ở bước chạy code Cucumber có thể kết hợp với các framework khác như Ruby on Rails, Selenium, Spring,
1.4 Lợi ích
Sẽ rất hữu ích nếu liên quan đến các bên liên quan trong kinh doanh, những người không thể dễ dàng đọc mã
Công cụ kiểm tra Cucumber tập trung vào trải nghiệm người dùng cuối
Phong cách của các bài kiểm tra viết cho phép sử dụng lại mã dễ dàng hơn trong các bài kiểm tra
Thiết lập và thực hiện nhanh chóng, dễ dàng
Công cụ kiểm tra Cucumber là một công cụ hiệu quả để kiểm tra
1.5 So sánh Cucumber với các công cụ khác
Trang 6Chương 2: Tìm hiểu về các thành phần chính của công cụ
Cucumber2.1 Thành phần của Cucumber
Các project Cucumber luôn có một thư mục con tại thư mục gốc (root) project tên "features" Đây là nơi lưu trữ tất cả các features của projects, ngoài
ra còn có các thư mục bổ sung (additional directories) và thư mục hỗ trợ (support directories)
Trang 72.2 What is "Feature File"? - Tệp tính năng là gì?
Tệp tính năng chứa mô tả cấp cao của Kịch bản thử nghiệm bằng ngôn ngữ đơn giản Nó được biết đến với cái tên Gherkin Gherkin là một ngôn ngữvăn bản tiếng Anh đơn giản
2.3 Feature
Feature có thể được hiểu là một đơn vị hoặc chức năng độc lập của một
dự án Ví dụ như một trang web thương mại điện tử, một vài tính năng
2.3.1 Features trong Cucumber bao gồm các thành phần sau:
Feature: Một tính năng sẽ mô tả tập lệnh thử nghiệm hiện tại phải
được thực thi
Scenario: Kịch bản mô tả các bước và kết quả mong đợi cho một
trường hợp thử nghiệm cụ thể
Scenario Outline: Có thể thực hiện cùng một kịch bản cho nhiều bộ dữ
liệu bằng cách sử dụng phác thảo kịch bản Dữ liệu được cung cấp theocấu trúc dạng bảng được phân tách bằng (II)
Given: Nó chỉ định ngữ cảnh của văn bản sẽ được thực thi Bằng cách
sử dụng các dữ liệu "Cho trước", bước cũng có thể được tham số hóa
Trang 8 When: "Khi nào" chỉ định hành động kiểm tra phải thực hiện
Then: Kết quả mong đợi của thử nghiệm có thể được biểu thị bằng
"Sau đó"
2.3.2 Step Definitions
Mặc dù đã có file feature nhưng Cucumber chưa thực sự biết đoạn mã nào
sẽ được thực thi cho từng scenario cụ thể được nêu trong file feature Nó cần
một file trung gian Step Definition, file này ánh xạ các bước thực hiện (step),
features (Given, When, Then) trong scenario với đoạn mã (code) chức năng cần thực thi Step được định nghĩa trong file java
"features/step_definitions/*_steps.java"
Ví dụ:
Trang 92.4 Scenario
Scenario là cấu trúc lõi của Gherkin Kịch bản test khai báo với từ khóa
"Scenario:" và theo sau là tên kịch bản Mỗi tính năng có thể có một hoặc nhiều scenarios, mỗi scenario bao gồm một hoặc nhiều steps
Thí dụ:
Scenario outline: Chức năng đăng nhập cho một trang mạng xã hội Người dùng nhất định điều hướng đến Facebook
Khi người dùng đăng nhập bằng Tên người dùng là "<tên người dùng>"
và Mật khẩu là "<mật khẩu>", thì đăng nhập sẽ thành công
Trang 10Có một số mẹo và thủ thuật để xác định các tình huống Cucumber một cách thông minh.
Mỗi bước nên được xác định rõ ràng, để không tạo ra bất kỳ sự nhầm lẫn nào cho người đọc
Không lặp lại kịch bản thử nghiệm, nếu cần sử dụng phác thảo kịch bản
Cho người dùng nhập tên người dùng
Nhấp vào đăng nhập.
Giả sử kịch bản trên bạn cần thực hiện nhiều lần với nhiều menu khác nhau Nếu thực hiện lần lượt thì sẽ rất nhàm chán và không phải là một cách hay Cucumber cung cấp cấu trúc "Scenario outline" để giải quyết vấn đề này.Cucumber thay thế giá trị đầu vào khác nhau và thực thi loạt hành vi
Như ví dụ dưới đây, Cucumber điền tuần tự lần chạy thứ nhất và lần chạy thứ
hai tương ứng 2 giá trị "Dự án" và "Task" vào biến <menu> Nó tự động
hiểu là chạy 2 lần với 2 giá trị tương ứng
Trang 112.5 Cucumber – Annotations
Annotations (chú thích) là một văn bản được xác định trước, có một ý nghĩa cụ thể Nó cho phép trình biên dịch / thông dịch viên biết, những gì nên làm khi thực thi Cucumber có một số chú thích sau:
Given
Nó mô tả điều kiện tiên quyết để kiểm tra được thực hiện
Ví dụ - GIVEN Tôi là người dùng Facebook
Sau đó, giữ kết quả mong đợi để kiểm tra được thực hiện
Ví dụ - THEN đăng nhập sẽ thành công
And
Nó cung cấp điều kiện AND logic giữa hai câu lệnh bất kỳ AND
có thể được sử dụng cùng với câu lệnh GIVEN, WHEN và THEN
Ví dụ - KHI tôi nhập "<tên người dùng>" VÀ tôi nhập "<mật khẩu>" của mình
But
Nó biểu thị điều kiện HOẶC logic giữa hai câu lệnh bất kỳ OR
có thể được sử dụng cùng với câu lệnh GIVEN, WHEN và THEN
Ví dụ - THEN đăng nhập sẽ thành công NHƯNG không được thiếu trang chủ
Trang 12BUT home page should not be missing.
Scenario Outline − (To be covered later)
Examples − (To be covered later)
Background
Nền thường có hướng dẫn về những gì cần thiết lập trước khi chạy mỗi kịch bản Tuy nhiên, nó được thực thi sau hook “Before” (sẽ được đề cập sau) Vì vậy, điều này là lý tưởng để được sử dụng cho mã khi chúng ta muốn thiết lập trình duyệt web hoặc chúng ta muốn thiết lập kết nối cơ sở dữ liệu
Tình huống mẫu
Tự động hóa một kịch bản để hiểu các chú thích tốt hơn
Bước 1:
Tạo một Maven Test Project có tên là AnnotationTest
Đi tới File → New → Others → Maven → Maven Project → Next
Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án)
Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường)
Trang 13 Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, cáctệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.
Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án
Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc
(<dependency> </dependency>)
Cung cấp thông tin sau trong thẻ phụ thuộc
Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, những tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Thêm phụ thuộc cho Cucumber-JUnit - Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kholưu trữ trung tâm đến kho lưu trữ cục bộ
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Trang 14 Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưutrữ cục bộ.
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Xác minh mã nhị phân
Khi pom.xml được chỉnh sửa thành công, hãy lưu nó
Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút
Tạo một tệp tính năng có tên là annotation.feature
Chọn và nhấp chuột phải vào đường viền gói
Nhấp vào tệp 'New'
Đặt tên cho tệp như outline.feature
Viết văn bản sau vào tệp và lưu nó
Trang 15Bước 4
Tạo tệp định nghĩa bước
Chọn và nhấp chuột phải vào đường viền gói
Nhấp vào tệp 'New'
Đặt tên tệp là annotation.java
Viết văn bản sau vào tệp và lưu nó
Trang 16Bước 5
Tạo một tệp lớp người chạy
Chọn và nhấp chuột phải vào đường viền gói
Nhấp vào tệp 'New'
Đặt tên cho tệp, chẳng hạn như runTest.java
Viết văn bản sau vào tệp và lưu nó
Bạn sẽ quan sát thấy những điều sau đây khi bạn chạy tệp lớp này:
Facebook mở trong một phiên bản trình duyệt web Firefox mới
TOM sẽ được chuyển làm đầu vào cho trường tên người dùng
JERRY sẽ được chuyển làm đầu vào cho trường mật khẩu
Đăng nhập sẽ được nhấp vào
Thông báo sẽ được hiển thị trên trình duyệt về việc đăng nhập không thành công
Trong bảng điều khiển, bạn sẽ thấy “Thẻ kiểm tra” được in
Kết quả bước 1 đến 5 Sẽ được thực thi lại cho tên người dùng là "" và mật khẩu là ""
Trang 172.6 Scenario outline
Về cơ bản thay thế biến / từ khóa bằng giá trị từ bảng Mỗi hàng trong bảng được coi là một kịch bản
Chúng ta sẽ tiếp tục với thí dụ tương tự về tính năng đăng nhập
Facebook Cho đến nay, chúng ta đã thực hiện một tình huống: Sau khi cung cấp tên người dùng chính xác, đăng nhập thành công Bây giờ, giả sử chúng tamuốn kiểm tra xem đăng nhập có thành công cho cả ba loại đầu vào có thể có,
đó là tên người dùng, địa chỉ email hoặc số điện thoại hay không Để đạt đượcđiều này, chúng ta sẽ cần viết ba Scenario (kịch bản) khác nhau, trong đó mỗi kịch bản sẽ khác nhau với loại đầu vào, đăng nhập thành công Trong trường hợp này, các tình huống sẽ giống như sau
Scenario:
Cho phép người dùng điều hướng đến Facebook
Khi tôi nhập đúng tên người dùng và mật khẩu
Sau đó đăng nhập sẽ thành công
Scenario:
Cho phép người dùng điều hướng đến Facebook
Khi tôi nhập đúng địa chỉ email và mật khẩu
Sau đó đăng nhập sẽ thành công
Scenario:
Cho phép người dùng điều hướng đến Facebook
Khi tôi nhập đúng số điện thoại và mật khẩu
Sau đó đăng nhập sẽ thành công
Nếu chúng ta quan sát kỹ, đối với ba trường hợp trên: các câu lệnh giống nhau, chỉ có tham số đầu vào (tên người dùng / địa chỉ email / số điện thoại) là thay đổi Đó là nơi mà tầm quan trọng của phác thảo kịch bản trở thành hình ảnh
Khi chúng ta xác định bất kỳ kịch bản nào với phác thảo kịch bản, chúng ta có thể chỉ định một kịch bản thử nghiệm và ở dưới cùng của nó,
Trang 18chúng ta có thể cung cấp một số đầu vào Kịch bản sẽ được thực thi nhiều lần với số lượng đầu vào được cung cấp.
Thí dụ:
Bước 1 - Tạo một Maven Test Project có tên là ScenarioOutlineTest
Đi tới File → New → Others → Maven → Maven Project → Next
Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất
Nhấp chuột phải và chọn tùy chọn, Mở bằng “Text Editor”
Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, các tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ
Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc
(<dependencies> </dependencies>), bên trong thẻ dự án
Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc (<dependency>
</dependency>)
Cung cấp thông tin sau trong thẻ phụ thuộc
Thêm phụ thuộc cho Cucumber-Java: Điều này sẽ cho biết Maven, những tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Trang 19 Thêm phụ thuộc cho Cucumber-JUnit: Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào
sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ
Tạo thêm một thẻ phụ thuộc
Cung cấp thông tin sau trong thẻ phụ thuộc
Xác minh mã nhị phân
Khi pom.xml được chỉnh sửa thành công, hãy lưu nó
Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút
Bước 2 - Tạo một gói có tên “phác thảo” trong src / test / java
Trang 20Bước 3 - Tạo tệp tính năng có tên “outline.feature”
Chọn và nhấp chuột phải vào đường viền gói
Nhấp vào tệp 'Mới'
Đặt tên tệp chẳng hạn như “outline.feature”
Viết văn bản sau vào tệp và lưu nó
Feature - Scenario Outline
Scenario Outline - Chức năng đăng nhập cho một trang mạng
xã hội
Cho phép người dùng điều hướng đến Facebook
Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu
là "<mật khẩu>"
Sau đó đăng nhập sẽ không thành công
Bước 4 - Tạo tệp định nghĩa bước.
Trang 21 Chọn và nhấp chuột phải vào đường viền gói.
Nhấp vào tệp 'Mới'
Đặt tên tệp là stepdefinition.java
Viết văn bản sau vào tệp và lưu nó
Bước 5 - Tạo tệp lớp người chạy.
Chọn và nhấp chuột phải vào đường viền gói
Nhấp vào tệp 'Mới'
Đặt tên tệp như runTest.java
Viết văn bản sau vào tệp và lưu nó
Trang 22 Chạy thử nghiệm bằng cách sử dụng tùy chọn
Chọn tệp runTest.java từ trình khám phá gói.
Nhấp chuột phải và chọn tùy chọn 'Chạy với tư cách’.
Chọn thử nghiệm JUnit
Bạn sẽ quan sát thấy những điều sau đây khi bạn chạy tệp lớp này
Facebook mở trong một phiên bản trình duyệt web Firefox mới
Tên người dùng1 và mật khẩu1 sẽ được chuyển làm đầu vào cho
trường tên người dùng và mật khẩu
Đăng nhập sẽ được nhấp vào
Thông báo sẽ được hiển thị trên trình duyệt về việc đăng nhập không thành công
Trong bảng điều khiển, bạn sẽ thấy “Test Pass” được in
Kết quả bước 1 đến 5 sẽ được thực hiện lại cho tên người dùng2 và mậtkhẩu2
Tóm lại, khi kịch bản không thay đổi nhưng chỉ giá trị dữ liệu bị thay đổi, bạn nên sử dụng bảng dữ liệu