Professional Documents
Culture Documents
Cucumber Testing
Cucumber Testing
TDD
Có yêu cầu -> chạy test ->lỗi -> phân tích lỗi -> fix lỗi -> chạy test
BDD
GHERKIN
Sử dụng tidy gherkin
I. Gherkin là gì?
Gherkin là một bộ quy tắc ngữ pháp tạo nên những văn bản có cấu trúc
đơn giản đủ để Cucumber có thể hiểu.
Gherkin sử dụng một bộ các từ khóa đặc biệt để đưa ra cấu trúc và ý nghĩa
cho các thông số kỹ thuật thực thi. Mỗi từ khóa được dịch sang nhiều ngôn
ngữ nói khác nhau.
Hầu hết các dòng trong tài liệu Gherkin đều bắt đầu bằng một trong các từ
khóa. Dòng bình luận được cho phép bất cứ nơi nào trong tập tin. Chúng
bắt đầu bằng 0 hoặc nhiều khoảng trắng, theo sau là dấu thăng (#) và một
số văn bản. Bình luận phải bắt đầu trên một dòng mới. Space hoặc tab có
thể được sử dụng để thụt lề. Mức thụt đầu dòng được đề nghị là hai space.
Đây là một ví dụ về Gherkin:
1. Feature
2. Rule (as of Gherkin 6)
3. Example (or Scenario)
4. Given, When, Then, And, But (steps)
5. Background
6. Scenario Outline (or Scenario Template)
7. Examples
Mục đích của từ khóa Feature là cung cấp mô tả chung về tính năng phần mềm
và nhóm các tình huống liên quan.
Từ khóa chính đầu tiên trong tài liệu Gherkin luôn là Feature, theo sau bởi dấu
":" và một phần ngắn mô tả tính năng này.
Các dòng mô tả này được Cucumber bỏ qua khi chạy, nhưng có sẵn để báo cáo
(mặc định chúng được bao gồm trong các báo cáo dạng html).
Tên và phần mô tả không có ý nghĩa đặc biệt đối với Cucumber. Mục đích của
chúng là cung cấp một nơi để bạn ghi lại các khía cạnh quan trọng của tính
năng, chẳng hạn như giải thích ngắn gọn và liệt kê ra các logic nghiệp vụ (tiêu
chí chấp nhận chung).
Phần mô tả không có quy tắc định dạng của Feature kết thúc khi bắt đầu một
dòng mới với từ khóa Rule, Example hoặc Scenario Outline.
Bạn có thể đặt các thẻ ở trên Feature để nhóm các tính năng liên quan, độc lập
với cấu trúc tệp và thư mục của bạn.
Note : Description
Phần mô tả (giống như miêu tả bên trên cho Feature) có thể đặt bên dưới
Example/Scenario, Background, Scenario Outline and Rule. Bạn có thể viết bất
cứ thứ gì bạn muộn nhưng miễn là không được bắt đầu bằng một từ khóa.
Ví dụ:
Thỉnh thoảng, bạn sẽ thấy mình lặp lại các bước tương tự trong tất cả các tình
huống trong một tính năng.
Vì nó được lặp lại trong mọi kịch bản, đây là một dấu hiệu cho thấy các bước đó
không cần thiết để mô tả các kịch bản; chúng là chi tiết ngẫu nhiên Theo nghĩa
đen, bạn có thể di chuyển các bước đã cho như vậy sang Background, bằng cách
nhóm chúng dưới phần Background.
Background cho phép bạn thêm một số ngữ cảnh vào các tình huống trong
Feature. Nó có thể chứa một hoặc nhiều bước nhất định.
Một Background được chạy trước mỗi kịch bản, nhưng sau bất kỳ Before hooks
nào. Trong tệp tính năng của bạn, đặt Background trước Scenario đầu tiên.
Bạn chỉ có thể có một bộ các bước Background cho mỗi tính năng. Nếu bạn cần
các bước Background khác nhau cho các kịch bản khác nhau, bạn sẽ cần chia
chúng thành các feature file khác nhau.
Ví dụ
Không sử dụng Bối cảnh để thiết lập các trạng thái phức tạp, trừ khi trạng thái
đó thực sự là điều khách hàng cần biết.
Giữ phần background của bạn ngắn. Khách hàng cần thực sự ghi nhớ công cụ
này khi đọc các kịch bản. Nếu Background dài hơn 4 dòng, hãy xem xét chuyển
một số chi tiết không liên quan sang các bước cấp cao hơn.
Làm cho phần Background của bạn sống động. Sử dụng tên đầy màu sắc, và cố
gắng kể một câu chuyện. Bộ não con người theo dõi các câu chuyện tốt hơn
nhiều so với việc theo dõi các tên như "Người dùng A", "Người dùng B",
"Trang web 1", v.v.
Giữ kịch bản của bạn ngắn, và không có quá nhiều.
Step
Mỗi bước sẽ bắt đầu với từ khóa Given, When, Then, And, hoặc But.
Cucumber thực hiện từng bước trong một kịch bản một lần, theo trình tự mà bạn
đã viết chúng. Khi Cucumber cố gắng thực hiện một bước, nó sẽ tìm một bước
định nghĩa phù hợp để thực thi.
Từ khóa không được tính đến khi tìm định nghĩa bước. Điều này có nghĩa là bạn
không thể có một bước Given, When, Then, hoặc But với cùng một văn bản như
một bước khác.
Điều này có vẻ như là một hạn chế, nhưng nó buộc bạn phải đưa ra một ngôn
ngữ miền ít mơ hồ hơn, rõ ràng hơn:
Mục đích của các bước Given là đưa hệ thống về trạng thái đã biết trước khi
người dùng (hoặc hệ thống bên ngoài) bắt đầu tương tác với hệ thống (trong các
bước Khi). Tránh nói về sự tương tác của người dùng trong Given khuyết. Nếu
bạn đang tạo các trường hợp sử dụng, Given sẽ là điều kiện tiên quyết của bạn.
Có thể có một số bước Given (chỉ cần sử dụng And hoặc But cho số 2 trở lên để
dễ đọc hơn).
Mickey and Minnie have started a game I am logged in Joe has a balance of
£42Syntax:
Given [step description]
Ví dụ:
Given User login and navigate to Job Title page
Rất khuyến khích bạn chỉ có một bước When trong mỗi Scenario. Nếu bạn cảm
thấy bắt buộc phải thêm nhiều bước When hơn, thì đó thường là một dấu hiệu
cho thấy bạn nên chia kịch bản thành nhiều kịch bản.
Syntax:
When [step description]
Ví dụ
Guess a word
Invite a friend
Withdraw money
When User click on Add New button in Job Title page
Định nghĩa bước của bước Then nên sử dụng một xác nhận để so sánh kết quả
thực tế (những gì hệ thống thực sự làm) với kết quả mong đợi (bước mà hệ
thống nói là phải làm).
Một quan sát nên được trên một đầu ra quan sát được. Đó là, một cái gì đó ra
khỏi hệ thống (báo cáo, giao diện người dùng, tin nhắn), và không phải thứ gì
đó chôn sâu bên trong nó (như cơ sở dữ liệu).
Ví dụ:
Xem từ đã đoán là sai Nhận lời mời Nên nuốt thẻ Trong khi nó có thể hấp dẫn
để thực hiện các bước Then chỉ cần tìm trong cơ sở dữ liệu - chống lại sự cám
dỗ đó!
Bạn chỉ nên xác minh kết quả có thể quan sát được cho người dùng (hoặc hệ
thống bên ngoài), và cơ sở dữ liệu thường thì không.
Syntax:
Then [step description]
Then the job title name <jobTitleName> and the description
<description> displays
Hoặc, bạn có thể làm cho nó đọc trôi chảy hơn bằng cách viết:
Syntax:
And [step description]
And I write "EmailAddress" with "anhtester@gmail.com"
But [step description]
But I should see "Welcome Anh Tester Blog"
Given, When, Then, And, But là các bước kiểm tra. Bạn có thể sử dụng chúng
thay thế cho nhau. Trình thông dịch không hiển thị bất kỳ lỗi nào. Tuy nhiên,
chúng chắc chắn sẽ không có ý nghĩa gì khi đọc.
Ví dụ case Login:
Scenario Outline (Gom Scenario có cùng kịch bản nhưng khác dữ liệu lại với
nhau)
Các Scenario Outline từ khóa có thể được sử dụng để chạy
cùng Scenario nhiều lần, với sự kết hợp khác nhau của các giá trị.
Từ khóa Scenario Template là một từ đồng nghĩa của từ khóa Scenario
Outline.
Việc sao chép và dán các kịch bản để sử dụng các giá trị khác nhau nhanh chóng
trở nên tẻ nhạt và lặp đi lặp lại:
Scenario: eat 5 out of 12
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
Examples
A Scenario Outline phải chứa một hoặc nhiều Examples (hoặc Scenarios)
phần. Các bước của nó được hiểu như một mẫu không bao giờ được chạy trực
tiếp. Thay vào đó, Scenario Outlinechạy một lần cho mỗi
hàng trong Examples phần bên dưới nó (không tính hàng tiêu đề đầu tiên).
Các bước có thể sử dụng các tham số<> được phân tách tham chiếu đến các tiêu
đề trong bảng ví dụ. Cucumber sẽ thay thế các tham số này bằng các giá trị từ
bảng trước khi nó cố gắng khớp bước với định nghĩa bước.
Bạn cũng có thể sử dụng tham số trong step arguments.
Example
Đây là một ví dụ cụ thể mà minh họa một quy tắc kinh doanh. Nó bao gồm một
danh sách các bước như trên.
Từ khóa Scenario là một từ đồng nghĩa của từ khóa Example.
Bạn có thể có bao nhiêu bước tùy thích, nhưng chúng tôi khuyên bạn nên thực
hiện 3-5 bước cho mỗi ví dụ. Có quá nhiều bước sẽ khiến ví dụ mất đi sức mạnh
biểu đạt như một đặc tả và tài liệu.
Ngoài việc là một đặc tả và tài liệu, một ví dụ cũng là một bài kiểm tra . Nhìn
chung, các ví dụ của bạn là một đặc tả thực thi của hệ thống.
Các ví dụ theo cùng một mẫu này:
o Mô tả bối cảnh ban đầu ( Given các bước)
o Mô tả một sự kiện ( When các bước)
o Mô tả một kết quả mong đợi ( Then các bước)
Tham khảo thêm các từ khóa và các cú pháp Gherkin chi tiết hơn tại
đây Gherkin keywords
Step Argument
Trong một số trường hợp, bạn có thể muốn truyền nhiều dữ liệu hơn cho một
bước hơn là khớp trên một dòng. Với mục đích này, Gherkin có các Doc string
và Data table.
Doc string
Doc String thuận tiện cho việc chuyển một đoạn văn bản lớn hơn sang
step definition.
Văn bản phải được bù bởi các dấu phân cách bao gồm ba dấu ngoặc
kép trên các dòng của riêng chúng:
Trong định nghĩa bước của bạn, ở đó, bạn không cần phải tìm văn bản này
và khớp nó trong mẫu của bạn. Nó sẽ tự động được thông qua như là đối
số cuối cùng trong định nghĩa bước.
Việc thụt lề mở "" "là không quan trọng, mặc dù thông lệ chung là hai
khoảng trắng từ bước kèm theo. Tuy nhiên, thụt lề trong ba dấu ngoặc kép
là rất quan trọng. Mỗi dòng của Doc String sẽ được khấu trừ theo" " . Do
đó, thụt vào bên ngoài cột mở ra
Data table
Data table thuận tiện cho việc chuyển danh sách các giá trị sang
step definition.
Cũng giống như Doc String, Data table sẽ được chuyển đến Step definition làm
đối số cuối cùng.
Cucumber cung cấp API phong phú để thao tác các bảng từ trong Step
definition. Xem tài liệu tham khảo tại đây để biết thêm chi tiết.
Ví dụ về Gherkin
Ví dụ 1:
Feature: Update password
Background:
Given a global administrator named "Greg"
And a blog named "Greg's anti-tax rants"
And a customer named "Dr. Bill"
And a blog named "Expensive Therapy" owned by "Dr.
Bill"
Nguồn
https://www.guru99.com/gherkin-test-cucumber.html
https://cucumber.io/docs/gherkin/reference/