Là gì Cucumber Định nghĩa tệp & bước tính năng? (Ví dụ)

⚡ Tóm tắt thông minh

Cucumber Các tệp tính năng mô tả hành vi bằng ngôn ngữ Gherkin đơn giản, trong khi các định nghĩa bước chứa mã thực thi từng dòng. Mỗi Cucumber Dự án cần cả hai, được lưu trữ trong một cấu trúc thư mục cố định bên dưới thư mục features.

  • 🔘 Hai tập tin: Tệp tính năng (feature file) mô tả những gì nên xảy ra; tệp định nghĩa bước (step definition file) mô tả cách thức tự động hóa thực hiện điều đó.
  • ☑️ Từ khóa Gherkin: Đặc điểm, Kịch bản, Giả định, Khi nào và Sau đó tạo nên cấu trúc và hình thức dễ đọc của một kịch bản.
  • Không dùng dấu hai chấm trong các bước: Feature và Scenario dùng dấu hai chấm, nhưng Given, When và Then thì không được dùng dấu hai chấm, nếu không bước này sẽ bị bỏ qua.
  • 🧪 Bộ dữ liệu: Bảng tóm tắt kịch bản kèm theo bảng ví dụ sẽ mô phỏng lại một kịch bản cụ thể dựa trên nhiều dòng dữ liệu đầu vào.
  • 🛠️ Thiết lập dùng chung: Bối cảnh lặp lại các bước đã cho trong mọi kịch bản của một tính năng.
  • 📊 Kết hợp: Cucumber Nó bỏ qua từ khóa khi so khớp, vì vậy hai bước có thể không bao giờ có cùng một đoạn văn bản.

Cucumber Giải thích về tập tin tính năng và định nghĩa bước kèm ví dụ.

Đối với mỗi dự án Cucumber, sẽ có một thư mục duy nhất ở thư mục gốc của dự án có tên là “features”. Đây là nơi chứa tất cả các tính năng của Cucumber. Trong thư mục này, bạn sẽ tìm thấy các thư mục con khác, đó là thư mục step_definition và support.

Bố cục đó rất quan trọng, bởi vì Cucumber Hệ thống tự động tìm kiếm các tập tin của bạn theo quy ước chứ không phải theo cấu hình. Một tập tin tính năng nằm ngoài thư mục features sẽ không bao giờ được đọc.

"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 Nói một cách đơn giản, nó được biết đến như là... GherkinGherkin là một ngôn ngữ văn bản tiếng Anh đơn giản.

Cucumber Tệp tính năng bao gồm các thành phần sau:

  • Tính năng: Một tính năng sẽ mô tả tập lệnh kiểm thử hiện tại phải được thực thi.
  • Kịch bản: 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ể.
  • Tóm tắt kịch bản: Có thể thực thi 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 bởi cấu trúc dạng bảng được phân tách bằng (II).
  • Được: Nó chỉ định bối cảnh của văn bản sẽ được thực thi. Bằng cách sử dụng bảng dữ liệu “Đã cho”, bước cũng có thể được tham số hóa.
  • Thời Gian: "Khi" chỉ định hành động kiểm thử cần thực hiện.
  • Sau đóKết quả dự kiến ​​của bài kiểm tra có thể được biểu thị bằng từ “Sau đó”.

Mỗi tập tin chứa một Tính năng. Các kịch bản bên dưới là những ví dụ cụ thể minh họa cho tính năng đó, và mỗi kịch bản đều tuân theo cùng một trình tự: mô tả bối cảnh ban đầu, mô tả một sự kiện, mô tả kết quả mong đợi.

Tiếp theo, chúng ta sẽ học cách viết Feature File trong Cucumber với ví dụ.

Ví dụ về tệp tính năng mẫu:

Ví dụ gốc được đăng kèm theo hướng dẫn này được sao chép lại bên dưới chính xác như đã viết.

Feature: Visit career guide page in career.guru99.com
Scenario: Visit career.guru99.com
Given: I am on career.guru99.com
When: I click on career guide menu
Then: I should see career guide page

⚠️ Đính chính: Ví dụ trên đặt dấu hai chấm sau Được, Thời GianSau đóGherkin đặt dấu hai chấm sau dấu hai chấm. Tính năngKịch bản Chỉ vậy thôi. Từ khóa "step" theo sau bởi dấu hai chấm không được phân tích cú pháp như một bước, vì vậy Cucumber Nó âm thầm bỏ qua dòng đó. Tệp đã được sửa có nội dung như sau.

