Gherkin là định dạng cho thông số kỹ thuật cucumber. Đây là một ngôn ngữ có thể giúp bạn mô tả hành vi nghiệp vụ mà không cần phải đi sâu vào chi tiết thực hiện.
Văn bản này hoạt động như tài liệu và bộ khung của các bài kiểm tra tự động của bạn. Gherkin dựa trên Ngữ pháp TreeTop tồn tại trong hơn 37 ngôn ngữ. Do đó, bạn có thể viết cucumber của mình bằng hơn 37 ngôn ngữ .
Nhu cầu về Gherkin có thể được giải thích dễ dàng bằng các hình ảnh sau:
Gherkin sẽ là tiếng nói chung cho các bên liên quan. Nó thể hiện được yêu cầu của khách hàng và logic chặt chẽ giữa Tester và Developer khi làm việc tạo ra sản phẩm như yêu cầu.
Gherkin là ngôn ngữ hướng dòng giống như YAML và Python. Mỗi dòng được gọi là bước và bắt đầu với từ khóa và kết thúc của các thiết bị đầu cuối với một điểm dừng. Tab hoặc space được sử dụng để thụt lề.
Trong kịch bản này, một nhận xét có thể được thêm vào bất cứ nơi nào bạn muốn, nhưng nó nên bắt đầu bằng dấu #. Nó đọc từng dòng sau khi loại bỏ các từ khóa của Ghrekin như given, when, then, v.v..
Feature: Title of the Scenario
Given [Preconditions or Initial Context]
When [Event or Trigger]
Then [Expected output]
Một Gherkin có phần mở rộng .feature và chỉ đơn giản là một tệp thử nghiệm trong khung Cucumber. Khung Cucumber sẽ đọc tài liệu Gherkin và thực hiện một bài kiểm tra để xác nhận rằng phần mềm hoạt động theo cú pháp Gherkin đó.
Tệp phải có extension .feature và mỗi tệp tính năng chỉ nên có một tính năng. Từ khóa tính năng có trong Tính năng: và sau lần thêm đó, một khoảng trắng và tên của tính năng sẽ được viết.
Từ khóa Background giúp bạn thêm một số bối cảnh vào kịch bản. Nó có thể chứa một số bước của kịch bản, nhưng sự khác biệt duy nhất là nó nên được chạy trước mỗi kịch bản.
Mỗi tệp tính năng có thể có nhiều kịch bản và mỗi kịch bản bắt đầu bằng Scenario: theo sau là tên kịch bản.
Một Scenario là một kịch bản chứa nhiều bước (steps) mô tả các bước hoạt động một phần chức năng của phần mềm. Trong một Scenario có thể chứa nhiều steps. Một Sceario thường được mô tả theo mấu:
Việc sử dụng từ khóa Given là đưa hệ thống về trạng thái quen thuộc trước khi người dùng bắt đầu tương tác với hệ thống. Tuy nhiên, bạn có thể bỏ qua việc viết các tương tác của người dùng trong các bước đã cho nếu được đưa ra trong bước "Precondition".
Syntax:
Given
[step description]
Ví dụ:
Given User login and navigate to Job Title page
When: là xác định hành động được thực hiện bởi người dùng.
Syntax:
When
[step description]
Ví dụ
When User click on Add New button in Job Title page
Việc sử dụng từ khóa 'then' là để xem kết quả sau hành động trong bước when. Tuy nhiên, bạn chỉ có thể xác minh những thay đổi đáng chú ý.
Syntax:
Then
[step description]
Then the job title name <jobTitleName> and the description <description> displays
Bạn có thể có nhiều given when hoặc Then.
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:
Cho biết Trang đăng nhập đang mở
Khi tôi nhập tên người dùng, mật khẩu và nhấp vào nút Đăng nhập
Thì tôi sẽ được chuyển đến trên Trang chủ
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
Scenario: eat 5 out of 20
Given there are 20 cucumbers
When I eat 5 cucumbers
Then I should have 15 cucumbers
Chúng ta có thể thu gọn hai kịch bản tương tự này thành một Scenario Outline
.
Các phác thảo kịch bản cho phép chúng tôi diễn đạt chính xác hơn các tình huống này thông qua việc sử dụng một mẫu với < >
các tham số được giới hạn:
Scenario Outline: eating
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
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 Outline
chạ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 các tham số trong đối số bước nhiều dòng .
Đâ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:
Given
các bước)When
các bước)Then
các bước)
Các bạn có thể 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
Feature: Update password
Scenario: Admin user can update the user password
Given I am in the HR system with an Admin account
When I update password of another user
Then I receive a message for updating password successfully
And user password is updated to the new password
@Regression
Feature: Job Titles feature
Scenario Outline: User can add Job Title
Given User login and navigate to Job Title page
When User click on Add New button in Job Title page
And User enter job title name "<jobTitleName>" and description "<description>"
And User click on Save button in Create Job Titles dialog
And enter "<jobTitleName>" on Job Titles search field
Then the job title name "<jobTitleName>" and the description "<description>" displays
Examples:
| jobTitleName | description |
| Employee | Software Engineer |
Feature: Multiple site support
Only blog owners can post to a blog, except administrators,
who can post to all blogs.
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"
Scenario: Dr. Bill posts to his own blog
Given I am logged in as Dr. Bill
When I try to post to "Expensive Therapy"
Then I should see "Your article was published."
Scenario: Dr. Bill tries to post to somebody else's blog, and fails
Given I am logged in as Dr. Bill
When I try to post to "Greg's anti-tax rants"
Then I should see "Hey! That's not your blog!"
Scenario: Greg posts to a client's blog
Given I am logged in as Greg
When I try to post to "Expensive Therapy"
Then I should see "Your article was published."
Anh Tester
Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu