Giới Thiệu Về Gherkin

Gherkin là một ngôn ngữ định dạng văn bản có cấu trúc đơn giản, sử dụng cú pháp gần với ngôn ngữ tự nhiên. Mục tiêu của Gherkin là làm cho các kịch bản kiểm thử dễ hiểu cho tất cả mọi người, kể cả những người không có kỹ thuật lập trình. Nó thường được sử dụng trong Behavior-Driven Development (BDD) để mô tả hành vi của phần mềm dưới dạng các tính năngkịch bản.

Cú pháp của Gherkin giúp tạo ra sự thống nhất giữa các bên liên quan trong dự án, từ khách hàng, quản lý dự án đến đội phát triển và kiểm thử. Trong Java, Gherkin thường được sử dụng với công cụ Cucumber để chuyển các kịch bản thành mã kiểm thử tự động.

Cấu Trúc Cơ Bản Của Gherkin

Cấu trúc của Gherkin rất đơn giản và dễ hiểu. Nó bao gồm các từ khóa sau:

  • Feature: Mô tả tính năng chính của hệ thống hoặc phần mềm mà bạn muốn kiểm thử.
  • Scenario: Tình huống cụ thể mà bạn muốn mô tả hoặc kiểm thử.
  • Given: Điều kiện ban đầu của hệ thống trước khi hành động diễn ra.
  • When: Hành động hoặc sự kiện mà người dùng thực hiện.
  • Then: Kết quả mong đợi sau khi hành động được thực hiện.
  • And/ But: Kết nối các bước kiểm thử, làm rõ thêm điều kiện hoặc kết quả.

Ví Dụ Cấu Trúc Gherkin

Feature: Tính năng đăng nhập

  Scenario: Đăng nhập thành công với thông tin hợp lệ
    Given Người dùng đã có tài khoản hợp lệ
    When Người dùng nhập đúng tên đăng nhập và mật khẩu
    Then Người dùng sẽ được chuyển đến trang chính của hệ thống

Viết Gherkin Test trong Cucumber

Cucumber là công cụ phổ biến được sử dụng để thực thi các kịch bản viết bằng Gherkin. Cucumber chuyển đổi các kịch bản này thành mã kiểm thử thực tế. Khi sử dụng Cucumber, bạn có thể viết các kiểm thử tự động mà không cần phải sử dụng các thuật ngữ lập trình phức tạp.

Các Từ Khóa Chính Trong Gherkin

1. Feature

Feature mô tả tính năng chính hoặc một tập hợp các hành vi của phần mềm. Đây là một khái niệm lớn, mô tả những gì bạn muốn kiểm thử.

Ví dụ:

Feature: Tính năng đăng nhập
  Để bảo mật thông tin cá nhân
  Là một người dùng
  Tôi muốn có thể đăng nhập vào hệ thống

2. Scenario

Scenario mô tả một trường hợp cụ thể của tính năng mà bạn muốn kiểm thử. Mỗi kịch bản phải bao gồm một chuỗi các bước từ đầu đến cuối để kiểm tra một tình huống cụ thể.

Ví dụ:

Scenario: Đăng nhập thành công với thông tin hợp lệ
    Given Người dùng đã có tài khoản hợp lệ
    When Người dùng nhập đúng tên đăng nhập và mật khẩu
    Then Người dùng sẽ được chuyển đến trang chính của hệ thống

3. Given

Given mô tả trạng thái hoặc điều kiện ban đầu của hệ thống. Nó thường đại diện cho một tiền đề cần phải có trước khi thực hiện hành động.

Ví dụ:

Given Người dùng đã có tài khoản hợp lệ

4. When

When mô tả một hành động hoặc sự kiện mà người dùng thực hiện trong hệ thống. Đây là phần diễn tả hành vi mà bạn muốn kiểm thử.

Ví dụ:

When Người dùng nhập đúng tên đăng nhập và mật khẩu

5. Then

Then mô tả kết quả mong đợi sau khi hành động đã được thực hiện. Nó là phần quan trọng nhất để xác định xem kiểm thử có thành công hay không.

Ví dụ:

Then Người dùng sẽ được chuyển đến trang chính của hệ thống

6. AndBut

AndBut được sử dụng để nối nhiều điều kiện, hành động hoặc kết quả.

Ví dụ:

Scenario: Đăng nhập thất bại với mật khẩu không chính xác
  Given Người dùng đã có tài khoản hợp lệ
  When Người dùng nhập đúng tên đăng nhập nhưng sai mật khẩu
  Then Hệ thống sẽ hiển thị thông báo lỗi đăng nhập không thành công
  And Tên đăng nhập và mật khẩu không được lưu

Viết Step Definitions trong Cucumber

Các bước kiểm thử được mô tả trong Gherkin không thể thực thi nếu không có mã tương ứng để thực hiện chúng. Để làm điều này, bạn cần tạo các step definitions (định nghĩa bước), là các phương thức trong mã chương trình để ánh xạ từng bước của Gherkin.

Ví Dụ:

Giả sử bạn đã viết kịch bản sau trong Gherkin:

Scenario: Đăng nhập thành công với thông tin hợp lệ
  Given Người dùng đã có tài khoản hợp lệ
  When Người dùng nhập đúng tên đăng nhập và mật khẩu
  Then Người dùng sẽ được chuyển đến trang chính của hệ thống

Bước tiếp theo là viết mã Java trong Cucumber để ánh xạ từng bước này:

import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;

public class LoginStepDefinitions {

    @Given("Người dùng đã có tài khoản hợp lệ")
    public void nguoiDungDaCoTaiKhoanHopLe() {
        // Kiểm tra người dùng đã có tài khoản hợp lệ trong hệ thống
        System.out.println("Người dùng có tài khoản hợp lệ");
    }

    @When("Người dùng nhập đúng tên đăng nhập và mật khẩu")
    public void nguoiDungNhapDungTenDangNhapVaMatKhau() {
        // Thực hiện đăng nhập với tên đăng nhập và mật khẩu đúng
        System.out.println("Người dùng nhập thông tin đúng");
    }

    @Then("Người dùng sẽ được chuyển đến trang chính của hệ thống")
    public void nguoiDungDuocChuyenDenTrangChinh() {
        // Kiểm tra người dùng đã được chuyển đến trang chính
        System.out.println("Người dùng đã vào trang chính");
    }
}

Ví Dụ Thực Tế

Tính Năng Đăng Ký Tài Khoản

Feature: Đăng ký tài khoản
  Để sử dụng hệ thống
  Là một người dùng mới
  Tôi muốn có thể đăng ký tài khoản mới

  Scenario: Đăng ký thành công với thông tin hợp lệ
    Given Người dùng mới chưa có tài khoản
    When Người dùng cung cấp thông tin hợp lệ
    Then Tài khoản mới sẽ được tạo
    And Người dùng sẽ được chuyển đến trang đăng nhập

Tính Năng Tìm Kiếm Sản Phẩm

Feature: Tìm kiếm sản phẩm
  Để tìm được sản phẩm phù hợp
  Là một khách hàng
  Tôi muốn có thể tìm kiếm sản phẩm theo từ khóa

  Scenario: Tìm kiếm thành công với từ khóa hợp lệ
    Given Người dùng đang ở trang chủ
    When Người dùng nhập từ khóa vào thanh tìm kiếm
    Then Kết quả tìm kiếm sẽ hiển thị sản phẩm phù hợp

Kết Luận

Gherkin là một công cụ mạnh mẽ cho việc viết các kịch bản kiểm thử trong Cucumber, giúp liên kết các bên liên quan trong dự án. Nhờ cú pháp dễ hiểu, bạn có thể viết và thực thi các kịch bản kiểm thử tự động mà không cần kỹ năng lập trình phức tạp. Với việc tách biệt các bước kiểm thử và mã thực thi, Gherkin và Cucumber tạo nên một hệ thống kiểm thử mạnh mẽ và dễ quản lý, đặc biệt trong phát triển phần mềm theo hướng BDD.