Tải bản đầy đủ (.docx) (28 trang)

KIỂM THỬ PHẦN MỀM, NGHIÊN CỨU CÔNG CỤ KIỂM THỬ CUCUMBER

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.48 MB, 28 trang )

TRƯỜ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Ử
CUCUMBER
Giáo viên hướng dẫn: ThS. Hồng Quang Huy
Nhóm sinh viên thực hiện:
Lớp: 20212IT6013002
Nhóm: 17

Hà Nội, Năm 2022


MỤ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

1


LỜI MỞ ĐẦU
Bất kỳ một sản phẩm phần mềm nào khi mới hồ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.

2


Chương I: Tìm hiểu về Cucumber
1.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 ln vai trò của tài liệu.
1.3 Workflow BDD

3


Sau 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

4


Chương 2: Tìm hiểu về các thành phần chính của cơng cụ
Cucumber
2.1 Thành phần của Cucumber
Các project Cucumber ln 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, ngồi
ra cịn có các thư mục bổ sung (additional directories) và thư mục hỗ trợ
(support directories).

5


2.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
(features) có thể xác định như:


Đăng nhập bằng tài khoản hệ thống hoặc mạng xã hội




Lựa chọn hàng hóa



Thanh tốn



Đăng xuất
Trong Cucumber mỗi feature có thể hiểu là mỗi function độc lập của
sản phẩm. Trước khi viết test scripts chúng ta nên xác định trước các
features cần test để mang lại hiệu quả cao. Các tests xây dựng trong
Cucumber được gọi là các feature files và có dạng .feature, mỗi feature
cần test nên đặt trong 1 file feature tương ứ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 theo
cấ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.
6



 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ụ:

7


2.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.

8



Có 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
để thực hiện lặp lại.
 Phát triển một bước thử nghiệm theo cách mà nó có thể được sử dụng
trong nhiều tình huống và phác thảo kịch bản.
 Trong chừng mực có thể, hãy giữ cho mỗi bước hồn tồn độc lập. Ví
dụ: “Cho biết người dùng đã đăng nhập”. Điều này có thể được chia
thành hai bước:
 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.

9


2.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
 When
 Nó xác định điểm kích hoạt cho bất kỳ thực thi kịch bản thử
nghiệm nào.
 Ví dụ - KHI tơi nhập "<tên người dùng>"
 Then
 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 "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ủ.
10


 Scenario
 Thông tin chi tiết về kịch bản trong thử nghiệm cần được ghi lại
sau từ khóa “Scenario”
 Ví dụ
Scenario:
GIVEN I am a Facebook user

WHEN I enter my
AND I enter my
THEN login should be successful.
BUT 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).
 Nhấp vào Finish.
 Mở pom.xml  Đi tới trình khám phá gói ở phía bên trái của Eclipse.
 Mở rộng dự án AnnotationTest.
 Định vị tệp pom.xml.
 Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh
sửa văn bản”.
11



 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.

 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.

12


 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 Annotation trong src / test / java
 Chọn dự án mới tạo.
 Nhấp chuột phải và chọn 'New'.
 Chọn tùy chọn là 'Package'.
 Đặt tên nó là 'Annotations'.
 Lưu nó.
Bước 3
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ó.

13


Bướ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ó.

14


Bướ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ước 6
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.
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à "".






15


2.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 ta
muố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ó,
16


chú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
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).
 Nhấp vào Finish.
 Mở pom.xml
 Đi tới trình khám phá gói ở phía bên trái của Eclipse.

 Mở rộng dự án CucumberTest.
 Định vị tệp pom.xml.
 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.

17


 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

18


Bướ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.
19



×