Feature: Visit career guide page in career.guru99.com

  Scenario: Visit career.guru99.com
    Given I am on career.guru99.com
    When I click on career guide menu
    Then I should see career guide page

Trình phân tích cú pháp không yêu cầu thụt lề, nhưng hai dấu cách trên mỗi cấp độ là kiểu thông thường và giúp việc quét một đối tượng dài dễ dàng hơn nhiều. Hình ảnh động bên dưới cho thấy quá trình chạy một tệp đối tượng và mỗi bước được chuyển sang màu xanh lá cây khi hoàn thành.

Hoạt hình của một Cucumber Tệp tính năng đang chạy với mỗi bước của Gherkin được báo cáo lần lượt.

"Định nghĩa bước" là gì?

Định nghĩa bước ánh xạ các Bước kiểm thử trong các tệp tính năng (được giới thiệu bởi Given/When/Then) tới mã. Nó thực thi các bước trên Ứng dụng đang được thử nghiệm và kiểm tra kết quả so với kết quả mong đợi. Để thực thi định nghĩa bước, nó phải khớp với thành phần đã cho trong một tính năng. Định nghĩa bước được xác định trong các tệp Ruby trong “features/step_def địnhs/*_steps.rb”.

Việc đối sánh chỉ dựa trên nội dung văn bản của bước đó. Cucumber Nó không tính đến từ khóa khi tìm kiếm định nghĩa, đó là lý do tại sao hai bước trong cùng một bộ quy tắc có thể không bao giờ có văn bản giống hệt nhau ngay cả khi một bước là "Given" và bước kia là "Then".

Ví dụ về định nghĩa bước: Ở đây chúng ta sẽ sử dụng ở trên Cucumber Ví dụ về Feature File khi duyệt trang career.guru99.com. Chúng ta sẽ sử dụng các tính năng như “When, Then, Given” như hình bên dưới. Cucumber Ví dụ về tệp tính năng.

Step 1:

Given (/^ I am on career.guru99.com$/) do

Browser.goto "http://career.guru99.com" -This will visit career.guru99 on browser

end

Step 2:
When (/^ click on career guide menu$/) do

Browser.text (:name, " career guide" ).click – This will click "career guide menu"

end

Step 3:

Then (/^ I should see career guide page$/) do

Browser.goto "http://career.guru99.com/category/career-guide/" - It will visit "career guide page"

end

⚠️ Lưu ý về ngôn ngữ: Các định nghĩa ở trên là của Ruby, đó là nơi mà... Cucumber đã bắt đầu và đó là lý do tại sao thư mục được đặt tên như vậy. step_definitions và các tệp kết thúc bằng _steps.rbCùng một tập tin tính năng điều khiển các định nghĩa bước được viết trong Java, JavaKịch bản, Python hoặc C# mà không cần thay đổi bất kỳ chi tiết nào trong Gherkin. Trong Cucumber- Trong JVM, biểu thức chính quy được chuyển thành chú thích trên một phương thức:

@Given("I am on career.guru99.com")
public void i_am_on_the_career_page() {
    driver.get("http://career.guru99.com");
}

Dù bạn chọn ngôn ngữ nào, định nghĩa bước là nơi duy nhất chứa các chi tiết triển khai. Giữ vững lập trường.ping Các bộ chọn và lệnh gọi HTTP từ tệp tính năng cho phép người không phải lập trình viên đọc hiểu kịch bản. Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên Cucumber kịch bản Hướng dẫn này sẽ xây dựng sự kết hợp này từ đầu đến cuối.

Tóm tắt kịch bản và ví dụ trong tệp tính năng

Việc sao chép một kịch bản ba lần để thay đổi một giá trị là cách phổ biến nhất khiến tệp dữ liệu tính năng trở nên không thể đọc được. Tóm tắt kịch bản thay thế các bản sao bằng một mẫu và một Các ví dụ Bảng này cung cấp các giá trị.

Các tham số được viết trong dấu ngoặc nhọn và phải khớp với tiêu đề cột trong bảng bên dưới chúng. Cucumber Nó thay thế các giá trị trước khi tìm kiếm định nghĩa bước phù hợp, vì vậy bản thân các định nghĩa không cần xử lý đặc biệt.

Scenario Outline: Search the career guide
  Given I am on career.guru99.com
  When I search for "<keyword>"
  Then I should see the <section> section

  Examples:
    | keyword   | section       |
    | interview | Interview Tips|
    | resume    | Resume Guide  |

Có một vài điểm cần nhớ khi sử dụng dàn ý:

  • Cấu trúc chương trình chỉ chạy một lần cho mỗi hàng dữ liệu. Hàng đầu tiên là tiêu đề và không bao giờ được thực thi.
  • Phần Tóm tắt Kịch bản phải được theo sau bởi ít nhất một phần Ví dụ, nếu không thì chương trình sẽ không hoạt động.
  • Các đường ống trong bảng không cần phải thẳng hàng, mặc dù việc căn chỉnh chúng giúp tệp dễ đọc hơn.
  • Hãy giữ cho bảng nhỏ gọn. Một bảng có ba mươi hàng thường là dấu hiệu cho thấy dữ liệu đó nên được lưu trữ trong một bảng khác. kiểm thử dựa trên dữ liệu thay thế.

Bối cảnh, Và, Nhưng và các từ khóa khác của Gherkin

Ngoài sáu thành phần đã nêu ở trên, Gherkin còn có một số từ khóa giúp cho các tệp tính năng dài hơn dễ đọc hơn.

  • Tiểu sử — một khối các bước Given chạy trước mỗi kịch bản trong tính năng. Nó giúp loại bỏ việc lặp lại việc viết cùng một điều kiện tiên quyết ở đầu mỗi kịch bản.
  • Nhưng — là các từ thay thế cho cấu trúc "Given", "When" hoặc "Then" lặp đi lặp lại. Chúng dễ đọc hơn và hoạt động giống hệt nhau; Cucumber Các bước khớp nhau trong văn bản dù thế nào đi nữa.
  • Quy tắc — một nhóm tùy chọnping, được thêm vào trong Gherkin 6, tập hợp các kịch bản minh họa cho một quy tắc kinh doanh.
  • Chuỗi tài liệu — một khối văn bản được bao quanh bởi ba dấu ngoặc kép, được truyền vào định nghĩa bước dưới dạng một đối số duy nhất khi một dòng không đủ.
  • Bảng dữ liệu — Các hàng được phân tách bằng dấu gạch dọc, được gắn vào một bước duy nhất, dùng để truyền một danh sách các giá trị cho bước đó.
  • Tags — Các nhãn bắt đầu bằng dấu @, được đặt phía trên một Tính năng hoặc Kịch bản để có thể chọn một tập hợp con trong quá trình chạy.
  • Nhận xét — một dòng bắt đầu bằng dấu thăng. Chú thích chỉ được phép ở đầu dòng và Gherkin không có khối chú thích.

Tóm lại, một tệp tính năng với thiết lập dùng chung sẽ trông như thế này:

Feature: Career guide navigation

  Background:
    Given I am on career.guru99.com

  Scenario: Open the career guide menu
    Given I am signed in
    And my profile is complete
    When I click on career guide menu
    Then I should see career guide page
    But I should not see the admin panel

Những lỗi thường gặp trong file tính năng và cách khắc phục chúng

Hầu hết Cucumber Các vấn đề mà người mới bắt đầu báo cáo không phải là lỗi của framework. Chúng chỉ là những vi phạm nhỏ đối với các quy tắc của Gherkin và gây ra lỗi âm thầm.

Sai lầm Điều gì xảy ra Sửa chữa
Dấu hai chấm sau Given, When hoặc Then Đường kẻ đó không được nhận diện là một bước và bị bỏ qua. Chỉ sử dụng dấu hai chấm sau Feature và Scenario.
Hai bước với văn bản giống hệt nhau Cucumber coi chúng là bản sao vì từ khóa bị bỏ qua. Sửa lại câu chữ ở một bước để hai câu có nghĩa khác nhau.
Tệp tính năng nằm ngoài thư mục tính năng. Tệp tin không bao giờ được tìm thấy và không có lần chạy thử nào. Giữ mọi thứ .feature tệp nằm trong thư mục tính năng
Mười lăm bước trong một kịch bản Tình huống này không còn hoạt động như tài liệu nữa. Hãy đặt mục tiêu từ ba đến năm bước và đưa ra chi tiết cụ thể trong phần mô tả từng bước.
Sau đó, thực thi một hàng trong cơ sở dữ liệu. Bài kiểm tra thành công mặc dù hành vi hiển thị cho người dùng bị lỗi. Khẳng định dựa trên kết quả đầu ra có thể quan sát được, chẳng hạn như trang hoặc phản hồi.
Sơ lược kịch bản (không kèm bảng ví dụ) Mẫu này không bao giờ được thực thi. Thêm phần Ví dụ ngay bên dưới phần dàn ý.

Khắc phục những lỗi này trước khi bộ ứng dụng phát triển sẽ tiết kiệm chi phí hơn nhiều so với việc khắc phục sau đó, bởi vì mọi kịch bản được viết trong thời gian đó đều sao chép cùng một cấu trúc. Sau khi các tập tin tính năng hoạt động đúng cách, bước tiếp theo là kết nối dự án — xem phần tiếp theo. Cucumber cài đặt hướng dẫn và phạm vi rộng hơn kiểm tra tự động hóa series.

Câu Hỏi Thường Gặp

Không. Một tệp .feature chỉ có thể khai báo chính xác một Feature, mặc dù nó có thể chứa bao nhiêu kịch bản tùy thích. Nếu bạn cần Feature thứ hai, hãy tạo một tệp thứ hai — ràng buộc đó giúp thư mục dễ điều hướng hơn khi bộ ứng dụng phát triển.

Thực tế không phải vậy. Gherkin được bản địa hóa sang hơn bảy mươi ngôn ngữ nói. Việc thêm tiêu đề ngôn ngữ vào dòng đầu tiên của tệp sẽ thay đổi các từ khóa, vì vậy nhóm có thể viết kịch bản bằng chính ngôn ngữ mà các chuyên gia lĩnh vực của họ thực sự sử dụng.

Nó chứa mọi thứ không phải là định nghĩa bước: thiết lập môi trường, cấu hình trình duyệt, các hook chạy trước hoặc sau kịch bản và mã trợ giúp dùng chung. Giữping Nó tách biệt các tệp định nghĩa bước để chúng không bị biến thành tệp vô nghĩa.ping đất.

Cucumber Chương trình báo cáo bước đó là chưa được định nghĩa thay vì thất bại, và in ra một đoạn mã gợi ý mà bạn có thể dán vào tệp định nghĩa bước. Kịch bản được đánh dấu là không đạt, vì vậy một bước chưa được định nghĩa sẽ không bao giờ được tính là thành công một cách âm thầm.

Thẻ được đặt phía trên Tính năng hoặc Kịch bản cho phép trình chạy chọn một tập hợp con tại thời điểm thực thi, độc lập với cấu trúc thư mục. Các nhóm thường gắn thẻ cho một bộ kiểm thử nhanh, một bộ kiểm thử chậm và một bộ đang trong quá trình hoàn thiện, sau đó chỉ chạy những gì mà một giai đoạn nhất định trong quy trình cần.

Các mô hình ngôn ngữ lớn soạn thảo Gherkin từ một tiêu chí chấp nhận tốt và tạo ra các khung định nghĩa phù hợp nhanh hơn nữa. RevHãy xem kết quả đầu ra cho các đoạn văn bản bước bị trùng lặp và cho các trường hợp làm lộ chi tiết triển khai, đây là nơi mà mã Gherkin được tạo ra thường gặp lỗi.

Rất tốt. Với một tập tin tính năng đang mở, Copilot sẽ suy ra biểu thức chính quy và chữ ký phương thức cho một bước chưa được định nghĩa và điền vào phần thân từ mã xung quanh. Hãy coi nó như một bản nháp đầu tiên; các khẳng định mà nó đề xuất vẫn cần được con người kiểm tra lại.

Đúng vậy, và đó chính là mục đích của thiết kế. Các định nghĩa nằm trong một thư mục dùng chung và được đối khớp bằng văn bản, chứ không phải bằng tệp, vì vậy một bước đăng nhập được viết một lần sẽ được sử dụng lại bởi mọi tính năng cần đến nó. Việc sử dụng lại là lý do tại sao văn bản bước trùng lặp bị cấm.

Tóm tắt bài viết này với: