Kiểm thử tự động sử dụng BDD

BDD-cross-platform-Framework

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

       

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

http://www.guru99.com

http://www.testingvn.com/

https://github.com/

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)

Add a Comment

Scroll Up