Gherkin là gì? Cấu trúc của một Gherkin trong Cucumber

Trong bài này Anh Tester sẽ giới thiệu cho bạn các nội dung sau:

Gherkin là gì? Tại sao cần Gherkin? Cú pháp của Gherkin? Điều khoản quan trọng được sử dụng trong Gherkin Ví dụ Gherkin Thực hành tốt nhất khi sử dụng Gherkin Ưu điểm và nhược điểm của Gherkin.

✅ Gherkin là gì?

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


✅ Kịch bản này phục vụ mục đích gì?

  • Tài liệu kịch bản người dùng
  • Viết test case kiểm thử tự động (BDD)

 

✅ Tại sao cần Gherkin?

Nhu cầu về Gherkin có thể được giải thích dễ dàng bằng các hình ảnh sau:


🔆 Trước khi dùng Gherkin:

[Cucumber TestNG] Bài 2: Giới thiệu ngôn ngữ Gherkin theo hướng BDD sử dụng Cucumber Framework | Anh Tester 

🔆 Sau khi dùng Gherkin:

[Cucumber TestNG] Bài 2: Giới thiệu ngôn ngữ Gherkin theo hướng BDD sử dụng Cucumber Framework | Anh Tester

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.

✅ Cú pháp của Gherkin

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

🔆 Cú pháp của Gherkin cơ bản có dạng:

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 đó.


✅ Các từ khóa quan trọng được sử dụng trong Gherkin

 

Feature

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.


Background

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.

Scenario

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:

  • Mô tả điều kiện đã có sẵn (Given steps)
  • Mô tả hành động của tác nhân (When steps)
  • Mô tả kết quả mong đợi sau hành động (Then steps)

 

Given

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

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
 

Then

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


And & But

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.

[Cucumber TestNG] Bài 2: Giới thiệu ngôn ngữ Gherkin theo hướng BDD sử dụng Cucumber Framework | Anh Tester
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ủ


Scenario Outline

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 |

Examples

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 các tham số trong đối số bước nhiều dòng .


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:

  • Mô tả bối cảnh ban đầu ( Given các bước)
  • Mô tả một sự kiện ( When các bước)
  • Mô tả một kết quả mong đợi ( 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


✅ Ví dụ về Gherkin

Ví dụ 1:

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

Ví dụ 2:

@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 |

Ví dụ 3:

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

 

✅ Các phương pháp sử dụng Gherkin tốt nhất

  • Mỗi kịch bản nên thực hiện riêng biệt
  • Mọi tính năng sẽ có thể được thực thi cùng
  • Thông tin các bước phải được hiển thị độc lập
  • Kết nối Kịch bản của bạn với các yêu cầu của bạn
  • Theo dõi đầy đủ những tình huống nào nên được đưa vào tài liệu yêu cầu
  • Tạo các bước mô-đun và dễ hiểu
  • Cố gắng kết hợp tất cả các tình huống phổ biến của bạn


✅ Ưu điểm của Gherkin

  • Gherkin đủ đơn giản để những người không phải lập trình viên có thể hiểu được
  • Các lập trình viên có thể sử dụng nó như một cơ sở rất vững chắc để bắt đầu các bài kiểm tra của họ
  • Nó làm cho Câu chuyện của người dùng dễ hiểu hơn
  • Tập lệnh Gherkin có thể dễ dàng hiểu được bởi các nhà điều hành doanh nghiệp và nhà phát triển
  • Kiểm tra Gherkin nhắm mục tiêu các yêu cầu về sản phẩm
  • Một tỷ lệ đáng kể các thông số kỹ thuật chức năng được viết dưới dạng câu chuyện của người dùng
  • Bạn không cần phải là chuyên gia để hiểu bộ lệnh Gherkin nhỏ
  • Các trường hợp thử nghiệm Gherkin liên kết các thử nghiệm chấp nhận trực tiếp với các thử nghiệm tự động
  • Phong cách viết các trường hợp kiểm thử dễ dàng hơn để sử dụng lại mã trong các bài kiểm tra khác


✅ Nhược điểm của Gherkin

  • Nó đòi hỏi mức độ tham gia và cộng tác cao
  • Có thể không hoạt động tốt trong tất cả các tình huống
  • Các bài kiểm tra được viết kém có thể dễ dàng làm tăng chi phí bảo trì kiểm tra


✅ Tóm lược

  • Gherkin là định dạng cho các thông số kỹ thuật của Cucumber
  • Gherkin là ngôn ngữ hướng dòng giống như YAML và Python
  • Gherkin Scripts kết nối khái niệm nhân quả của con người với khái niệm phần mềm về đầu vào / quy trình và đầu ra
  • Feature, Background, Scenario, Given, When, Then, And, But các từ khóa thường được sử dụng trong Gherkin
  • Trong Gherkin, mỗi kịch bản nên thực thi riêng biệt
  • Ưu điểm lớn nhất của Gherkin là đủ đơn giản để những người không phải lập trình viên có thể hiểu được
  • Gherkin Test có thể không hoạt động tốt trong tất cả các loại tình huống


Xem thêm: NHỮNG QUY TẮC ĐỂ VIẾT MỘT FEATURE TỐT

 

Nguồn tham khảo:

  • 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