Kiểm thử tự động sử dụng BDD
1. BDD là gì?
BDD (Behavior Driven Development) là một quá trình phát triển phần mềm dựa trên phương pháp Agile(phát triển phần mềm linh hoạt).
BDD là sự mở rộng của TDD (Test driven development). Thay vì tập trung vào phát triển phần mềm theo hướng kiểm thử, BDD tập trung vào phát triển phần mềm theo hướng hành vi.
Dựa vào requirement các kịch bản test (Scenarios) sẽ được viết trước dưới dạng ngôn ngữ tự nhiên và dễ hiểu nhất sau đó mới thực hiện cài đặt source code đễ pass qua tất cả các stories đó.
Những kịch bản test này được viết dưới dạng các feature file và đòi hỏi sự cộng tác từ tất cả các thành viên tham gia dự án hay stakeholder.
2. Những lợi ích khi sử dụng BDD
– Giúp xác định đúng yêu cầu của khách hàng: tài liệu được viết dưới dạng ngôn ngữ tự nhiên, bất kỳ đối tượng nào cũng có thể hiểu được. Khi đọc tài liệu này, khách hàng có thể dễ dàng nhận biết được lập trình viên có hiểu đúng yêu cầu của họ không và có phản hồi kịp thời.
– Là tài liệu sống của dự án: tài liệu này luôn được cập nhật khi có bất kỳ sự thay đổi nào nên tất cả các thành viên sẽ không bị miss thông tin khi phát triển hệ thống
– Nâng cao chất lượng phần mềm, tạo ra sản phẩm hữu ích: vì phát triển phần mềm theo hướng hành vi nên có thể focus vào việc tạo ra sản phẩm đúng với yêu cầu của khách hàng nhưng vẫn hữu ích cho người dùng.
3. Ai sẽ là người viết BDD?
Như đã đề cập ở trên, BDD đề cao sự cộng tác giữa các thành viên trong dự án cũng như các bên liên quan. Vì vậy, tất cả những người này sẽ xây dựng nên file BDD để đưa ra một cái nhìn chung nhất, chính xác nhất về yêu cầu của dự án.
4. Viết BDD như thế nào?
BDD được viết dưới dạng plain text language gọi là Gherkin.
(*) Các quy tắc khi viết Gherkin:
– File lưu dưới dạng extension là .feature
– Mỗi một file .feature thường gồm một chức năng duy nhất
– Một chức năng bao gồm nhiều kịch bản khác nhau với danh sách các bước
(**) Cú pháp của Gherkin
Một file feature bằng Gherkin được trình bày dưới dạng như sau:
Feature: Some terse yet descriptive text of what is desired In order to realize a named business value As an explicit system actor I want to gain some beneficial outcome which furthers the goal Background: Given … And … Scenario: Some determinable business situation Given some precondition And some other precondition When some action by the actor And some other action And yet another action Then some testable outcome is achieved And something else we can check happens too Scenario: A different situation ...
Các bạn có tham khảo các từ khóa cơ bản và ý nghĩa của chúng dưới đây:
- Feature:
- Ý nghĩa: Là một đoạn text mô tả ngắn gọn về chức năng thực hiện
- Ví dụ:
Feature: Multiple site support
- Background:
- Ý nghĩa:
- Cho phép thêm một số ngữ cảnh cho tất cả các Scenario trong feature
- Có chứa một số bước được chạy trước mỗi Scenario
- Có thể hiểu đơn giản giống như điều kiện tiên quyết để thực hiện tất cả các Scenario trong feature
- Được khai báo sau từ khóa “Feature”
- Ví dụ:
Feature: Multiple site support Background: Given a global administrator named "Greg" And a blog named "Greg's anti-tax rants" And a customer named "Wilson" And a blog named "Expensive Therapy" owned by "Wilson"
- Ý nghĩa:
- Scenario:
- Ý nghĩa:
- Từ khóa bắt đầu trước mỗi kịch bản, tiếp theo là tiêu đề của kịch bản sẽ thực hiện
- Mỗi kịch bản bao gồm một hoặc nhiều bước
- Ví dụ:
Scenario: Wilson posts to his own blog Given I am logged in as Wilson When I try to post to "Expensive Therapy" Then I should see "Your article was published."
- Ý nghĩa:
- Given:
- Ý nghĩa: Mô tả điều kiện tiên quyết để thực hiện 1 Scenario
- Ví dụ:
Scenario: Wilson posts to his own blog Given I am logged in as Wilson When I try to post to "Expensive Therapy" Then I should see "Your article was published."
- When:
- Ý nghĩa: Mô tả các hành động chính (Steps) mà người dùng thực hiện
- Ví dụ:
Scenario: Wilson posts to his own blog Given I am logged in as Wilson When I try to post to "Expensive Therapy" Then I should see "Your article was published."
- Then:
- Mô tả: Mô tả kết quả đầu ra mong muốn của Scenario
- Ví dụ:
Scenario: Wilson posts to his own blog Given I am logged in as Wilson When I try to post to "Expensive Therapy" Then I should see "Your article was published."
- And/ But:
- Ý nghĩa: Thay thế cho các từ khóa Given/ When/ Then để làm cho chương trình mạch lạc hơn
- Ví dụ:
Scenario: Multiple Givens Given one thing Given an other thing Given yet an other thing When I open my eyes Then I see something Then I don't see something else
Đoạn mã trên có được thay thế như sau:
Scenario: Multiple Givens Given one thing And an other thing And yet an other thing When I open my eyes Then I see something But I don't see something else
- Scenario Outlines:
…
Examples:
…- Ý nghĩa:
- Scenario Outlines để gom nhóm các kịch bản có chung các Steps nhưng có nhiều input và output
- Examples để thực hiện khai báo các giá trị cho các biến trong Scenario Outlines
- Ví dụ:
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
Đoạn code trên có thể được thay thế như sau:
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 |
- Ý nghĩa:
- @tag:
- Ý nghĩa: Sử dụng @tag để tổ chức, sắp xếp các tính năng và kịch bản
- Ví dụ:
@billing Feature: Verify billing @important Scenario: Missing product description Scenario: Several products
5. Tài liệu tham khảo
https://en.wikipedia.org/wiki/
…
Các bạn có thể sử dụng rất nhiều công cụ hay automation framework khác nhau để thực hiện automation test nhưng hãy một lần thử trải nghiệm automation test sử dụng BDD nhé!
Để bắt đầu từ những bước đầu tiên các bạn có thể tham khảo video hướng dẫn trong bài viết “Serenity BDD – Sự lựa chọn hoàn hảo cho kiểm thử tự động”.
Bài viết ghi lại những hiểu biết còn khá cơ bản của người viết trong quá trình tìm hiểu về BDD. Rất mong được sự góp ý từ tất cả các bạn!
(sưu tầm và biên soạn)